Ich bin neu in Microservices, und nach meinem Verständnis sagt DDD, dass Microservices auf Geschäftsdomänen aufbauen sollen. Dies bedeutet, dass gute Microservices wie AppointmentScheduler und SendNotification im Kontext eines Besprechungsbuchungssystems sind.
In diesem Beispiel benötigen beide Microservices Zugriff auf Benutzerdaten, um ihre Geschäftsfunktionen zu erfüllen, und ich habe Probleme, sie am besten bereitzustellen.
Für mich scheint ein Benutzer ein Objekt zu sein, das als Entität innerhalb eines Mikrodienstes existieren sollte , aber es müsste in den meisten Mikrodiensten existieren, da Benutzerdaten fast überall benötigt werden. Dies führt auch zu vielen Überschneidungen.
Die andere Option besteht darin, einen Benutzer-Mikroservice zu haben , der CRUD-Operationen für die Benutzerdatenbank bereitstellt. Dies kann dann von anderen Mikrodiensten verwendet werden, um auf die Benutzerdaten zuzugreifen, aber das Problem, das ich damit habe, ist, dass Dienste eng miteinander verbunden werden, bis wir einen verteilten Monolithen erhalten, der etwas besser ist als ein Monolith an sich.
Scheint meine Argumentation gültig zu sein? Wie gehen andere mit Problemen um?
quelle
Antworten:
Wenn Sie in den meisten Ihrer Microservices wirklich dasselbe Benutzerobjekt / Modell / Datensatz benötigen, benötigen Sie wahrscheinlich überhaupt keine separaten Microservices ODER sie sollten nach ihrem Wissen objektunabhängig sein. Somit verwaltet jeder Mikrodienst einen Untertyp eines Benutzermodells mit den Daten, die für seine Funktionalität benötigt werden, mit einem Schlüssel, der zur Unterscheidung dieses Benutzers verwendet wird. In einer idealen Welt können Sie auf diese Weise die erforderlichen Mutationen durchführen und Änderungen über einen Ereignismakler im gesamten System verbreiten (vorausgesetzt, Sie haben eine ereignisgesteuerte Architektur). Andernfalls müsste jeder Dienst einige kennen (oder alle) andere Dienste und was sie tun sollen und welche Arten von Objekten sie erwarten zu empfangen.
Beachten Sie, dass in einer echten Microservice-Umgebung von jedem Microservice ein eigener Datenspeicher erwartet wird, der vom Rest des Systems isoliert ist. Dies bestätigt meine ursprüngliche Aussage, dass Sie das Konzept einer Benutzerentität vollständig sichern sollten .
Zum Beispiel würde ein SendNotification- Mikroservice nur ein Objekt mit einer Websocket-ID (die über die Dienste weitergegeben wird und schließlich diese erreicht) und den Daten empfangen, die an den Benutzer zurückgegeben werden sollen, und möglicherweise nur die erforderlichen Felder überprüfen sind da und schieben die Benachrichtigung durch die WS-Kennung auf den entsprechenden Kanal. Es muss nicht wissen, welche Arten von Objekten es überhaupt behandelt.
quelle