Considerate i seguenti servizi di micro per un progetto di negozio on-line:
utenti del servizio mantiene i dati dell'account sugli utenti del negozio (tra cui nome, cognome, indirizzo e-mail, ecc ')Microservices Architettura: i dati di servizio trasversale condivisione
Il servizio acquisti tiene traccia dei dettagli sugli acquisti dell'utente.
Ogni servizio fornisce un'interfaccia utente per la visualizzazione e la gestione delle relative entità. La pagina di indice del servizio acquisti elenca gli acquisti. Ogni articolo di acquisto dovrebbe avere i seguenti campi:
id, nome completo dell'acquirente, titolo dell'oggetto acquistato e prezzo.
Inoltre, come parte della pagina indice, mi piacerebbe avere una casella di ricerca per consentire al gestore del negozio di cercare acquisti acquistando il nome utente.
Non mi è chiaro come recuperare i dati che il Servizio acquisti non contiene, ad esempio: il nome completo dell'utente. Il problema peggiora quando si cerca di fare cose più complicate come acquisti di ricerca acquistando il nome utente.
Ho immaginato di poter ovviare a questo problema sincronizzando gli utenti tra i due servizi trasmettendo una sorta di evento sulla creazione dell'utente (e salvando solo le proprietà utente rilevanti sul Servizio acquisti). Questo è lontano dall'ideale nella mia prospettiva. Come gestisci questo quando hai milioni di utenti? creeresti milioni di record in ogni servizio che consuma i dati degli utenti?
Un'altra opzione ovvia è l'esposizione di un'API al servizio utenti che riporta i dettagli dell'utente in base a determinati ID. Ciò significa che ogni pagina caricata nel Servizio acquisti, dovrò effettuare una chiamata al Servizio utenti per ottenere i nomi utente corretti. Non ideale, ma posso conviverci.
Che ne pensi di implementare una ricerca di acquisto in base al nome utente? Bene, posso sempre esporre un altro endpoint dell'API al termine del servizio utenti che riceve il termine della query, eseguire una ricerca di testo su nomi utente nel servizio utenti e quindi restituire tutti i dettagli dell'utente che corrispondono ai criteri. Nel Servizio acquisti, associare gli ID pertinenti ai nomi corretti e mostrarli nella pagina. Anche questo approccio non è l'ideale.
Mi manca qualcosa? C'è un altro approccio per implementare quanto sopra? Forse il fatto che sto affrontando questo problema è una sorta di odore di codice? mi piacerebbe sentire altre soluzioni.
Sono un po 'confuso dalla domanda. L'applicazione di fine font dovrebbe essere separata dai servizi. Dovresti essere in grado di apportare modifiche alle applicazioni front end senza modificare un servizio. Per la schermata di acquisto, è necessario chiamare il servizio di acquisto e il servizio utenti per ottenere i dati per lo schermo. In alternativa, una API separata potrebbe essere messa di fronte ai servizi che chiameranno entrambi i servizi e quindi restituiranno i dati allo schermo. Dai uno sguardo al diagramma [qui] (http://martinfowler.com/articles/microservices.html#DecentralizedDataManagement) che mostra come dovrebbe funzionare. –
Ecco il modello dell'API: http://microservices.io/patterns/apigateway.html –