Ecco lo scenario:
Gestiamo un'architettura in stile microservizi su AWS utilizzando le istanze API Gateway ed EC2. Supponiamo che ci siano cinque servizi: Servizio foto, Servizio argomenti, Servizio messaggi utente, Servizio messaggi utente e Servizio profili utente. C'è anche un servizio clienti SQS, il "Message Worker". Ogni microservizio ha il proprio database. Ecco la sequenza di eventi quando un utente effettua una richiesta al servizio Messaggi utente (ad esempio):
Il gateway API indirizza la richiesta al servizio Post dell'utente. Il servizio Messaggi degli utenti aggiorna gli elementi necessari nel suo database. Il servizio Post utente pubblica un messaggio per il Message Worker (SQS). Message Worker duplica il messaggio per tutti i servizi necessari, ovvero se il servizio Commenti utente, il Servizio profili utente e il Servizio messaggi utente devono essere tutti aggiornati, duplica il messaggio 3 volte. Message Worker invia i dati a ciascun servizio tramite HTTP e ogni servizio risponde tramite HTTP indicando che ha ricevuto il messaggio o che non è riuscito ad aggiornare. È un modo efficace per gestire i messaggi tra i microservizi? Una preoccupazione è che il Message Worker è un singolo punto di errore, ma qual è l'alternativa? Stiamo pensando di creare una coda per ogni microservizio e di pubblicare i messaggi alle code tramite SNS. Qualche altro suggerimento per renderlo più efficiente?
Siamo limitati a quali servizi possiamo utilizzare a causa della conformità, quindi l'uso di una "coda intelligente" con funzionalità di broker di messaggi come ZeroMQ / RabbitMQ non è possibile.