Ich finde es schwierig, Datenvervielfältigungen oder eine gemeinsam genutzte Datenbank selbst für das einfachste Mikrodienstdesign zu vermeiden, was mich glauben lässt, dass mir etwas fehlt. Hier ist ein grundlegendes Beispiel für das Problem, mit dem ich konfrontiert bin. Angenommen, jemand verwendet eine Webanwendung, um ein Inventar zu verwalten, dann würde er zwei Dienste benötigen. eine für das Inventar, das die Artikel und die Menge auf Lager verwaltet, und einen Benutzerservice, der die Benutzerdaten verwaltet. Wenn wir prüfen möchten, wer die Datenbank auf Lager hat, können wir der Datenbank die Benutzer-ID für den Inventarservice als Wert für den letzten Bestand hinzufügen.
Unter Verwendung der Anwendung möchten wir möglicherweise alle Artikel anzeigen, die zur Neige gehen, und eine Liste, von wem sie das letzte Mal eingelagert wurden, damit wir sie auffordern können, sie erneut aufzufüllen. Unter Verwendung der oben beschriebenen Architektur würde eine Anfrage an den Inventarservice gestellt, um die Artikeldetails aller Artikel abzurufen, bei denen die Menge kleiner als 5 ist. Dies würde eine Liste mit den Benutzer-IDs zurückgeben. Anschließend wird eine separate Anfrage an den Benutzerservice gesendet, um den Benutzernamen und die Kontaktdaten für die Liste der Benutzer-IDs abzurufen, die vom Inventarservice bezogen wurden.
Dies scheint schrecklich ineffizient zu sein, und es werden nicht mehr viele Dienste benötigt, bevor mehrere Anforderungen an verschiedene Dienst-APIs gesendet werden, die wiederum mehrere Datenbankabfragen durchführen. Eine Alternative besteht darin, die Benutzerdetails in den Inventardaten zu replizieren. Wenn ein Benutzer seine Kontaktdaten ändert, müssen wir die Änderung über alle anderen Dienste replizieren. Dies scheint jedoch nicht mit der begrenzten Kontextidee von Mikrodienstleistungen übereinzustimmen. Wir könnten auch eine einzige Datenbank verwenden und diese zwischen verschiedenen Diensten teilen und alle Probleme einer Integrationsdatenbank haben .
Was ist der richtige / beste Weg, dies umzusetzen?