Ist ein "Benutzer" -Mikroservice eine gute Idee?

9

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?

Umair
quelle
1
Ein verteilter Monolith ist nicht wirklich besser als ein Monolith, normalerweise noch schwieriger zu warten. Mit diesem Begriff wird ein fehlgeschlagener Übergang zu einer Microservice-Architektur beschrieben.
Milan Velebit
1
Sind Sie nicht mit Authentifizierung und Benutzerdaten verwechselt?
user1428716
Ich denke, es würde Ihnen helfen, aufzulisten, welche Benutzerdaten diese Dienste benötigen. Welche Benutzerinformationen benötigt ein Benachrichtigungsdienst, um zu beginnen?
JimmyJames
2
Angenommen, Sie haben alle Antworten, hilft Ihnen nichts. Der Zweck der Übung besteht darin, Ihnen klar zu machen, dass Sie wahrscheinlich nicht in jedem Dienst Benutzerdaten benötigen. Ein wirklich sauberer, wiederverwendbarer Microservice benötigt keine Benutzerdaten. Es benötigt ein Ziel für die Benachrichtigungen.
JimmyJames
2
@Umair Ein guter Weg, um herauszufinden, ob Sie dies oder jenes mit Microservices tun können, besteht darin, festzustellen, warum Sie Microservices überhaupt benötigen. Wenn Sie nicht versuchen, ein bestimmtes Problem zu lösen, bei dem es sich um die überlegene Option handelt, ist die Verwendung von Microservices nur eine schreckliche Idee, die Sie wie ein tollwütiger handgemachter HTML-Regex-Parser in den Hintern beißt. Ich sag bloß'.
T. Sar

Antworten:

2

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.

Milan Velebit
quelle