Das gesamte System lief in virtuellen Instanzen auf einem nicht gesicherten Hostsystem. Das System stand in einem Rechenzentrum, das neben seiner suboptimalen Lage neben eine Großschweißerei auch öfters schon Probleme mit der Netzanbindung hatte.
Nach einigen Überlegungen (Kosten, Zeit, Skalierbarkeit, Verfügbarkeit) haben wir uns dann entschieden das gesamte System nicht wieder eins-zu-eins in einem anderen Rechenzentrum hochzuziehen, sondern in die Microsoft Azure Cloud zu migrieren.
Dabei galt es verschiedene Services aus dem folgenden System verlustfrei und mit möglichst geringer Downtime zunächst cloud-ready zu refaktorisieren und anschließend umzuziehen:
Das Shopsystem selber hat neben seiner Anbindung an die Produktionshallen
Vor und während der Migration gab es etliche Herausforderungen. Die wohl größte war, dass das bestehende System über mehrere Jahre gewachsen, von einem komplett anderen Team (bereits nicht mehr in der Firma) und gleichzeitig keine strukturelle Dokumentation zu finden war.
Daher wusste niemand, in welcher Weise Mitarbeiter der Produktion oder automatisierte Prozesse auf verschiedenste Schnittstellen, Dateien (es gab ein überall eingebundenes Netzlaufwerk) und Dienste zugriffen. Wir haben dies „U-Boote“ bzw „U-Boot-Dienste“ genannt.
Des weiteren gab es Legacy-Dienste, die eigentlich nicht mehr in Benutzung sein sollten, aber von manchen U-Boot-Diensten weiterhin benutzt wurden.
Während man solche Dinge durch genaues Analysieren und im Notfall durch sukzessives Aus- und Anschalten herausfinden kann, war ein viel größeres Problem die absolut unwartbare und nicht dokumentierte Code-Basis.
Ein Beispiel: Es gab keinerlei Datenzugriffsebenen, jedes Modul arbeitete direkt auf der Datenbank, was oft zu Cache-Invalidierungs-Problemen führte. Zudem gab es keinerlei Tests, sodass wir nie wussten, ob wir mit einer Änderung nicht an einer anderen Stelle etwas kaputt machten. Dies hätte man durch ein aufwendiges Refactoring lösen können, wenn wir nicht zu der nächsten Herausforderung gekommen wären:
Der Kunde wollte dies nicht. Es sollte möglichst schnell der „as-is“-Stand in die Cloud gebracht werden bei gleichzeitiger Neu-Entwicklung verschiedener Features. Teilweise wurden diese sogar vom Kunden als „Blocker“ priorisiert, sodass die Arbeit an der Cloud-Migration zum Erliegen kam.
Dies führte dann aber auch zu einem enormen Zeitdruck, als der Kunde uns nach einer Aufwandsschätzung (wohl gemerkt: geschätzt ohne Feature-Neuentwicklung) mitteilte, dass der Vertrag mit dem bestehenden Hoster bereits zum Ende des Jahres gekündigt war.
Keine Optimale Ausgangslage.
Da das gesamte System unüberschaubar groß und nicht wirklich einzuschätzen war, haben wir uns dafür entschieden kein „Big-Bang-Deployment“ durchzuführen, bei dem alle Systeme gleichzeitig umgeschaltet werden, sondern schrittweise mit ausführlicher Verprobung einzelner Prozesse zu migrieren.
Gleichzeitig konnten wir dadurch an verschiedene Stellen nach dem Pfadpfinderprinzip arbeiten und zumindest die nötigsten Code-Umstrukturierungen und Verbesserungen durchführen.
Insbesondere der frühe Umzug der Datenbank hatte den Vorteil, dass wir mittels Azure Boardmitteln anschließend verschiedene Dienste ausgiebig vorher testen und so auch ohne eine weitere Downtime das ganze System in die Cloud überführen konnten. Zudem lassen sich dadurch die Systeme auch parallel betreiben, da die Daten in der gleichen Datenbank landen. Letztendlich ermöglichte diese Entscheidung auch das fehlerfreie Ausschalten der Alt-Systeme zwei Tage vor Weihnachten unter Volllast.
Zusammengefasst haben wir also die folgenden Schritte im Laufe von ca 6 Monaten durchgeführt:
Im Folgenden dann noch eine kurze Liste unserer „Lessons Learned“:
Nach dem erfolgreichen Umzug aller Systeme freut sich das gesamte Team nun darauf, die volle Funktionalität der Cloud auszunutzen. Insbesondere stehen die folgenden Punkte an, für die es dann noch entsprechende weitere Erfahrungsberichte geben wird.
Abschließend lässt sich sagen: Da wir insbesondere mit Testumgebungen und Skalierbarkeit bzw. Versionierbarkeit von ganzen Umgebungen in der Azure Cloud so gute Erfahrungen gemacht haben, können wir jedem Online-System die Migration in die „Wolke“ wärmstens ans Herz legen.
zu Software und Agilität