Sto trovando difficile evitare la duplicazione dei dati o un database condiviso anche per la progettazione 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 utilizzando un'applicazione Web per gestire un inventario, avrebbero bisogno di due servizi; uno per l'inventario che gestisce gli articoli e la quantità in magazzino e un servizio 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.
Utilizzando l'applicazione potremmo voler vedere tutti gli articoli che stanno per esaurirsi e un elenco di chi li ha immagazzinati l'ultima volta in modo da poter chiedere loro di rifornirlo di nuovo. Usando l'architettura sopra descritta, verrà inviata una richiesta al servizio di inventario per recuperare i dettagli dell'articolo di tutti gli articoli in cui la quantità è inferiore a 5. Ciò restituirebbe un elenco che include gli ID utente. Quindi verrà inviata una richiesta separata al servizio utenti per ottenere il nome utente e i dettagli di contatto per l'elenco degli ID utente ottenuti dal servizio di inventario.
Questo sembra terribilmente inefficiente e non ci vogliono molti più servizi prima di effettuare più richieste a API di servizi diversi che a loro volta eseguono più query sul database. Un'alternativa è replicare i dettagli degli utenti nei dati di inventario. Quando un utente modifica i propri dati di contatto, è necessario replicare la modifica tramite tutti gli altri servizi. Ma questo non sembra adattarsi all'idea di contesto limitato 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?