Microservices in der Docker-Implementierung


9

Wir schreiben unsere ersten Mikrodienste mit Docker-Containern über Amazon Fargate. Wir haben viele Zweifel an der Implementierungsebene mit Spring Boot

Wir werden mehrere Mikrodienste im Projekt haben. Ist es eine gute Praxis, alle Mikrodienste in einem einzigen Container zu schreiben, oder ich muss einen separaten Docker-Container für separate Mikrodienste erstellen. Auf kostengünstige Weise verwenden wir Einzelcontainer. Aber macht das in Zukunft Probleme für unsere Projektstruktur?

Wir planen, die Anwendung in AWS fargate bereitzustellen, und unsere Anwendung wird in Zukunft eine große Option zur Erweiterung haben und etwa 100 bis 150 verschiedene Mikrodienste erwarten. Ist es in diesem Fall kostengünstig, wenn wir alle diese Microservices auch in verschiedenen Containern hochladen?


Das hängt alles von Ihrer Struktur ab. Sie müssen viel mehr Details teilen, damit andere Ihnen helfen können
Nico Haase

6
Es ist fast immer sinnvoller, einen Dienst pro Container zu implementieren, da Sie so Dienste unabhängig skalieren und einzelne Dienste durch aktualisierte Versionen oder alternative Implementierungen ersetzen können.
Larsks

Sie haben einen Kompromiss zwischen der Gruppierung von Diensten und der individuellen Ausführung. Führen Sie einen Domänenschnitt Ihrer aktuellen Anwendung durch und gruppieren Sie Dienste pro Domäne, da diese möglicherweise denselben Datenspeicher verwenden. Auf diese Weise können Sie die gruppierten Dienste besser verwalten.
Srini M

Antworten:


21

Das Wichtigste bei Microservices ist, dass es nicht in erster Linie um die Lösung technischer Probleme geht, sondern um organisatorische Probleme. Wenn wir uns also ansehen, ob eine Organisation Microservices verwenden sollte und wie diese Services bereitgestellt werden, müssen wir prüfen, ob die Organisation die Probleme hat, die der Microservices-Stil löst.

Die Antwort auf Ihre Frage zu Ihrer Architektur hängt daher hauptsächlich von der Größe Ihres Technologieteams, der Organisationsstruktur, dem Alter Ihres Produkts, Ihren aktuellen Bereitstellungspraktiken und der Wahrscheinlichkeit ab, dass sich diese mittelfristig ändern.

Als Beispiel, wenn Ihre Organisation:

  • hat weniger als 25 technische Mitarbeiter,
  • organisiert in 1 oder 2 Teams,
  • jedes davon funktioniert auf einem beliebigen Teil des Produkts,
  • das ist weniger als 12 Monate alt,
  • und wird regelmäßig auf einmal bereitgestellt (z. B. täglich, wöchentlich, monatlich),
  • und die Organisation wird nicht schnell wachsen,

dann möchten Sie auf jeden Fall vorerst auf Microservices verzichten. In einer solchen Situation ist das Team noch neu im Erlernen der Domäne. Daher wissen sie wahrscheinlich nicht alles, was sie wissen müssen, um wirklich zu verstehen, wie das System in eine verteilte Architektur aufgeteilt werden kann. Das heißt, wenn sie es jetzt aufteilen, werden sie wahrscheinlich später die Grenzen ändern wollen, und das wird sehr teuer, wenn Sie bereits ein verteiltes System haben, während es in einem Monolithen viel einfacher ist. Da nur ein kleines Team an einem Teil des Systems arbeiten (und diesen unterstützen) kann, gibt es kaum einen Grund, in den Aufbau einer Plattform zu investieren, auf der einzelne Teams einzelne Services bereitstellen und warten können. Eine Organisation in dieser Phase wird sich in der Regel viel mehr darum kümmern, Kunden zu finden und das Produkt schnell zu iterieren, vielleicht sogar das Produkt zu drehen, als Teams autonom zu machen und eine hochskalierende, belastbare Architektur aufzubauen. Eine monolithische Architektur macht an dieser Stelle Sinn, aber aGut gestalteter Monolith mit klaren Komponentengrenzen, die durch APIs erzwungen werden, und gekapseltem Datenzugriff, sodass Dienste später problemlos in separate Prozesse gezogen werden können.

