2017-01-30 3 views
0

Wir sind dabei, eine große monolithische E-Commerce-Anwendung in Microservices zu unterteilen. (Wir planen, Java, Spring, Hibernate zu verwenden) Wir haben ein Konzept von Fulfillment-Elementen und persistenten Elementen in unserer monolithischen Anwendung. Unser Plan besteht darin, die CRUD-Vorgänge des Fulfillment-Objekts und die CRUD-Vorgänge des dauerhaften Elements in zwei separate APIs aufzuteilen. Aber wir haben einige gemeinsame Entitäten/Tabellen, die beide APIs benötigen. Was ist der beste Weg, um dieses Szenario zu bewältigen?Shared entity/table design für Microservices

Gegenwärtig ist eine der Optionen, die in der Tabelle geöffnet werden, dass ein Mikrosystem die Entity/Tabelle besitzt und eine READ ONLY Objektreferenz in einem anderen Microservice hat. Gibt es irgendwelche Nachteile?

Antwort

0

Es hängt viel von Ihrer Bereitstellungsstrategie ab. Wenn Sie die beiden APIs zu einem zusammenfassen/verpacken, dann ist es in Ordnung, wenn beide die gleichen Entitäten teilen (in der Tat sollten Sie keine Entitäten duplizieren). Ich würde es vorziehen, alle Entitäten und Repositorys/DAO in einem gemeinsamen Bundle/Paket zu haben, nur um verschiedene APIs für Crud-Operationen (ohne irgendeine andere Geschäftslogik) verfügbar zu machen. Und dann werden meine anderen Komponenten diese APIs verbrauchen und die Geschäftslogik haben.

0

Es gibt wirklich keinen großen Nachteil, außer in Situationen, in denen ein Micro-Service nicht unter eventueller Konsistenz arbeiten kann. Und selbst in diesen Fällen können Sie jederzeit eine Abhängigkeit für Ihren nicht gebräuchlichen Micro-Service hinzufügen, um zu wissen, wie Sie den allgemeinen Micro-Service bei Bedarf nach relevanten Updates abfragen können, obwohl dies nicht ideal ist.

Sie müssen wahrscheinlich eine Form von Mediator-Mechanismus für Ihren Anwendungsfall einführen. So etwas wie ein JMS-Broker ist eine ideale Wahl, die es einem Mikroservice ermöglichen würde, andere interessierte Mikrodienste darüber zu informieren, dass etwas passiert ist, so dass jeder das Ereignis auf seine eigene Weise behandeln kann.

Zum Beispiel könnte eine CustomerMessage ausgelöst werden, die die ID des Kunden, Name, Adresse und vielleicht Kreditlimit enthält und ein Mikro-Service kann nur mit der ID und dem Namen betroffen sein, während ein anderer kann auch in der Adresse interessiert und Kreditlimit.

Verwandte Themen