Sto trovando difficile evitare la duplicazione dei dati o un database condiviso anche per il design dei microservizi più semplice, il che mi fa pensare che mi manchi qualcosa. Ecco un esempio di base del problema che sto affrontando. Supponendo che qualcuno stia usando un'applicazione web per gestire un inventario, avrebbero bisogno di due servizi; uno per l'inventario che gestisce gli articoli e la quantità disponibile e un servizio per gli utenti che gestirà i dati degli utenti. Se vogliamo un controllo su chi ha immagazzinato il database, potremmo aggiungere l'ID utente al database per il servizio di inventario come ultimo fornito per valore.
Usando l'applicazione potremmo voler vedere tutti gli articoli che stanno per finire, e un elenco di chi li ha riforniti l'ultima volta, così possiamo chiedere loro di ridistribuirli di nuovo. Usando l'architettura descritta sopra, verrebbe fatta una richiesta al servizio di inventario per recuperare i dettagli degli articoli di tutti gli articoli in cui la quantità è inferiore a 5. Ciò restituirebbe una lista che includeva gli ID utente. Quindi, al servizio degli utenti verrà inviata una richiesta separata per ottenere il nome utente e i dettagli di contatto per l'elenco di ID utente ottenuti dal servizio di inventario.
Questo sembra terribilmente inefficiente e non ci vogliono molti più servizi prima di fare più richieste a API di servizi diversi, che a loro volta fanno più query sul database. Un'alternativa è quella di replicare i dettagli degli utenti nei dati di inventario. Quando un utente cambia i suoi dettagli di contatto, dovremmo quindi replicare la modifica attraverso tutti gli altri servizi. Ma questo non sembra adattarsi all'idea di contesto limitata dei microservizi. Potremmo anche utilizzare un singolo database e condividerlo tra diversi servizi, e avere tutti i problemi di un database di integrazione .
Qual è il modo corretto / migliore per implementarlo?