Zum Inhalt

Block 04 – Softwaremigration

Lernziele

  • Du kannst die wichtigsten Migrationsansätze erklären und vergleichen
  • Du kannst den Unterschied zwischen Monolith und Microservices beschreiben
  • Du kannst erklären was Caching ist und welche Probleme es löst
  • Du kannst beschreiben warum Migrationen scheitern und wie man das verhindert

1. Was ist eine Softwaremigration?

Eine Softwaremigration ist der Prozess, ein bestehendes System in einen neuen Zustand zu überführen. Das kann bedeuten:

  • Ein System auf neue Hardware oder in die Cloud verschieben
  • Eine Applikation auf eine neuere Version aktualisieren
  • Daten von einem System in ein anderes übertragen
  • Eine Architektur grundlegend umbauen

Wichtig: Eine Migration ist kein Neustart – das bestehende System läuft weiter, bis die Migration abgeschlossen ist. Das ist der Hauptunterschied zu einer Neuinstallation.


2. Migrationsansätze

Es gibt verschiedene Strategien wie man eine Migration angeht. Die Wahl hängt ab von: Risikotoleranz, verfügbarer Downtime, Teamgrösse und Komplexität des Systems.

Big Bang Migration

Das gesamte System wird auf einmal migriert. An einem definierten Zeitpunkt (Cutover) wird das alte System abgeschaltet und das neue aktiviert.

gantt
    dateFormat  YYYY-MM-DD
    section Big Bang
    Altes System läuft      :a1, 2024-01-01, 2024-03-01
    Vorbereitung & Test     :a2, 2024-02-01, 2024-03-01
    Cutover (Downtime)      :crit, a3, 2024-03-01, 2024-03-02
    Neues System läuft      :a4, 2024-03-02, 2024-04-01

Vorteile: - Einfach zu planen – klarer Schnitt - Kein paralleler Betrieb nötig - Schnell abgeschlossen

Nachteile: - Hohes Risiko – wenn etwas schiefläuft, ist alles ausgefallen - Downtime oft unvermeidbar - Schwierig rückgängig zu machen

Geeignet für: Kleine Systeme, unkritische Applikationen, kurze Migrationen


Phased Migration (Stufenmigration)

Das System wird schrittweise migriert – Komponente für Komponente, Modul für Modul.

gantt
    dateFormat  YYYY-MM-DD
    section Phased
    Modul A migrieren   :a1, 2024-01-01, 2024-02-01
    Modul B migrieren   :a2, 2024-02-01, 2024-03-01
    Modul C migrieren   :a3, 2024-03-01, 2024-04-01
    Abschluss           :a4, 2024-04-01, 2024-04-15

Vorteile: - Geringeres Risiko – Fehler betreffen nur einen Teil - Kein kompletter Ausfall - Lerneffekt: Jede Phase verbessert die nächste

Nachteile: - Alter und neuer Stand müssen parallel betrieben werden - Komplexere Planung - Dauert länger

Geeignet für: Grosse, komplexe Systeme, kritische Produktionsumgebungen


Parallel Operation

Altes und neues System laufen gleichzeitig. Daten werden in beide Systeme geschrieben, bis das neue System bewiesen hat, dass es funktioniert.

Vorteile: - Maximale Sicherheit – Rückfall auf altes System jederzeit möglich - Echte Vergleichsdaten zwischen alt und neu

Nachteile: - Doppelter Aufwand (zwei Systeme betreiben) - Teuer - Datenkonsistenz zwischen zwei Systemen ist komplex

Geeignet für: Hochkritische Systeme (Banking, Medizin)


Vergleich

Big Bang Phased Parallel
Risiko ❌ Hoch ✅ Gering ✅ Minimal
Downtime ❌ Ja ⚠️ Teilweise ✅ Nein
Aufwand ✅ Gering ⚠️ Mittel ❌ Hoch
Rückfallmöglichkeit ❌ Schwierig ⚠️ Möglich ✅ Jederzeit

3. Warum scheitern Migrationen?

Migrationen scheitern häufiger als man denkt. Die häufigsten Ursachen:

Ursache Beschreibung
Unvollständige Datenmigration Nicht alle Daten wurden übertragen oder sind korrumpiert
Fehlende Tests Das neue System wurde nicht ausreichend getestet
Unterschätzte Abhängigkeiten System A hängt von System B ab – das wurde vergessen
Kein Rollback-Plan Bei Problemen gibt es keinen definierten Weg zurück
Mangelnde Kommunikation Benutzer wurden nicht informiert, IT-Teams nicht koordiniert
Unterschätzte Downtime Die Migration dauert länger als geplant

Im Modul 158: Du erstellst einen Projektplan mit einem definierten Cutover-Zeitpunkt und einem Rollback-Punkt. Das ist kein bürokratischer Overhead – es ist die Lektion aus unzähligen gescheiterten Migrationen.


4. Monolith vs. Microservices

Die Architektur einer Applikation beeinflusst massgeblich wie und ob sie migriert werden kann.

