Aufgabe 22 - Migration in zwei Phasen ohne Ausfall
Aufgabe 22 - Migration in zwei Phasen ohne Ausfall
Abschnitt betitelt „Aufgabe 22 - Migration in zwei Phasen ohne Ausfall“Worum geht es?
Abschnitt betitelt „Worum geht es?“Sie benennen eine Spalte in Ihrer laufenden Datenbank um, ohne dass die Anwendung dabei ausfällt und ohne dass ein Rollback unmöglich wird (siehe Kapitel Datenbank produktionsnah). Das sind vier Deployments für eine Umbenennung, und beim ersten Mal wirkt das übertrieben. Es ist das Verfahren, mit dem große Systeme ohne Wartungsfenster auskommen.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel Datenbank produktionsnah, Abschnitt Migrationen.
- Kapitel Auslieferung mit Containern, Abschnitt Rollback.
- Ihr Projekt aus Aufgabe 21 mit gefülltem Seed und der Vorschauumgebung aus Aufgabe 11.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie erstellen Migrationen, wenden sie im Deployment an und schneiden sie abwärtskompatibel.
- Sie führen eine Umbenennung als Zwei-Phasen-Änderung ohne Ausfall durch.
- Sie beurteilen, welche Schemaänderung ein Rollback überlebt und welche nicht.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: eine additive Migration erstellen und anwenden (Teil A).
- Reorganisation und Transfer: den Bruch bei einer Umbenennung nachstellen (Teil B).
- Reflexion, Problemlösung und Urteilsbildung: die Umbenennung in vier Schritten durchführen und begründen (Teil C).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt.
Teil A - Die einfache Migration
Abschnitt betitelt „Teil A - Die einfache Migration“-
Erstellen Sie eine Migration, die eine neue Spalte mit Vorgabewert anlegt. Notieren Sie den Befehl und den Namen der entstandenen Datei.
-
Öffnen Sie die erzeugte Migrationsdatei und lesen Sie das SQL darin. Notieren Sie die Anweisung.
-
Wenden Sie die Migration in der Vorschauumgebung an. Notieren Sie den Befehl, der dort verwendet wird, und erklären Sie in zwei Sätzen, warum es ein anderer ist als der aus Punkt 1.
-
Prüfen Sie in
psqlmit\dauf Ihrer Tabelle, dass die Spalte da ist. -
Starten Sie die vorige Anwendungsversion gegen das neue Schema, indem Sie ein Rollback durchführen. Beschreiben Sie in zwei bis drei Sätzen, warum sie weiterläuft.
-
Ordnen Sie fünf Änderungen danach ein, ob sie ein Rollback überleben, und begründen Sie jede in einem halben Satz: neue Tabelle, neue Spalte mit Vorgabewert, neue Spalte mit
NOT NULLohne Vorgabewert, neuer Index, entfernte Spalte.
Teil B - Den Bruch nachstellen
Abschnitt betitelt „Teil B - Den Bruch nachstellen“-
Benennen Sie eine Spalte in einem Zug um, also mit einer einzigen Migration, und liefern Sie die passende Anwendungsversion aus.
-
Führen Sie danach ein Rollback auf die vorige Anwendungsversion durch und rufen Sie die Anwendung auf. Notieren Sie die Fehlermeldung und den Statuscode, den ein Benutzer sieht.
-
Beschreiben Sie in vier bis fünf Sätzen, was hier schiefgegangen ist. Beantworten Sie dabei, was das Rollback zurückgeholt hat und was nicht.
-
Beschreiben Sie in zwei bis drei Sätzen den zweiten Moment, in dem dieselbe Migration Schaden anrichtet, nämlich die Sekunden während des Deployments, in denen alte und neue Version gleichzeitig laufen.
-
Stellen Sie den funktionierenden Zustand wieder her.
Teil C - Die Umbenennung in vier Schritten
Abschnitt betitelt „Teil C - Die Umbenennung in vier Schritten“Führen Sie jetzt dieselbe Umbenennung nach dem Verfahren aus dem Kapitel durch. Nach jedem der vier Schritte prüfen Sie zwei Dinge: Läuft die Anwendung? Und funktioniert ein Rollback auf die vorige Version?
-
Hinzufügen. Eine Migration legt die neue Spalte an, die alte bleibt. Die neue Anwendungsversion schreibt in beide Spalten und liest aus der neuen, falls gefüllt, sonst aus der alten. Liefern Sie aus und führen Sie beide Prüfungen durch.
-
Befüllen. Eine Migration kopiert die vorhandenen Werte in die neue Spalte. Prüfen Sie mit einer Abfrage, dass keine Zeile leer geblieben ist, und notieren Sie die Abfrage. Führen Sie beide Prüfungen durch.
-
Umstellen. Die nächste Version liest und schreibt nur noch die neue Spalte. Liefern Sie aus und führen Sie beide Prüfungen durch.
-
Entfernen. Erstellen Sie zuerst eine Sicherung. Erst dann entfernt eine Migration die alte Spalte. Führen Sie beide Prüfungen ein letztes Mal durch und notieren Sie, ab wann ein Rollback auf Schritt 2 nicht mehr in Frage kommt.
-
Legen Sie eine Tabelle mit vier Zeilen an, eine je Schritt, mit den Spalten Schritt, Migration, Anwendungsversion, Rollback möglich auf. Füllen Sie sie aus.
-
Beurteilen Sie in vier bis fünf Sätzen den Aufwand. Vergleichen Sie vier Deployments mit der Alternative, nämlich einem Wartungsfenster, in dem die Anwendung abgeschaltet wird. Nennen Sie eine Situation aus Ihrem eigenen Projekt, in der Sie den Aufwand treiben würden, und eine, in der Sie ihn sich sparen.
-
Halten Sie zwei Regeln für Ihr Projekt schriftlich fest: was niemals von Hand auf der Produktionsdatenbank geschieht, und was vor jeder entfernenden Migration passiert. Legen Sie beide in
docs/entscheidungen.mdab.
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Was ist eine Migration, und warum liegt sie im Repository?
- Worin unterscheiden sich die Befehle für die Entwicklung und für die Produktion?
- Warum sind additive Änderungen unproblematisch und entfernende nicht?
- Welche vier Schritte hat die Zwei-Phasen-Änderung, und was passiert in jedem?
- Warum laufen während eines Deployments für einige Sekunden zwei Versionen gleichzeitig?
- Warum ist ein
ALTER TABLEvon Hand auf dem Server ein Problem, auch wenn es funktioniert? - Warum erstellt man vor einer entfernenden Migration eine Sicherung, und was gehört zu einer brauchbaren Sicherung dazu?
Die Migrationsdateien aller vier Schritte liegen im Repository, ebenso die zugehörigen Anwendungsversionen in der Git-Historie. In protokoll.md stehen die Einordnung der fünf Änderungen aus Teil A, die Fehlermeldung aus dem nachgestellten Bruch in Teil B, die Vier-Schritte-Tabelle mit den Rollback-Prüfungen und die Beurteilung des Aufwands. Die beiden Regeln stehen in docs/entscheidungen.md.