Alternativa alla comunicazione REST sincrona tra microservizi

4

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

  1. Data una posizione, UFS preleva gli utenti vicini dal servizio di localizzazione (REST)
  2. Per ognuno di essi, ottiene il punteggio dal servizio Punteggio (REST)
  3. 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?

    
posta Héctor 21.08.2017 - 08:59
fonte

2 risposte

1

Dovresti verificarlo: link . Puoi davvero lavorare con gli eventi.

In effetti lo risolverebbe in questo modo:

  • La posizione pubblica un evento nell'archivio degli eventi

  • Punteggio ascolta l'archivio degli eventi e quando ricevi l'evento, gestiscilo e pubblicalo di nuovo.

risposta data 24.08.2017 - 14:36
fonte
1

La comunicazione sincrona tra servizi NON è un anti-modello di per sé. Potrebbe benissimo essere che nel tuo caso una soluzione sincrona sia migliore di una asincrona, a causa della complessità aggiuntiva introdotta dall'asincronia.

Una soluzione eccessivamente loquace è piuttosto brutta. Sarebbe probabilmente meglio se la quantità di richieste tra UFS e Score Service fosse costante per richiesta, indipendentemente dal numero di utenti restituiti dal servizio di localizzazione.

Avrei l'UFS passare l'intero elenco di ID utente al servizio Punteggio e ottenere una singola risposta, possibilmente già ordinata in ordine decrescente.

Probabilmente andrei con la comunicazione sincrona, a meno che l'intero processo non faccia parte di un'operazione in background.

    
risposta data 31.08.2017 - 02:56
fonte

Leggi altre domande sui tag