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
Agestisce alcuni dati, quindi ha bisogno di dire al servizioBdi fare qualcosa con quei dati.Aconosce l'URL dell'endpoint diBe lo chiama direttamente. - Utilizzo di un bus (comunemente una coda di messaggi) per inviare messaggi che verranno raccolti dai singoli microservizi. Ad esempio:
Ainvierà un messaggio su una coda comune,Blo 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?