Wenn Sie von einer monolithischen Legacy-Anwendung ausgehen, müssen Sie Komponenten finden, die sich isolieren und in separate Mikrodienste verschieben lassen. Eine gut strukturierte monolithische Anwendung zeichnet sich in der Regel bereits durch eine gewisse Unterteilung aus. Außerdem sollte sie eine Dienstklasse haben, die als Schnittstelle für eine Datenspeicherebene und als Geschäftslogik fungiert. Diese Klassen sind ideal geeignet, um Clientaufrufe mit dem Mikrodienst zu verbinden.
Funktionalität in einer monolithischen Anwendung trennen
Es gibt verschiedene Methoden, um Ihre Anwendung zu unterteilen:
- Sie suchen in der Anwendung nach einer Geschäftslogik, die ausgegliedert werden kann.
- Sie suchen nach Code, der schon isoliert ist, z. B. mithilfe statischer Codeanalysetools, um die einzelnen Abschnitte zu identifizieren.
- Sie durchsuchen die Anwendung nach Logik, die anders als der Rest der Anwendung von anderen Skalierungseinstellungen oder Speicheranforderungen profitieren könnte. Das könnte zu Kosteneinsparungen und einer besseren Ressourcennutzung führen.
Möglicherweise müssen Sie den Code refaktorieren, um künstliche Abhängigkeiten zu entfernen. Wir empfehlen, eine Refaktorierung innerhalb des Legacy-Codes durchzuführen und diesen in der Produktion zu implementieren, bevor Sie versuchen, die Anwendung in separate Dienste zu unterteilen.
Typische Anwendungsbereiche für Mikrodienste:
- Nutzer- oder Kontoinformationen
- Autorisierung und Sitzungsverwaltung
- Einstellungen oder Konfigurationseinstellungen
- Benachrichtigungs- und Kommunikationsdienste
- Fotos und Medien, insbesondere Metadaten
- Aufgabenwarteschlangen-Worker
Schritte zum Migrieren einer Anwendung
Nachdem Sie einige Klassen ermittelt haben, die sich als Mikrodienst eignen würden, sind folgende Schritte erforderlich:
- Den bestehenden Code funktionsfähig an Ort und Stelle in der alten Anwendung belassen, um ein späteres Rollback zu ermöglichen.
- Ein neues Code-Repository oder zumindest ein Unterverzeichnis im bestehenden Repository erstellen.
- Die Klassen an den neuen Speicherort kopieren.
- Eine Ansichtsebene programmieren, die HTTP API-Hooks bereitstellt und die Antwortdokumente ordnungsgemäß formatiert.
- Den neuen Code für die separate Anwendung schreiben (
app.yaml
-Datei erstellen). - Den neuen Mikrodienst als Dienst oder eigenes Projekt bereitstellen
- Den Code auf korrekte Funktion testen
- Die Daten aus der Legacy-Anwendung zum neuen Mikrodienst migrieren. Weitere Informationen finden Sie weiter unten.
- Die Legacy-Anwendung so abändern, dass der neue Mikrodienst verwendet wird.
- Die geänderte Legacy-Anwendung bereitstellen.
- Die korrekte Funktionsweise der Anwendung überprüfen, um ein späteres Rollback auf die Legacy-Anwendung auszuschließen.
- Nicht mehr benötigten Code aus der Legacy-Anwendung entfernen.
Daten in eine Live-Anwendung migrieren
Daten in eine Live-Anwendung zu migrieren, kann schwierig sein und hängt stark von der Situation ab. Um Rollforward- und Rollback-Prozesse zu vereinfachen, benötigen Sie meistens Code, der sowohl die alten als auch die neuen Cloud Datastore-Entitäten ausfüllt. Dazu müssen Sie möglicherweise eine temporäre API für den Mikrodienst verwenden und anschließend Code schreiben, der die vorhandenen Daten migriert, zum Beispiel als MapReduce. Dieser Prozess beinhaltet in der Regel eine gewisse Menge an temporärem Code und redundanten Daten. Je nach Situation müssen Sie nach der Veröffentlichung auch die Datenmigration noch einmal wiederholen. Achten Sie dabei darauf, neuere Daten nicht mit älteren zu überschreiben.
Das Prozedere ist zwar aufwendig, aber erforderlich, um ein reibungsloses Rollforward bzw. Rollback zu ermöglichen, falls der neue Mikrodienst nicht wie erwartet funktionieren sollte. Wenn Sie überprüft haben, dass die Migration ordnungsgemäß verlaufen ist und der Mikrodienst wie erwartet funktioniert, können Sie den temporären Code entfernen und die Daten am alten Speicherort löschen. Legen Sie während der Migration unbedingt Sicherungen an.
Weitere Informationen
- Überblick über die Microservice-Architektur in App Engine
- Mit Mikrodiensten in App Engine Entwicklungs-, Test-, QA-, Staging- und Produktionsumgebungen erstellen und benennen
- Best Practices für die Erstellung von APIs zur Kommunikation zwischen Mikrodiensten
- Best Practices für leistungsfähige Mikrodienste