2017-04-23 2 views
2

Ich erstelle eine Web-App und einen Microservice für diese App und beide müssen dasselbe DB-Modell mit Sequelize erstellt haben. Was ist der Ansatz, um diese Aufgabe mit NodeJS zu lösen?Freigeben von benutzerdefiniertem Code zwischen zwei NodeJS-Microservices

Ich denke über das Erstellen eines separaten Moduls meiner DB-Modelle und speichern Sie es in privaten Git und fügen Sie diese private Git zu meiner Web-App und Microservice als NPM Abhängigkeit.

Aber ich frage mich, ist es richtig Ansatz oder was ist der richtige Weg, um geteilte private Modul zwischen wenigen Microservices zu trennen, in meinem Fall ist es DB-Modelle? Soll ich mit DRY gehen oder nicht?

Vielen Dank im Voraus!

Antwort

1

Es gibt keine Regel über Microservices, dass Code nicht wiederverwendet werden sollte. In der Tat, dass DRY im Allgemeinen mit Microservices falsch ist, ist gefährlich. Eher sollten Sie die folgenden Fragen stellen: Will the shared code be a separate module with a dedicated purpose that rectifies a separately managed lifecycle and releases? Wenn ja, sollten Sie auf jeden Fall für die Wiederverwendung als separat freigegebenes Modul gehen - Ähnlich wie Sie eine Bibliothek von Drittanbietern wiederverwenden würden. Dies stellt sicher, dass Sie keine starke Kopplung zwischen dem geteilten Code und Ihren Microservices haben, da jedes Microservice-Team selbst entscheiden kann, ob es bei einer bestimmten Release-Version des Moduls bleiben oder auf eine neuere Version upgraden möchte. Was Sie vermeiden möchten, ist eine Abhängigkeit, die Sie zwingt, Ihre Microservices zu ändern, wenn sich die wiederverwendete Bibliothek ändert (vermeiden Sie den Ripple-Effekt).

Noch eine Sache - Weil Sie erwähnen, dass es DB-bezogene Schemas ist, müssen Sie eine andere Frage stellen: Will the schemas being reused in separate DBs or will they refer to the same physical DB in the end?. Wenn sie am Ende eine gemeinsam genutzte Datenbank verwenden, verbinden Sie effektiv die beiden Microservices und sollten daher wahrscheinlich als Teil desselben Services betrachtet werden, anstatt als separate Services.

Ich denke, das ist so viel wie ich sagen kann, ohne mehr über Ihre Dienste und Ziele zu wissen.

1

Sie sollten nicht mit DRY in Microservices gehen. Überlegen Sie sich einen der Vorteile, sie zu nutzen: Sie können einen Microservice jederzeit durch einen anderen Stack ersetzen (PHP + Apache) und das System ist nicht wichtig, solange es den Vertrag respektiert.

Sie können mehr lesen here, Seite 59, DRY and the Perils of Code Reuse in Microservices World.

Verwandte Themen