Come interrogare i dati da più microservizi

3

Ho un'applicazione per l'architettura di servizi micro. Uno dei servizi contiene tutte le informazioni relative all'utente. Un altro servizio contiene un insieme di oggetti business. L'interfaccia utente angolare chiama le API di riposo di user-service e business-service per eseguire operazioni come la gestione degli utenti, la gestione aziendale. Le tabelle nel servizio aziendale contengono l'ID utente del servizio utente, ad esempio il proprietario di un oggetto business. Poiché sono database diversi, non esiste alcun vincolo referenziale.

Voglio visualizzare un elenco di oggetti business nell'interfaccia utente. Voglio poter filtrare i risultati in base al nome del proprietario. Tieni presente che il servizio aziendale non conosce i dettagli dell'utente tranne l'ID utente.

Qual è il modo migliore per eseguire query sui dati appartenenti a più servizi?

Alcune opzioni in mente

  • memorizza i dati ridondanti nel servizio aziendale, ma ciò potrebbe andare fuori sincrono. Potrebbe essere necessario eseguire un cron job per mantenerlo sincronizzato con il servizio utente. Ma la soluzione è brutta.
  • Innanzitutto, ottieni l'elenco degli ID utente corrispondenti al nome dell'utente. Passa quegli ID al servizio aziendale per ottenere l'elenco degli oggetti commerciali lì ottenendo il filtro.

Entrambe le soluzioni non sembrano pulite ...

    
posta TechCrunch 21.06.2017 - 04:42
fonte

1 risposta

3

Di solito ho un servizio dedicato a soddisfare le esigenze di ogni app di frontend. Questo servizio esegue qualsiasi operazione di back-end per conto del frontend. Di solito chiamano questo servizio "servizio". Questo ha un paio di vantaggi:

  • Formatta i dati per il consumo più semplice nell'interfaccia utente. UI diverse avranno requisiti diversi. Ad esempio, se ho un'app per Android, potrei scegliere il servizio di frontend per questa app per utilizzare un formato di serializzazione alternativo per Json perché la larghezza di banda del dispositivo è limitata e ci sono protocolli più piccoli là fuori.
  • Dissocia il formato dei dati che il frontend richiede dal back-end - se decidi di cambiare la struttura Json in uno dei tuoi servizi, puoi usare il modello dell'adattatore nel servizio frontend.
  • Un unico punto di accesso per il frontend al backend: puoi controllare l'accesso qui e limitare i domini, ad esempio.
  • Combina le richieste in modo efficiente - il frontend non dovrebbe inviare il minor numero possibile di richieste al back-end, ma a volte l'interfaccia utente richiede un po 'di dati da diversi servizi. Il servizio di frontend è un buon posto per questa logica e può fare molte richieste in modo molto più efficiente.

First, get list of user ID's matching the user's first name. Pass those IDs to the business service to get the list of business objects there by achieving filtering.

Raccomando questo approccio. Vorrei che il "frontend service" effettuasse una richiesta al servizio utente per ottenere tutti gli utenti per nome, estrarre gli id e fare una richiesta al servizio aziendale per ottenere gli oggetti business dagli ID utente. È necessario implementare endpoint nei servizi per facilitare queste due richieste. Se stai facendo richieste n , hai sbagliato.

    
risposta data 21.06.2017 - 04:58
fonte

Leggi altre domande sui tag