Es scheint, dass der Höhepunkt des Hype für Microservices dahinter liegt. Wir lesen die Beiträge „Wie ich meinen Monolithen auf 150 Dienste übertragen habe“ mehrmals pro Woche nicht mehr. Jetzt höre ich oft vernünftige Gedanken: "Ich hasse den Monolithen nicht, ich kümmere mich nur um Effizienz." Wir haben sogar mehrere Migrationen
von Mikrodiensten zurück zum Monolithen beobachtet . Wenn Sie von einer großen Anwendung zu mehreren kleineren Diensten wechseln, müssen Sie mehrere neue Probleme lösen. Wir listen sie so kurz wie möglich auf.
Installation: von der Grundchemie bis zur Quantenmechanik
Das Einrichten der Basisdatenbank und der Anwendung mit dem Hintergrundprozess war ein ziemlich klarer Prozess. Ich veröffentliche eine Readme-Datei auf Github - und oft funktioniert nach einer Stunde, höchstens ein paar Stunden, alles und ich starte ein neues Projekt. Das Hinzufügen und Ausführen von Code, zumindest für die ursprüngliche Umgebung, erfolgt am ersten Tag. Aber wenn wir uns in Microservices wagen, startet die erste Startzeit in den Himmel. Ja, jetzt haben wir einen orchestrierten Docker und einen Cluster von K8-Maschinen, aber für einen unerfahrenen Programmierer ist dies alles um eine Größenordnung komplizierter. Für viele Junioren ist dies eine Belastung, die wirklich unnötig komplex ist.
Das System ist nicht leicht zu verstehen.
Lassen Sie uns einen Moment bei unserem Junior innehalten. Bei monolithischen Anwendungen war es im Fehlerfall einfach, diesen zu verfolgen und sofort mit dem Debuggen fortzufahren. Jetzt haben wir einen Dienst, der mit einem anderen Dienst kommuniziert, der etwas auf dem Nachrichtenbus in die Warteschlange stellt, das einen anderen Dienst verarbeitet - und dann tritt ein Fehler auf. Wir müssen alle diese Teile zusammenfügen, um schließlich herauszufinden, dass Dienst A in Version 11 ausgeführt wird und Dienst E bereits auf Version 12 wartet. Dies unterscheidet sich stark von meinem konsolidierten Standardjournal: Sie müssen ein interaktives Terminal / Debugger verwenden, um den Prozess zu durchlaufen Schritt für Schritt. Das Debuggen und Verstehen ist im Wesentlichen schwieriger geworden.
Wenn Sie nicht debuggen können, werden wir sie möglicherweise testen
Kontinuierliche Integration und kontinuierliche Entwicklung sind mittlerweile an der Tagesordnung. Die meisten neuen Anwendungen, die ich mit jeder neuen Version sehe, erstellen und führen automatisch Tests aus und erfordern, dass die Tests bestanden und vor der Registrierung überprüft werden. Dies sind hervorragende Prozesse, die nicht aufgegeben werden können und für viele Unternehmen zu einer großen Veränderung geworden sind. Aber jetzt, um den Dienst wirklich zu testen, muss ich die voll funktionsfähige Version meiner Anwendung erhöhen. Erinnern Sie sich an diesen neuen Ingenieur mit einem K8-Cluster von 150 Diensten? Nun werden wir unserem CI-System beibringen, wie alle diese Systeme angehoben werden, um zu überprüfen, ob alles wirklich funktioniert. Dies ist wahrscheinlich zu aufwändig, daher werden wir jedes Teil einzeln testen: Ich bin sicher, dass unsere Spezifikationen gut genug sind, die APIs sauber sind und der Ausfall des Dienstes isoliert ist und andere nicht beeinträchtigt.
Alle Kompromisse haben einen guten Grund. Richtig?
Es gibt viele Gründe für ein Upgrade auf Microservices. Ich habe gesehen, dass sie dies tun, um die Flexibilität zu erhöhen, Befehle zu skalieren, die Leistung zu verbessern und eine bessere Stabilität zu gewährleisten. In Wirklichkeit haben wir Jahrzehnte in die Werkzeuge und die Praxis der Entwicklung von Monolithen investiert, die sich weiterentwickeln. Ich arbeite mit Fachleuten in verschiedenen Technologien. Wir sprechen normalerweise über Skalierung, weil sie mit den Grenzen eines einzelnen Postgres-Datenbankknotens konfrontiert sind. Der größte Teil der Diskussion befasst sich mit der
Skalierung der Datenbank .
Aber ich bin immer daran interessiert, etwas über ihre Architektur zu erfahren. In welchem Stadium des Übergangs zu Microservices befinden sie sich? Es ist interessant zu sehen, wie immer mehr Ingenieure sagen, dass sie mit ihrer monolithischen Anwendung zufrieden sind. Viele Microservices werden davon profitieren, und die Vorteile werden die Schlaglöcher auf dem Migrationspfad überwiegen. Aber persönlich, geben Sie mir bitte meine monolithische Anwendung, einen Platz am Strand - und ich bin vollkommen glücklich.