So che la comunicazione sincrona tra i servizi è un anti-pattern, quindi sto cercando una buona soluzione per il mio caso d'uso.
Ho questi due servizi:
-
Location Service
che gestisce la posizione degli utenti -
Score Service
che gestisce il punteggio degli utenti
Ora, devo creare un altro servizio: Users Feed Service
(UFS). Deve restituire gli utenti vicino a una determinata posizione, ordinati per punteggio (decrescente).
Soluzione sincrona
- Data una posizione, UFS preleva gli utenti vicini dal servizio di localizzazione (REST)
- Per ognuno di essi, ottiene il punteggio dal servizio Punteggio (REST)
- Infine, ordina gli utenti in memoria e li restituisce
Qual è l'alternativa? Ho pensato a qualcosa del genere:
Soluzione della coda eventi
- UFS memorizza le posizioni degli utenti e i punteggi in un database, o nella memoria cache o qualcosa
- Ascolta le modifiche in coda per aggiornare i propri dati quando il servizio di punteggio e il servizio di localizzazione pubblicano in esso
In questo modo, quando il client richiede il feed degli utenti, il servizio di feed degli utenti non deve eseguire alcuna richiesta di rete (possiede i dati necessari)
Questa è una buona soluzione? Come posso migliorarlo? Si ridimensionerà a molti utenti?