Lassen Sie uns etwas weiter schauen und eine Organisation betrachten, die ...

  • über 50 technische Mitarbeiter,
  • organisiert in 7 Teams,
  • jedes davon funktioniert nur in bestimmten Bereichen des Produkts,
  • das ist 3 Jahre alt,
  • und hat Teams, die ihre Arbeit unabhängig von den Aktivitäten anderer Teams einsetzen möchten.

Eine solche Organisation sollte auf jeden Fall eine verteilte Architektur aufbauen. Wenn dies nicht der Fall ist und alle diese Teams stattdessen in einem Monolithen arbeiten, treten alle Arten von organisatorischen Problemen auf. Die Teams müssen ihre Arbeit koordinieren. Die Veröffentlichung wird verzögert, während das eine Team die Qualitätssicherung für das neue Feature, den Patch, abschließt Bereitstellungen sind ein großer Ärger für Mitarbeiter und Kunden. Darüber hinaus sollte die Organisation bei einem ausgereiften Produkt genug über die Domäne wissen, um sowohl die Domäne als auch die Teams (in dieser Reihenfolge; siehe Conway-Gesetz) sinnvoll in sinnvolle, autonome Einheiten aufteilen zu können, die Fortschritte erzielen und gleichzeitig die Koordination minimieren können.

Sie scheinen sich bereits für Microservices entschieden zu haben. Je nachdem, wo Sie oben auf der Waage sitzen, möchten Sie diese Entscheidung vielleicht noch einmal überdenken.

Wenn Sie mit Microservices weiterentwickeln möchten, diese jedoch alle in einem Container bereitstellen möchten, sollten Sie wissen, dass daran nichts auszusetzen istwenn es der Art und Weise entspricht, wie Ihre Organisation im Moment arbeitet. Wird es in Zukunft Probleme für Ihre Projektstruktur geben? Wenn Sie erfolgreich sind und Ihr Unternehmen wächst, wird es wahrscheinlich eine Zeit geben, in der diese Einzelcontainer-Bereitstellung nicht mehr am besten passt, insbesondere wenn Teams anfangen, Dienste zu besitzen und nur ihren Dienst bereitstellen möchten, ohne die gesamte Anwendung bereitzustellen . Diese Autonomie kostet jedoch zusätzliche Arbeit und Komplexität und bietet Ihnen zu diesem Zeitpunkt möglicherweise keinen Nutzen. Nur weil es in Zukunft nicht der richtige Ansatz für Ihr System sein wird, heißt das nicht, dass es für heute nicht der richtige Ansatz ist. Der Trick besteht darin, ein Auge darauf zu haben und zu wissen, wann die zusätzliche Investition getätigt werden muss.


1
Dies ist eine großartige Erklärung, und wir können anhand der Projekt- und Teamstruktur feststellen, wo wir die Docker und Mikrodienste verwenden müssen. Vielen Dank.
Anoop

2

Kein Problem, wenn Sie einen einzelnen Container für Ihre Microservices verwenden. Das Hauptziel von Microservices besteht jedoch darin, jeden Service separat zu verwalten. Jeder Service sollte lose gekoppelt sein und jeder Service sollte über eine separate Datenbank verfügen (wenn Sie eine Datenbank pro Service-Architektur erreichen möchten). Versuchen Sie also, dies zu erreichen. Führen Sie Ihre Dienste in einem separaten Container aus und orchestrieren Sie diese Dienste mit Docker-Schwarm oder Kubernetes. Ich weiß, dass Kosten wichtig sind, aber wenn Sie es richtig machen, werden Sie die Leistungsfähigkeit der Microservices-Architektur erkennen.


Ist es aus Kostengründen vorteilhaft, wenn wir unterschiedliche Docker-Container für unterschiedliche Mikrodienste verwenden? Da wir ungefähr 100 bis 150
Mikrodienste

Nein, dies ist aus Kostengründen nicht vorteilhaft, aber es ist technisch vorteilhaft, jeden Dienst in einem separaten Dienst auszuführen.
Slim Coder
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.