Ich habe ein Problem. Nutzen wir Microservices! Jetzt habe ich 13 Probleme verteilt.
Die Aufteilung Ihres Systems in gekapselte, zusammenhängende und entkoppelte Komponenten ist eine gute Idee. Sie können damit verschiedene Probleme separat angehen. In einer monolithischen Bereitstellung ist dies jedoch problemlos möglich (siehe Fowler: Microservice Premium ). Immerhin ist es das, was OOP seit vielen Jahrzehnten lehrt! Wenn Sie Ihre Komponenten in Microservices verwandeln, erhalten Sie keinen architektonischen Vorteil. Sie gewinnen Flexibilität in Bezug auf die Auswahl der Technologie und möglicherweise (aber nicht unbedingt!) Etwas Skalierbarkeit. Aber Sie haben garantiert Kopfschmerzen, die auf (a) die verteilte Natur des Systems und (b) die Kommunikation zwischen Komponenten zurückzuführen sind. Wenn Sie sich für Microservices entscheiden, haben Sie andere Probleme, die so dringlich sind, dass Sie trotz dieser Probleme bereit sind, Microservices zu verwenden.
Wenn Sie keinen Monolithen entwerfen können, der sauber in Komponenten unterteilt ist, können Sie auch kein Microservice-System entwerfen. In einer monolithischen Codebasis wird der Schmerz ziemlich offensichtlich sein. Im Idealfall wird der Code einfach nicht kompiliert, wenn er fürchterlich kaputt ist. Aber mit Microservices kann jeder Dienst separat entwickelt werden, möglicherweise sogar in verschiedenen Sprachen. Probleme im Zusammenspiel von Komponenten werden erst sichtbar, wenn Sie Ihre Komponenten integrieren. Zu diesem Zeitpunkt ist es bereits zu spät, die Gesamtarchitektur zu reparieren.
Die Nr. 1-Fehlerquelle ist das Nichtübereinstimmen der Benutzeroberfläche. Es kann eklatante Fehler wie einen fehlenden Parameter oder subtilere Beispiele geben, z. B. das Vergessen, einen Fehlercode zu überprüfen, oder das Vergessen, eine Vorbedingung zu überprüfen, bevor eine Methode aufgerufen wird. Die statische Eingabe erkennt solche Probleme so früh wie möglich: in Ihrer IDE und im Compiler, bevor der Code jemals ausgeführt wird. Dynamische Systeme haben diesen Luxus nicht. Es wird nicht explodieren, bis dieser fehlerhafte Code ausgeführt wird.
Die Auswirkungen auf Microservices sind erschreckend. Microservices sind von Natur aus dynamisch. Solange Sie nicht zu einer offiziellen Servicebeschreibungssprache wechseln, können Sie die Richtigkeit Ihrer Schnittstellennutzung nicht überprüfen. du musst testen, testen, testen! Tests sind jedoch teuer und in der Regel nicht erschöpfend, sodass die Möglichkeit besteht, dass in der Produktion noch Probleme auftreten. Wann wird sich dieses Problem bemerkbar machen? Nur wenn dieser fehlerhafte Pfad zur Laufzeit in der Produktion genommen wird. Die Vorstellung, dass Produktprobleme zu einer schnelleren Rückmeldung führen würden, istkomisch gefährlich falsch, es sei denn, Sie amüsieren sich über die Möglichkeit eines Datenverlusts.