Monolith

Eine monolithische Applikation ist als einzelne Einheit gebaut. Alle Komponenten (Benutzeroberfläche, Geschäftslogik, Datenbankzugriff) sind eng miteinander verbunden und laufen als ein Prozess.

flowchart TD
    subgraph Monolith
        UI[UI] --> BL[Geschäftslogik]
        BL --> DB[Datenbankzugriff]
        BL --> AUTH[Authentifizierung]
        BL --> MAIL[E-Mail]
    end

Vorteile: - Einfacher zu entwickeln und debuggen - Einfaches Deployment (eine Applikation deployen) - Geringere Latenz (keine Netzwerkkommunikation zwischen Komponenten)

Nachteile: - Schwer zu skalieren – du musst immer das gesamte System skalieren - Ein Fehler kann das gesamte System zum Absturz bringen - Mit der Zeit wird der Code komplex und schwer wartbar ("Big Ball of Mud")

WordPress ist ein Monolith. Webserver, PHP, Datenbank und alle Plugins laufen eng gekoppelt zusammen.


Microservices

Eine Microservice-Architektur teilt die Applikation in viele kleine, unabhängige Dienste auf. Jeder Dienst hat eine einzige Aufgabe und kommuniziert mit anderen über APIs.

flowchart TD
    GW[API Gateway] --> US[User Service]
    GW --> PS[Post Service]
    GW --> MS[Mail Service]
    GW --> AS[Auth Service]
    US --> DB1[(User DB)]
    PS --> DB2[(Post DB)]

Vorteile: - Einzelne Dienste können unabhängig skaliert werden - Fällt ein Dienst aus, läuft der Rest weiter - Teams können unabhängig an verschiedenen Diensten arbeiten - Jeder Dienst kann in der besten Sprache/Technologie für seine Aufgabe gebaut sein

Nachteile: - Deutlich komplexer zu betreiben (viele Dienste, viele Deployments) - Netzwerkkommunikation zwischen Diensten erzeugt Latenz - Debugging ist schwieriger (Fehler über mehrere Dienste verteilt)

Vergleich

Monolith Microservices
Komplexität ✅ Gering ❌ Hoch
Skalierbarkeit ⚠️ Nur komplett ✅ Gezielt
Ausfallsicherheit ❌ Single Point of Failure ✅ Teilausfälle möglich
Deployment ✅ Einfach ❌ Komplex
Geeignet für Kleine bis mittlere Systeme Grosse, verteilte Systeme

5. Caching

Caching bedeutet, Daten oder Berechnungsergebnisse zwischenzuspeichern, damit sie beim nächsten Zugriff schneller zur Verfügung stehen.

Das Problem ohne Cache

Jede Anfrage an eine WordPress-Seite löst aus: 1. PHP verarbeitet die Anfrage 2. Datenbankabfragen werden ausgeführt 3. HTML wird generiert 4. Antwort wird gesendet

Bei 1000 gleichzeitigen Besuchern: 1000 × dieselben Datenbankabfragen.

Mit Cache

flowchart LR
    C[Client] --> CA{Cache\nvorhanden?}
    CA -->|Ja| R1[Gecachte Antwort\nsofort]
    CA -->|Nein| PHP[PHP + DB]
    PHP --> CA
    PHP --> R2[Antwort generieren\n+ Cache speichern]

Caching-Ebenen

Ebene Beschreibung Tool
Browser Cache Browser speichert CSS, Bilder lokal HTTP-Header
Server Cache Fertige HTML-Seiten werden gespeichert WordPress-Plugins (WP Super Cache)
Objekt Cache Datenbankabfragen werden im RAM gespeichert Redis, Memcached
CDN Cache Statische Dateien weltweit verteilt Cloudflare, AWS CloudFront

Cache Invalidierung

Das schwierigste Problem beim Caching: Wann ist ein Cache veraltet?

Wenn du einen Blogpost aktualisierst, muss der alte gecachte HTML-Code gelöscht werden – sonst sehen Besucher noch den alten Inhalt. Dieser Prozess heisst Cache Invalidierung.

"There are only two hard things in Computer Science: cache invalidation and naming things." – Phil Karlton


Testfragen

  1. Erkläre den Unterschied zwischen Big Bang und Phased Migration. Wann würdest du welchen Ansatz wählen?
  2. Nenne drei häufige Gründe warum Migrationen scheitern.
  3. Was ist ein Rollback-Plan und warum ist er bei jeder Migration wichtig?
  4. Was ist der Hauptunterschied zwischen einem Monolithen und Microservices?
  5. WordPress ist ein Monolith. Nenne einen Vor- und einen Nachteil dieser Architektur im Kontext der Migration.
  6. Was ist Caching und welches Problem löst es bei WordPress?
  7. Was bedeutet Cache Invalidierung und warum ist sie schwierig?
  8. Du hast eine WordPress-Seite mit 10'000 täglichen Besuchern. Welche Caching-Ebenen würdest du einsetzen?