Messaggistica tra microservizi su AWS

1

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.

    
posta damianesteban 05.09.2017 - 18:52
fonte

1 risposta

3

"Stiamo pensando di creare una coda per ogni microservizio e di pubblicare i messaggi nelle code tramite SNS."

Sì, quindi le code possono iscriversi alla notifica e non è più necessario il servizio messaggi. Essenzialmente il suo routing fan out. I tuoi microservizi diventano operatori di code

Tuttavia, molte code e notifiche possono diventare complicate. SQS + SNS è un po 'goffo per certi aspetti. Sarei tentato di limitarne l'utilizzo nei casi in cui ho sicuramente compiti asincroni a lungo termine.

Se puoi montare 4 o 5 micro-servizi su un'istanza di ec2 perché sono tutte piccole operazioni semplici che non sono stressate, le hai semplicemente separate per problemi architettonici. Allora potrebbe valere la pena che si chiamino l'un l'altro quando richiesto.

È molto facile portare le code all'ennesima potenza e avere milioni di servizi nano che comunicano tramite messaggi sns. Non è che questo non funzioni, ma devi monitorare queste code e preoccuparti di messaggi inviati e inviati due volte, code complete, code di errori ecc.

    
risposta data 05.09.2017 - 19:37
fonte

Leggi altre domande sui tag