Es ist möglich, eine gemeinsam genutzte Datenbank für mehrere Mikrodienste zu verwenden. Die Muster für die Datenverwaltung von Microservices finden Sie unter folgendem Link: http://microservices.io/patterns/data/database-per-service.html . Übrigens ist es ein sehr nützlicher Blog für die Microservices-Architektur.
In Ihrem Fall bevorzugen Sie die Verwendung der Datenbank pro Dienstmuster. Dies macht Microservices autonomer. In dieser Situation sollten Sie einige Ihrer Daten auf mehrere Microservices duplizieren. Sie können die Daten für API-Aufrufe zwischen Microservices oder für asynchrone Nachrichten freigeben. Dies hängt von Ihrer Infrastruktur und der Häufigkeit von Datenänderungen ab. Wenn es sich nicht oft ändert, sollten Sie die Daten mit asynchronen Ereignissen duplizieren.
In Ihrem Beispiel kann der Lieferservice Lieferorte und Produktinformationen duplizieren. Der Produktservice verwaltet die Produkte und Standorte. Anschließend werden die erforderlichen Daten mit asynchronen Nachrichten in die Datenbank des Zustelldienstes kopiert (Sie können beispielsweise rabbit mq oder apache kafka verwenden). Der Lieferservice ändert die Produkt- und Standortdaten nicht, verwendet sie jedoch bei der Ausführung seiner Arbeit. Wenn sich der Teil der Produktdaten, der vom Lieferservice verwendet wird, häufig ändert, ist die Duplizierung von Daten mit asynchronem Messaging sehr kostspielig. In diesem Fall sollten Sie API-Anrufe zwischen Produkt und Lieferservice tätigen. Der Lieferservice fordert den Produktservice auf, zu prüfen, ob ein Produkt an einen bestimmten Ort geliefert werden kann oder nicht. Der Lieferservice fragt den Produktservice nach einer Kennung (Name, ID usw.) eines Produkts und eines Standorts. Diese Kennungen können vom Endbenutzer übernommen oder von Microservices gemeinsam genutzt werden. Da die Datenbanken von Microservices hier unterschiedlich sind, können wir keine Fremdschlüssel zwischen den Daten dieser Microservices definieren.
API-Aufrufe sind möglicherweise einfacher zu implementieren, aber die Netzwerkkosten sind bei dieser Option höher. Außerdem sind Ihre Dienste weniger autonom, wenn Sie API-Anrufe tätigen. In Ihrem Beispiel kann der Lieferservice seine Aufgabe nicht erfüllen, wenn der Produktservice nicht verfügbar ist. Wenn Sie die Daten mit asynchronem Messaging duplizieren, befinden sich die für die Zustellung erforderlichen Daten in der Datenbank von Delivery Microservice. Wenn der Produktservice nicht funktioniert, können Sie die Lieferung ausführen.