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?
Antworten:
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:
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 ...
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.
quelle
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.
quelle