Ich versuche immer noch, mich mit der Microservice-Architektur zu beschäftigen, da ich an einen monolithischen Ansatz gewöhnt bin
Angenommen, wir versuchen, ein extrem vereinfachtes Uber-Buchungssystem aufzubauen. Um die Dinge zu vereinfachen wir sagen wir , wir haben 3 - Dienste und einen Gateway - api für die Kunden: Booking
, Drivers
, Notification
und wir haben die folgenden Workflow:
Beim Erstellen einer neuen Buchung:
- Überprüfen Sie, ob der bestehende Benutzer bereits eine Buchung hat
- Liste der verfügbaren Treiber abrufen
- Senden Sie eine Benachrichtigung an die Fahrer, um die Buchung abzuholen
- Der Fahrer holt die Buchung ab
Nehmen wir an, alle Nachrichten werden über einen http-Aufruf und nicht über einen Messaging-Bus wie kafka gesendet, um die Dinge einfach zu halten.
In diesem Fall dachte ich, dass der Booking
Service die Überprüfung auf vorhandene Buchungen durchführen kann. Aber wer sollte dann die Liste der verfügbaren Treiber und Benachrichtigungen erhalten? Ich denke darüber nach, es auf Gateway-Ebene zu tun, aber jetzt ist die Logik in zwei Bereiche unterteilt:
Gateway
- Liste der verfügbaren Treiber abrufen + Benachrichtigungen sendenBooking
- Überprüfen Sie die bestehende Buchung
Und ich bin mir ziemlich sicher, dass das Gateway nicht der richtige Ort dafür ist, aber ich habe das Gefühl, wenn wir es im Booking
Service tun , wird es eng miteinander verbunden?
Was passiert, wenn wir ein anderes Projekt haben, das das Buchungssystem wiederverwenden möchte, aber über eine eigene Geschäftslogik verfügt? Aus diesem Grund habe ich darüber nachgedacht, dies auf Gateway-Ebene zu tun, damit das neue Projekt-Gateway eine eigene Geschäftslogik haben kann, die von der vorhandenen getrennt ist.
Ich nehme an, eine andere Möglichkeit besteht darin, dass jedes Projekt einen eigenen Buchungsservice hat, der mit dem Hauptbuchungsservice spricht, aber ich bin mir nicht sicher, was hier der beste Ansatz ist :-)