Per quanto ne so, ci sono due schemi comunemente usati quando si tratta di comunicazione di servizi in un'architettura di microservizi:
- Chiamata diretta di altri servizi. Ad esempio: il servizio
A
gestisce alcuni dati, quindi ha bisogno di dire al servizioB
di fare qualcosa con quei dati.A
conosce l'URL dell'endpoint diB
e lo chiama direttamente. - Utilizzo di un bus (comunemente una coda di messaggi) per inviare messaggi che verranno raccolti dai singoli microservizi. Ad esempio:
A
invierà un messaggio su una coda comune,B
lo riceverà e saprà cosa fare.
Entrambi hanno lati negativi:
- La funzione di chiamata diretta di altri servizi conduce a servizi di accoppiamento stretto con altri servizi. Se cambi il servizio
B
, probabilmente dovrai adattare e ridistribuire anche tutti gli altri servizi che interagiscono conB
. - L'uso di un bus è interessante perché non è necessario sapere quale servizio sarà in grado di gestire la richiesta, ma se il MQ fallisce per qualsiasi motivo diventerà il singolo punto di errore dell'intero sistema.
Quindi, qual è il modo preferito di gestire le comunicazioni di servizio?
Abbiamo alternative che possono ridurre i guasti e evitare l'accoppiamento stretto tra i microservizi?