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.