Gestione dei messaggi di errore da altri servizi in Micro Service Architecture

6

La nostra azienda esegue applicazioni su un'architettura Micro Service che include migliaia di servizi. Sto lavorando a un'applicazione back-end "X" che parla con oltre 50 servizi. I servizi di front-end chiamano il mio servizio "X" per eseguire richieste su altri servizi.

Problema :

Il front-end vuole mostrare messaggi user friendly quando qualcosa non funziona su altri servizi.

  1. Altri servizi non restituiscono messaggi di facile utilizzo. Non è possibile per me richiedere modifiche da parte di altri team poiché ce ne sono diversi.
  2. Non ci sono codici di errore concordati in quanto tali. Altri servizi restituiscono un messaggio di errore di stringa. Attualmente, viene restituito all'interfaccia utente. A volte i messaggi di errore sono riferimenti a puntatori (codice errato: /)

Soluzione possibile :

Controlla la stringa del messaggio di errore e disponi di una mappatura nel mio servizio per un messaggio user-friendly. Ma le cose possono rompersi se il servizio del callee ha cambiato il loro messaggio di errore. Fallback a un messaggio di errore predefinito quando non viene trovata una mappatura degli errori personalizzata.

Altre idee su una soluzione scalabile e sostenibile? Grazie!

    
posta TechCrunch 16.01.2018 - 19:04
fonte

2 risposte

3

Avvertenze

Our company runs applications on a Micro Service architecture that includes thousands of services. I am working on a backend application "X" that talks to 50+ services. Frontend services call my service "X" to execute requests on other services.

Prima di tutto, migliaia di servizi casuali non rendono l'architettura un Microservizio come l'architettura. È ancora necessario un certo senso di un "intero" e un po 'di accordo tra i servizi. Linee guida o regole pratiche.

Contestualizza il back-end all'interno di "intero"

Suppongo che il tuo back-end non sia né gateway proxy . Immagino che abbia il proprio business e un contesto limitato ben definito. Quindi, per quanto riguarda altri servizi, il back-end è una facciata .

Come facciata, nascondere i dettagli di implementazione (come ad esempio le integrazioni con i servizi remoti) rientra tra le sue responsabilità. Per il front-end (e quindi per l'utente finale), l'unico interlocutore affidabile è X e nessun dettaglio di implementazione dovrebbe raggiungere i livelli esterni. Qualunque cosa sia successa sotto il cofano, non è affare degli utenti.

Questo non significa che non possiamo dire all'utente che qualcosa è andato storto. Possiamo, ma lo facciamo astrarre questi dettagli. Non daremo l'impressione che qualcosa di remoto stia fallendo. Al contrario, qualcosa in X ha avuto esito negativo e il gioco è fatto.

Dato che stiamo parlando di migliaia di possibili integrazioni (+50 atm), il numero di errori possibili e diversi è significativo. Se mappiamo ognuno di essi in un messaggio personalizzato, l'utente finale sarà sopraffatto da così tante (e non contestualizzate) informazioni. Se mappiamo tutti gli errori su una piccola serie di errori personalizzati, stiamo distorcendo le informazioni, rendendo difficile per noi tenere traccia del problema e risolverlo.

A mio parere, i messaggi di errore dovrebbero fornire all'utente la sensazione che ci sia qualcosa che possiamo fare per modificare il problema.

Tuttavia, se gli utenti finali vogliono ancora sapere cosa sta succedendo sotto il cofano, ci sono altri modi più utili per l'intera organizzazione.

Responsabilità

  1. Other services do not return user-friendly messages. It is not possible for me to request changes by other teams as there are several.There are no agreed error codes as such.

  2. Other services return a string error message. Currently, it is passed back to the UI. Sometimes the error messages are a pointer references (bad code :/)

Come sviluppatore, la tua responsabilità è di esporre questi argomenti alle parti interessate. È una questione di responsabilità. A mio parere, c'è una perdita di leadership tecnica e questo è un vero problema quando si tratta di sistemi distribuiti.

Non ci sono previsioni tecniche. Se ci fosse, i servizi sarebbero implementati su regole empiriche per rendere il sistema scalabile e facilitare le integrazioni tra i servizi. In questo momento sembra che i servizi appaiano selvaggiamente, senza il senso di contributo al "tutto".

Se mi venisse chiesto di fare ciò che ti è stato chiesto di fare (e sono stato a volte), direi se trasformare l'anarchia corrente in messaggi user-friendly va oltre lo scopo di X .

Almeno, "alza la mano", esponi le tue preoccupazioni, esponi le tue alternative e lascia che chi ha la responsabilità di decidere.

Rendi preziose le tue soluzioni per l'azienda

Check for error message string and have a mapping in my service to a user-friendly message. But things can break if the callee service changed their error message. Fallback to a default error message when a custom error mapping is not found.

Hai ragione. Questa è una soluzione debole. È fragile e inefficiente nel medio-lungo periodo.

Penso anche che causi l'accoppiamento poiché i cambiamenti in queste stringhe potrebbero costringerti a rifrattare i mapping. Non un grosso miglioramento.

Any more ideas on a scalable and sustainable solution?

Rapporti . Gestire gli errori, fornire un codice / ticket / id a loro e riferire. Quindi, consentire al front-end di visualizzare il report. Ad esempio, condividendo un link al servizio di segnalazione .

Error. < A user-friendly and very default error message >. Follow the link for further information

In questo modo puoi integrare tutti i servizi di cui hai bisogno. E ti libererai dal sovraccarico di gestire e tradurre stringhe casuali in stringhe casuali, ma user-friendly.

Il servizio di report è riutilizzabile per il resto dei servizi in modo che, se si dispone di ID correlati, dovrebbe essere possibile consentire all'utente di visualizzare una panoramica degli errori e delle cause. Nelle architetture distribuite, tracciabilità è abbastanza importante.

In seguito, il servizio di reporting può essere migliorato con tutti i mapping necessari per fornire istruzioni leggibili e utili su cosa fare se si verifica l'errore X . Se le stringhe cambiano qui non importa affatto. Quello che abbiamo (archivio) è uno stato finale del rapporto.

Il servizio di segnalazione aprirà le porte a una possibile normalizzazione degli errori all'interno dell'organizzazione poiché il servizio esporrà un'API pubblica (quindi un contratto).

    
risposta data 11.02.2018 - 23:14
fonte
0

Non c'è miracolo nel tuo caso. La soluzione possibile sembra la soluzione che hai già proposto.

Check for error message string and have a mapping in my service to a user friendly message. But things can break if the callee service changed their error message. Fallback to a default error message when a custom error mapping is not found.

Va bene a un'API cambiare il messaggio di errore se l'API restituisce anche una sorta di codice di errore, che l'utente dell'API può utilizzare per tracciare l'errore e mappare per un altro messaggio (come se stessi provando a fai, ma con il messaggio).

Assicurati solo di registrare il messaggio che l'API ha restituito prima di eseguire l'errore di fallback. Forse puoi aggiungere il messaggio API in qualche tipo di developerMessage nel tuo errore personalizzato, aiutando a identificare il problema senza utilizzare il log (assicurati solo che la loro API non pubblichi alcun messaggio con informazioni sensibili).

Se hai qualche canale di comunicazione con il team che sta facendo questi servizi, spiega il tuo problema e chiedi aiuto da loro, perché quello potrebbe essere lo stesso problema per un altro team che sta cercando di usare la loro API.

    
risposta data 09.02.2018 - 19:32
fonte

Leggi altre domande sui tag