Comunicazione microservizi: applicare RPC?

1

Ho l'opinione che ogni metodo in un servizio dovrebbe fare solo un piccolo passo di un'attività più grande, delegare un risultato al passaggio successivo / metodo e terminare. Non importa se questo metodo successivo risiede nello stesso servizio o meno, viene sempre attivato tramite instradamento inter-servizio (coda messaggi, scoperta servizio + chiamata REST, qualunque cosa ...) e quindi gestito da un'istanza diversa. Il metodo non dovrebbe mai essere chiamato direttamente per impostazione predefinita, a meno che non sia abilitato selettivamente.

Lo so, la comunicazione di rete è più lenta di ordini di grandezza e le attività complesse con molti passaggi eseguiranno più lentamente millisecondi, ma questo è l'unico modo in cui vedo che garantisce che

  • ogni passo è implementato stateless in modo che possa - se necessario - essere sostituito in una tecnologia diversa senza overhead
  • la gestione degli errori è meno costosa in quanto attendere una risposta o fare un passo successivo nello stesso processo aumenta la possibilità di perdere i risultati del passaggio intermedio se quel processo muore per qualsiasi motivo
  • il tasso di errore definito è ridotto in quanto è più facile e più prevedibile implementare una gestione degli errori standardizzata centralmente rispetto al livello del metodo

Pensi che stia supervisionando qualcosa e qual è la tua opinione?

    
posta Auf Zug 21.01.2018 - 21:24
fonte

1 risposta

3

Lo svantaggio nell'usare la coda dei messaggi per la comunicazione tra funzioni sempre più piccole è che l'orchestrazione di questi messaggi diventa sempre più complessa.

Ciò che ottieni con unità di codice più piccole per testare e eseguire il debug ti fanno perdere nell'opacità del routing dei vari messaggi.

  • Che succede se il messaggio X scade o viene ricevuto due volte?
  • I servizi A e B dovrebbero entrambi ascoltare il messaggio Y?
  • Abbiamo aggiornato il servizio C, quanti messaggi precedenti ci sono nella pipeline prima di esso che devono essere elaborati prima di poter disattivare la vecchia versione?
  • Qualcosa accade al server dei messaggi in coda / servizio, forse una zona di disponibilità AWS va giù? in che modo questo influenza le nostre catene di comunicazione in corso di realizzazione.

Ad un certo punto questa complessità diventa più del risparmio che fai con il codice più corto.

Generalmente sono a favore di Message Queues e Routing. Ma l'ho visto portato all'ennesima potenza un paio di volte e c'è sicuramente un punto in cui diventa ingestibile, anche se sembra super cool e tutto funziona quando lo si sviluppa per la prima volta.

Se possibile, la gestione degli errori è molto più complessa di una semplice chiamata al metodo in elaborazione. Sono sorpreso che tu lo abbia scelto come positivo.

    
risposta data 21.01.2018 - 21:49
fonte

Leggi altre domande sui tag