Trudno mi uniknąć duplikacji danych lub wspólnej bazy danych dla nawet najprostszego projektu mikrousług, co sprawia, że myślę, że coś mi brakuje. Oto podstawowy przykład problemu, przed którym stoję. Zakładając, że ktoś używa aplikacji internetowej do zarządzania zapasami, potrzebowałby dwóch usług; jeden dla zapasów zarządzających towarami i ilością w magazynie oraz usługą użytkowników, która zarządzałaby danymi użytkowników. Jeśli chcemy przeprowadzić kontrolę tego, kto zaopatrzył bazę danych, moglibyśmy dodać identyfikator użytkownika do bazy danych dla usługi inwentaryzacji jako ostatni magazynowany według wartości.
Korzystając z aplikacji, możemy chcieć zobaczyć wszystkie wyczerpujące się produkty oraz listę osób, które je ostatnio zaopatrzyły, abyśmy mogli poprosić ich o ponowne uruchomienie. Korzystając z opisanej powyżej architektury, do usługi inwentaryzacyjnej zostanie wysłane żądanie pobrania szczegółów pozycji dla wszystkich towarów, których ilość jest mniejsza niż 5. Zwróci to listę zawierającą identyfikatory użytkowników. Następnie do serwisu użytkowników zostanie wysłane oddzielne żądanie uzyskania nazwy użytkownika i danych kontaktowych dla listy identyfikatorów użytkowników uzyskanych z usługi inwentaryzacji.
Wydaje się to okropnie nieefektywne i nie wymaga wielu innych usług, zanim wykonamy wiele żądań do interfejsów API różnych usług, które z kolei wykonują wiele zapytań do bazy danych. Alternatywą jest replikacja danych użytkowników w danych inwentaryzacyjnych. Gdy użytkownik zmieni swoje dane kontaktowe, będziemy musieli powtórzyć zmianę za pośrednictwem wszystkich innych usług. Ale to wydaje się nie pasować do ograniczonej kontekstowej koncepcji mikrousług. Możemy również użyć jednej bazy danych i udostępnić ją między różnymi usługami oraz mieć wszystkie problemy związane z integracją bazy danych .
Jaki jest właściwy / najlepszy sposób na wdrożenie tego?