Zum Inhalt springen
14. Aug. 2026·8 Min. Lesezeit

Ein Rollback-Plan muss den ersten Schreibvorgang überstehen

Ein Rollback-Plan funktioniert nur, wenn Schreibhoheit, Datenrückführung, Kompatibilität, Warmhaltezeit und Proben vor der Umschaltung geklärt sind.

Ein Rollback-Plan muss den ersten Schreibvorgang überstehen

Ein Rollback-Plan ist nur dann glaubwürdig, wenn das alte System die Schreibvorgänge des neuen Systems übernehmen kann, ohne sie zu verlieren, zu duplizieren oder in falscher Reihenfolge zu verarbeiten. Den Load Balancer zurückzuschalten ist der einfache Teil. Der schwierige Teil beginnt mit der ersten Bestellung, Zahlung, Akte, Journalbuchung oder Statusänderung, die nach der Umschaltung gespeichert wird.

Damit ist ein Rollback ein Problem der Daten und der Zuständigkeit, keine Funktion des Deployments. Vor der Umschaltung muss das Team wissen, welches System zu jedem Zeitpunkt Schreibhoheit hat, wie spätere Schreibvorgänge in das alte Modell zurückkehren, welche externen Auswirkungen sich nicht rückgängig machen lassen und wer die Rückkehr anordnen darf. Wenn diese Antworten nur im Kopf einer Person stecken oder von Code abhängen, der noch nie gelaufen ist, gibt es keinen Rollback-Plan. Es gibt nur die Hoffnung, dass das neue System ausfällt, bevor etwas Relevantes passiert.

Die Umschaltung überträgt die Schreibhoheit

Eine sichere Umschaltung gibt immer genau einem System die Schreibhoheit. Beide Systeme dürfen Leseanfragen bedienen, Ergebnisse vergleichen, kopierte Ereignisse verarbeiten oder Berechnungen im Schattenbetrieb ausführen. Sie dürfen nicht unabhängig voneinander verbindliche Änderungen am selben Geschäftsdatensatz annehmen. Zwei schreibende Systeme erzeugen Konflikte, die ein Wechsel der Datenverkehrsroute nicht lösen kann.

Die Schreibhoheit umfasst mehr als die wichtigste Datenbankverbindung. Eine alte Systemlandschaft nimmt Änderungen oft über Stapeldateien, Nachrichtenwarteschlangen, Bedienmasken, geplante Jobs, Partnerübertragungen, gespeicherte Prozeduren und direkte Eingriffe des Supports an. Ich habe Teams erlebt, die die Webanwendung gesperrt hatten, während ein nächtlicher Job unbemerkt Korrekturen über ein anderes Konto verbuchte. Die Migration wirkte stabil, bis die beiden Hauptbücher am nächsten Morgen voneinander abwichen.

Erstellen Sie das Schreibinventar anhand von Geschäftsvorgängen, nicht anhand von Tabellen. Halten Sie für jeden Vorgang Einstiegspunkt, Identität, Transaktionsgrenze, erzeugte Kennung, Zeitquelle, nachgelagerte Folgen und das jeweils vor und nach der Umschaltung zuständige System fest. „Kunde aktualisieren“ ist zu allgemein. „Postanschrift ändern, Compliance-Mitteilung erzeugen und Druckauftrag einreihen“ ist konkret genug, um offenzulegen, was ein Rollback erhalten muss.

Auch die Routing-Steuerung braucht einen einzigen Verantwortlichen. DNS allein ist eine schlechte Notfallsteuerung, weil Resolver und Clients Einträge länger zwischenspeichern können, als die Betreiber annehmen. Verwenden Sie besser eine Steuerung am Gateway, Proxy, Queue-Consumer, Verbindungsbroker oder an einer anderen Stelle, an der das Team die aktive Route beobachten kann. Notieren Sie den aktuellen Wert der Steuerung und den Befehl, der ihn ändert. Ein Screenshot einer Konsole liefert dem Einsatzleiter keine wiederholbare Aktion.

Beschreiben Sie die Zustände der Schreibhoheit in klaren Begriffen: OLD_WRITES, DRAINING, NEW_WRITES und ROLLING_BACK reichen für viele Systeme aus. Jeder Zustand sollte nur eine bekannte Gruppe von Schreibern zulassen. Der Übergang muss einen unerwarteten Schreiber abweisen und darf ihn nicht nur protokollieren, denn eine nach dem Rollback entdeckte Warnung kann keine Transaktion rückgängig machen.

Vorbedingungen brauchen eindeutige Ergebnisse

Die Umschaltung darf erst beginnen, wenn jede Rollback-Vorbedingung einen benannten Test, ein aktuelles Ergebnis und eine verantwortliche Person hat, die den Vorgang stoppen kann. Ein Dokument mit dem Satz „Replikation in Ordnung“ lässt während eines Vorfalls Raum für Streit. Ein Test, der besagt, dass die Replay-Position mindestens der erfassten Position entspricht, samt genauer Abfrage und Ausgabe, liefert dem Team eine Tatsache.

Verwenden Sie einen kurzen Bereitschaftsvertrag. Er ist ein Tor, kein Wunschzettel:

  • Das alte Release kann jede für die Umschaltung eingeführte Schemaänderung lesen.
  • Das alte System ist bereitgestellt, erreichbar, gepatcht und kann sich bei seinen Abhängigkeiten authentifizieren.
  • Der Erfassungs- oder Replikationspfad hat eine produktionsähnliche Last verarbeitet, ohne die vereinbarte Rückstandsgrenze zu überschreiten.
  • Alle Schreiber im Inventar beachten die Hoheitssteuerung, einschließlich Stapel- und Bedienpfaden.
  • Das Team hat eine aktuelle Sicherung in einer isolierten Umgebung wiederhergestellt und den Start geprüft.

Der letzte Punkt deckt eine häufige Verwechslung auf: Eine erfolgreiche Sicherung ist noch keine erfolgreiche Wiederherstellung. Ein grüner Sicherungsjob beweist, dass Bytes irgendwohin kopiert wurden. Er beweist nicht, dass der Verschlüsselungsschlüssel verfügbar, das Archiv vollständig oder die Datenbank lesbar ist und die Anwendung damit starten kann. Legen Sie Wiederherstellungsbefehl, Dauer, Prüfsumme und Ergebnis des Anwendungstests zum Umschaltprotokoll.

Erfassen Sie unmittelbar vor dem Wechsel der Schreibhoheit einen Datenprüfpunkt. In PostgreSQL kann ein Team mit physischer Streaming-Replikation die aktuelle WAL-Position des Primärsystems mit der Replay-Position des Standbys vergleichen. Das PostgreSQL-Handbuch beschreibt eine LSN als Position im Write Ahead Log und erklärt, dass pg_last_wal_replay_lsn() die letzte während der Wiederherstellung abgespielte Position liefert. Eine minimale Beweissicherung sieht so aus:

/* On the primary */
SELECT pg_current_wal_lsn();
 pg_current_wal_lsn

 7A3/91F2C6D0
(1 row)

/* On the standby */
SELECT pg_last_wal_replay_lsn();
 pg_last_wal_replay_lsn

 7A3/91F2C6D0
(1 row)

Behandeln Sie den Wert als Beispiel für die Ausgabeform, nicht als magischen Grenzwert. Gleichheit zu einem Zeitpunkt beweist nicht, dass jeder Geschäftsvorgang umkehrbar ist, und eine Differenz in Bytes lässt sich nicht direkt in Zeit übersetzen. Die Prüfung beweist genau eine Sache: Das Standby hat bis zur erfassten Logposition abgespielt. Die Belege brauchen zusätzlich anwendungsbezogene Zählungen, Invarianten und Stichproben, die in der jeweiligen Domäne sinnvoll sind.

Das alte System bleibt warm, bis Daten zurückkehren können

Das alte System sollte warm bleiben, bis das Team entweder nachweist, dass es jede Änderung nach der Umschaltung aufnehmen kann, oder den Rollback formell aufgibt und zur Vorwärtsreparatur übergeht. Eine feste Zahl von Tagen klingt eindeutig, ignoriert aber Transaktionsvolumen, verzögerte Jobs, Abrechnungszyklen und Schemaänderungen. Leiten Sie den Zeitraum aus beobachtbaren Ausstiegsbedingungen ab und ergänzen Sie eine Kalendergrenze für Personal- und Kostenplanung.

„Warm“ bedeutet unter dem Druck eines Vorfalls ausführbar. Die alte Anwendung hat Rechenkapazität, aktuelle Konfiguration, gültige Geheimnisse, Netzwerkzugriff, funktionierende Abhängigkeitsverträge, genügend Speicherplatz, Überwachung und Bediener, die noch mit ihr umgehen können. Eine ausgeschaltete virtuelle Maschine mit abgelaufenem Zertifikat ist ein Archiv. Sie ist kein Rollback-Ziel.

Halten Sie das System mindestens über einen vollständigen Geschäftszyklus warm, der verzögertes Verhalten sichtbar machen kann. Dazu können eine nächtliche Buchung, eine Abrechnungsgrenze, eine Partnerdatei, ein Wochenendplan oder ein Periodenabschluss gehören. Übernehmen Sie keine allgemeine Sieben- oder Dreißigtageregel. Ein Schadenbearbeitungssystem mit verspätet eingehenden Dokumenten und ein Kassendienst mit täglichem Abschluss brauchen unterschiedliche Nachweiszeiträume.

Die Ausstiegsbedingungen sollten Verhalten und Wiederherstellbarkeit abdecken. Verlangen Sie, dass das neue System verzögerte Jobs abschließt, externe Bestätigungen abstimmt, Fehler- und Latenzgrenzen unter echtem Datenverkehr einhält und einen Änderungsstrom erzeugt, den das alte System verarbeiten kann. Verlangen Sie außerdem eine erfolgreiche Rollback-Probe mit Daten, die nach einer simulierten Umschaltung erfasst wurden. Wenn das Team den Rückweg entfernt, eine destruktive Schemaänderung ausführt oder den Vertrag einer alten Abhängigkeit auslaufen lässt, protokollieren Sie den genauen Zeitpunkt, an dem der Rollback endet.

Das Warmhalten des alten Systems verursacht Kosten und Risiken. Ungepatchte Dienste, doppelte Scheduler und aktive Zugangsdaten vergrößern die Angriffs- und Fehlerfläche. Reduzieren Sie diese Fläche bewusst: Blockieren Sie Benutzerdatenverkehr, deaktivieren Sie jeden Scheduler bis auf den für einen getesteten Rollback benötigten, beschränken Sie Bedienzugriffe und überwachen Sie jeden Verbindungsversuch. Warm bedeutet nicht, dass das System sorglos weiterläuft.

Schreibvorgänge nach der Umschaltung bestimmen die Strategie

Jeder Schreibvorgang nach der Umschaltung braucht eine von vier Behandlungen: im alten System nachbilden, für eine spätere Wiedergabe aufbewahren, seine Wirkung kompensieren oder akzeptieren, dass er einen Rollback unmöglich macht. Alle vier unter „Datensynchronisierung“ zusammenzufassen verdeckt die wichtigen Entscheidungen. Die passende Behandlung folgt der fachlichen Bedeutung, besonders bei Reihenfolge und Nebenwirkungen.

Rückwärtsreplikation funktioniert, wenn das Zielmodell die neue Änderung ausdrücken kann und das Replikationswerkzeug die nötigen Transaktionsgrenzen erhält. Gefährlich wird sie, wenn das moderne System eine alte Zeile auf mehrere Datensätze verteilt, einen veränderlichen Status durch Ereignisse ersetzt, die Kennungserzeugung ändert oder strengere Prüfungen einführt. Ein Zeilenkopierer kann syntaktisch gültige Daten liefern, die die alte Anwendung falsch deutet.

Ein nur ergänzbares Änderungsjournal lässt sich oft leichter verstehen. Geben Sie jedem angenommenen Befehl eine unveränderliche Vorgangs-ID, einen Geschäftsschlüssel, eine Quellsequenz, eine Schemaversion, einen Akteur, Annahmezeitpunkt, Nutzdaten und Ergebnis. Der Rollback-Importer speichert die angewandte Vorgangs-ID, damit Wiederholungen den Geschäftsvorgang nicht erneut ausführen. Idempotenz gehört an die fachliche Grenze: „Adresse auf X setzen“ kann wiederholt werden, während „Saldo um 10 erhöhen“ eine eindeutige Vorgangsidentität und eine Duplikatsperre braucht.

Doppelte Schreibvorgänge aus dem Anwendungscode sind beliebt, weil sie unmittelbar wirken. Für die meisten Umschaltungen rate ich davon ab. Die Anfrage kann in der neuen Datenbank festgeschrieben werden und vor dem Commit in der alten Datenbank auslaufen. Danach wissen die Aufrufer nicht, was geschehen ist, und die Systeme weichen voneinander ab. Die umgekehrte Reihenfolge ändert nur, welches System den Fehler gewinnt. Eine transaktionale Outbox oder ein Datenbank-Änderungsstrom bindet die Erfassung an den maßgeblichen Commit und lässt einen getrennten Consumer die Zustellung wiederholen.

Manche Schreibvorgänge sollten nicht automatisch zurückfließen. Wenn das neue System einen Zustand erlaubt, den das alte Schema nicht darstellen kann, stellen Sie den Vorgang unter Quarantäne und machen Sie die Anzahl vor der Umschaltung sichtbar. Das gilt auch bei unterschiedlichen Validierungsregeln. Verformen Sie den Wert nicht, werfen Sie kein Feld weg und verstecken Sie keine neue Bedeutung in einem alten Freitextfeld, nur damit ein Abstimmungszähler null erreicht.

Das Runbook muss Daten und Verkehr bewegen

Ziele nach Arbeitslast wählen
CodeHero nutzt Go-Dienste, Rust-Rechenkerne, TypeScript-Clients und Postgres dort, wo sie passen.

Ein ausführbares Rollback-Runbook friert neue Schreibvorgänge ein, setzt eine endgültige Grenze, leert die erfassten Änderungen in das alte Modell, prüft den Geschäftszustand und gibt erst dann den Verkehr zurück. Wer zuerst den Verkehr zurückschaltet, lässt Benutzer neue Änderungen erzeugen, während der Importer noch aufholt. Dadurch verschiebt sich die Grenze während des Vorfalls.

Eine praktische Abfolge hat klare Abbruchpunkte und Belege:

  1. ROLLING_BACK ausrufen, neue ändernde Anfragen abweisen, Consumer pausieren und Zeitpunkt sowie letzte angenommene Vorgangs-ID festhalten. Lesezugriffe dürfen nur weiterlaufen, wenn sie keine verborgenen Schreibvorgänge auslösen.
  2. Laufende Transaktionen beenden lassen oder nach einer dokumentierten Regel abbrechen. Quellposition im Log, Queue-Offsets und Zahl der noch nicht verarbeiteten Journaleinträge erfassen.
  3. Den Rückstrom bis zur festgelegten Grenze anwenden. Stoppen, wenn einem Vorgang eine Zuordnung fehlt, er eine alte Invariante verletzt oder eine andere externe Referenz erzeugt.
  4. Abstimmungsabfragen und stichprobenartige Geschäftsvorgänge im alten System ausführen. Eine synthetische Transaktion durch jeden wichtigen Einstiegspunkt leiten, externe Mitteilungen aber in einer kontrollierten Senke halten.
  5. Alte Schreibhoheit wiederherstellen, Verkehr schrittweise freigeben, nur die alten Scheduler fortsetzen und Zähler für Duplikate, Ablehnungen und Rückstände beobachten.

Schreiben Sie die erwartete Ausgabe neben jeden Befehl. 0 rows kann bei einer Waisenabfrage Erfolg und bei einer Bestellzählung eine Katastrophe bedeuten. Halten Sie fest, welche Bedeutung gilt. Legen Sie Zugangsdaten- und Freigabeverfahren in die Nähe der Befehle, ohne Geheimnisse in das Runbook einzubetten. Wenn die ausführende Person einen Eintrag im Passworttresor suchen muss, benennen Sie den Eintrag und prüfen Sie den Zugriff während der Probe.

Messen Sie jede Phase getrennt. Nicht nur die gesamte Wiederherstellungszeit ist nützlich. Das Team muss wissen, wie lange Schreibvorgänge eingefroren bleiben, wie schnell der Rückwärts-Consumer bei Spitzenvolumen leert und welche Prüfung den größten Teil der Pause beansprucht. Wenn das Abspielen von 500.000 Vorgängen länger dauert, als das Geschäft verkraftet, scheitert der Plan auch dann, wenn eine kleine Probe gelingt. Testen Sie am erwarteten Höchststand und mit Reserve.

Kompatibilität erhält den Rückweg

Ein Rollback braucht Rückwärtskompatibilität bei Datenbanken, Nachrichten, APIs, Dateien und Authentifizierung. Das alte Programm muss mit dem Zustand nach der Umschaltung laufen. Wenn eine Migration eine Spalte entfernt, einen Enum-Wert neu belegt, die Bedeutung einer Nachricht ändert oder Zugangsdaten so dreht, dass der alte Client sie nicht mehr unterstützt, kann der Rückweg verschwinden, bevor es jemand bemerkt.

Danilo Satos Beschreibung von Parallel Change teilt eine inkompatible Änderung in die Phasen Erweitern, Migrieren und Zusammenziehen. Das Modell ist nützlich, weil der Rollback in die erweiterte Phase gehört, in der alte und neue Consumer noch funktionieren. Probleme entstehen, wenn Teams das Zusammenziehen als Aufräumarbeit betrachten und das alte Feld oder den alten Endpunkt entfernen, sobald neuer Verkehr unauffällig aussieht. Das Zusammenziehen beendet den Rollback bewusst und verdient einen eigenen Änderungsnachweis.

Ergänzende Schemaarbeit ist nötig, reicht aber nicht aus. Auch eine nullable Spalte kann alten Code beschädigen, wenn sich ein Trigger ändert, eine Abfrage positionale Inserts verwendet oder eine gespeicherte Prozedur eine neue Ergebnisform liefert. Testen Sie das tatsächliche alte Release gegen eine Kopie des Umschaltschemas. Prüfen Sie Lese- und Schreibvorgänge, darunter seltene Werte, leere Batches, maximale Feldlängen und Fehlerpfade.

Auch Nachrichten brauchen eine Kompatibilitätsregel. Consumer sollten unbekannte Felder ignorieren, müssen aber eine geänderte Bedeutung unter einem alten Feldnamen abweisen. Halten Sie alte Ereignistypen während der Warmhaltezeit verfügbar oder stellen Sie einen getesteten Abwärtskonverter bereit. Versionieren Sie den Konverter und bewahren Sie die ursprünglichen Nutzdaten auf, damit Bediener eine strittige Zuordnung reproduzieren können.

Authentifizierungsfehler sind besonders peinlich, weil sie vermeidbar sind. Behalten Sie alte Dienstidentitäten, Zertifikatsketten, Cipher-Kompatibilität und Netzwerkrouten, solange ein Rollback möglich bleibt. Testen Sie sie aus der alten Laufzeitumgebung, nicht vom Arbeitsplatz eines Administrators.

Externe Folgen brauchen Kompensation

Die gesamte Altanwendung testen
Die Plattform verarbeitet Systeme mit über einer Million Zeilen und liest den gesamten Codebestand zusammen.

Ein Rollback kann eine bereits zugestellte E-Mail, eine angenommene Bankdatei, ein gedrucktes Etikett oder eine ausgeführte Partneranweisung nicht zurückholen. Das sind externe Folgen, und der Plan braucht vor der Umschaltung eine Regel für jede einzelne. Parität in der Datenbank löst sie nicht.

Vergeben Sie für jede ausgehende Aktion einen Idempotenzschlüssel und speichern Sie die Bestätigung des Empfängers dazu. Während des Rollbacks muss das alte System erfahren, welche Aktionen bereits erfolgt sind, damit es sie nicht erneut sendet. Unterstützt der Empfänger idempotente Anfragen, verwenden Sie denselben Schlüssel. Andernfalls schalten Sie ein internes Journal davor, das einen zweiten Versand ablehnt.

Eine Kompensation ist ein neuer Geschäftsvorgang, keine Löschung. Eine verbuchte Zahlung kann eine Gegenbuchung erfordern. Ein versandter Lagerauftrag braucht womöglich eine Stornierung, die ihrerseits scheitern kann. Eine Kundenmitteilung kann eine von Menschen verfasste Korrektur verlangen. Halten Sie fest, wer jede Kompensation freigibt, welche Frist gilt und was passiert, wenn der externe Partner die Wirkung nicht zurücknehmen kann.

Geplante Arbeit erzeugt ein unauffälligeres Duplikatrisiko. Wenn beide Umgebungen warm bleiben, können zwei Scheduler dieselben fälligen Zeilen auswählen und dieselbe Aktion auslösen. Die Hoheitssteuerung muss Jobs ebenso streng erfassen wie HTTP-Anfragen. Im Normalbetrieb sollte der inaktive Scheduler weder Lease noch Produktionszugangsdaten erhalten können. Beim Rollback übertragen Bediener die Lease erst, nachdem der neue Worker gestoppt wurde und sein letztes abgeschlossenes Element bekannt ist.

Stimmen Sie Folgen anhand von Geschäftskennung und Bestätigung ab, nicht anhand der lokalen Queue-Tiefe. Eine leere Queue kann bedeuten, dass alles erfolgreich war, dass alles in einem unbeobachteten Dead-Letter-Speicher scheiterte oder dass ein Filter nichts auswählte. Ein brauchbarer Bericht verbindet beabsichtigte Aktionen, Versuche, Empfängerantworten und Kompensationen zu einer Zeile pro Geschäftsereignis.

Eine Probe muss den hässlichen Fehler erzwingen

Eine Probe beweist den Rollback nur, wenn sie Schreibvorgänge nach der Umschaltung verwendet, absichtlich etwas beschädigt und den Dienst über dieselben Steuerungen zurückbringt, die das Produktionsteam nutzen wird. Eine Besprechung, in der alle das Runbook vorlesen, testet Prosa. Eine Staging-Umschaltung ohne repräsentative Daten testet Routing. Beides weist keine Wiederherstellung nach.

Nutzen Sie eine produktionsähnliche Kopie oder eine isolierte Replay-Umgebung mit bereinigten Datensätzen und aufgezeichnetem Verkehr. Starten Sie alte und neue Releases, aktivieren Sie die echte Hoheitssteuerung und laden Sie genug Historie, damit sich Migrationen und Indizes glaubwürdig verhalten. CodeHero verwendet beim Umschreiben alter Systeme ein Paritätsprüfwerk gegen aufgezeichneten Produktionsverkehr. Derselbe Verkehrskorpus kann deshalb Verhaltensunterschiede vor einer Rollback-Probe sichtbar machen.

Erzwingen Sie dann einen Fehler, nachdem das neue System eine gemischte Gruppe von Vorgängen angenommen hat. Dazu gehören ein doppelt eintreffendes Update, zwei geordnete Befehle für dasselbe Konto, eine Batch-Grenze, ein abgewiesener Wert, ein Vorgang mit externer Wirkung in einer Senke und ein Job, der während der Sperre lief. Beenden Sie den Rückwärts-Consumer in der Mitte und starten Sie ihn neu. Die Vorgangs-IDs sollten Duplikate verhindern, und die Grenze muss stabil bleiben.

Ein bekanntes Fehlerbild verdient besondere Aufmerksamkeit. Der Rückwärts-Importer meldet keinen Rückstand, der Verkehr kehrt zum alten System zurück und die einfachen Zählungen stimmen. Stunden später weist ein Partner die Tagesdatei ab, weil das moderne System Kennungen in einem Format erzeugte, das der alte Export abschneidet. Der Rollback hat Zeilen korrekt bewegt, aber Verhalten an einer Dateigrenze verloren. Eine richtige Probe führt den Export aus, parst ihn mit dem Vertrag des Empfängers und vergleicht Kennungen durchgehend.

Sammeln Sie Belege, die jemand außerhalb des Migrationsteams beurteilen kann: angenommene Vorgangs-IDs, Quell- und Zielpositionen, Ergebnisse der Invariantenabfragen, Duplikatzahlen, isolierte Zuordnungen, Einträge im Journal externer Wirkungen, Phasendauern und den endgültigen Hoheitszustand. Bewahren Sie auch die fehlgeschlagene Probe auf. Wenn ein Plan erst besteht, nachdem ein Entwickler Daten von Hand ändert, muss diese Reparatur als kontrollierter Schritt dokumentiert oder durch eine Codeänderung beseitigt werden.

Die Beobachtung muss fachliche Richtigkeit zeigen

Echten Verkehr als Beleg nutzen
Aufgezeichnete Produktionsanfragen geben dem Paritätsprüfwerk konkretes Verhalten für den Vergleich vor der Umschaltung.

Rollback-Signale müssen fachliche Richtigkeit melden und dürfen sich nicht darauf beschränken, ob Prozesse laufen. Ein neuer Dienst kann schnell antworten und zugleich doppelte Rechnungsnummern vergeben, eine Buchungsregel überspringen oder einen Export dauerhaft in der Warteschlange lassen. Infrastrukturdiagramme helfen bei der Fehlersuche, sagen dem Entscheider aber selten, ob weitere Schreibvorgänge sicher sind.

Definieren Sie vor der Umschaltung Invarianten aus dem Verhalten des Altsystems. Eine Invariante kann verlangen, dass jede angenommene Zahlung genau eine Journalbuchung besitzt, jede Lieferung auf einen angenommenen Auftrag verweist, jede geschlossene Akte einen Abschlussgrund hat oder jede ausgehende Datei eine passende Kontrollsumme enthält. Drücken Sie jede Invariante als Abfrage oder Bericht aus, den beide Systeme erzeugen können. Bei verschiedenen Schemas vergleichen Sie eine kanonische fachliche Projektion statt erzwungener Tabellengleichheit.

Die Projektion sollte Unterschiede normalisieren, die das Verhalten nicht ändern, und relevante Unterschiede erhalten. Zeitstempel vor dem Vergleich in eine Zeitzone zu bringen ist sinnvoll. Centbeträge zu ignorieren, weil ein System Dezimalwerte und das andere ganzzahlige Untereinheiten speichert, ist es nicht. Legen Sie diese Regeln mit den Verantwortlichen für den Geschäftsdatensatz fest und versionieren Sie sie zusammen mit dem Migrationscode. Sonst kann ein Entwickler während des Vorfalls einen roten Vergleich grün machen, indem er einen Filter erweitert.

Zählungen brauchen Nenner und Grenzen. „Zwölf Abweichungen“ sagt wenig ohne die Zahl der geprüften Datensätze, die Vorgangstypen und den Zeitraum der Annahme. Auch null Abweichungen können täuschen, wenn der Vergleichsjob an der gestrigen Partition endet. Jedes Abstimmungsergebnis sollte Quellgrenze, Zielgrenze, Auswahlzahl, Vergleichszahl, Zahl der Abweichungen, ältesten nicht zugeordneten Vorgang und Abschlusszeit nennen.

Verwenden Sie Aktualitätssignale, die dem wirklichen Replay-Pfad folgen. Die Queue-Tiefe allein übersieht eine blockierte Partition, wenn andere Partitionen weiterlaufen. Ein lebender Consumer übersieht eine fehlerhafte Nachricht, die endlos wiederholt wird. Melden Sie ältesten nicht angewandten Vorgang und dessen Alter, letzte gesehene Quellsequenz, letzte gespeicherte Zielsequenz, Quarantänezahl, Wiederholungszahl je Vorgang und Abbaurate. Ein stabiler Rückstand bei konstantem Verkehr kann im Normalbetrieb gesund sein, aber für einen Rollback tödlich, wenn er während einer Schreibsperre null erreichen muss.

Stichproben bleiben nötig, weil Invarianten nicht jede sonderbare Altregel erfassen können. Wählen Sie Datensätze nach festen Kriterien, damit Probe und Produktionsumschaltung vergleichbare Fälle prüfen: größte Transaktionen, Datensätze mit maximalen Feldlängen, wiedereröffnete Akten, rückgängig gemachte Zahlungen, andere als die Standardwährung und Vorgänge über eine Datumsgrenze. Prüfen Sie Geschäftsergebnis und Ausgabeartefakt, nicht nur die gespeicherte Zeile. Eine Rechnung, die in der Datenbank aufgeht, aber mit leerer Steuerkennung erscheint, weicht im Verhalten ab.

Alarme sollten direkt zu den festgelegten Entscheidungen passen. Eine verletzte Invariante kann Schreibvorgänge sofort einfrieren. Ein wachsendes Replay-Alter kann eine Uhr starten. Eine kurze Latenzspitze kann Beobachtung ohne Rollback verlangen. Schreiben Sie diese Zuordnung vor der Umschaltung fest und hängen Sie sie an den Alarm. Ein Alarm namens „Migration gestört“ löst im Vorfall nur einen Streit darüber aus, was gestört bedeutet.

Bewahren Sie die Telemetrie nach Ende der Warmhaltezeit auf. Sie erklärt, warum das Team den Rückweg stillgelegt hat, und gibt der Vorwärtsreparatur eine verlässliche Basis. Der Abschlussnachweis sollte zeigen, dass verzögerte Arbeit fertig ist, Vergleichsgrenzen über den vereinbarten Geschäftszyklus hinausgingen, Quarantänefälle gelöst wurden und keine ungeklärten externen Folgen blieben. Dieser Beleg ist stärker als ein Sitzungsprotokoll mit dem Satz, die Migration habe gut ausgesehen.

Machen Sie den Vergleichsjob unabhängig von der Route, die er beurteilt. Wenn dieselbe Datenbankverbindung, derselbe Cache oder derselbe Serialisierungscode der neuen Anwendung auch den Prüfer antreibt, kann ein Fehler Ergebnis und vermeintliche Kontrolle zugleich verfälschen. Führen Sie wichtige Abstimmungen über einen getrennt bereitgestellten Leser mit beschränkten Rechten aus und legen Sie Abfragetext sowie Ergebnisprüfsumme zum Umschaltprotokoll. Unabhängigkeit verlangt keine zweite Plattform, aber einen Fehlerpfad, der nicht stillschweigend mit sich selbst übereinstimmen kann.

Testen Sie auch fehlende Telemetrie als Fehler. Stoppen Sie den Journal-Consumer, halten Sie eine Quellpartition zurück und lassen Sie die Senke für externe Wirkungen eine Bestätigung ablehnen. Das Dashboard sollte eine alternde Grenze und einen unvollständigen Vergleich zeigen, während die Hoheitssteuerung eine Erfolgserklärung verhindert. Wenn eine leere Anzeige wie null Abweichungen aussieht, korrigieren Sie die Anzeige vor der Umschaltung.

Die Rollback-Entscheidung braucht eine Uhr

Die Rollback-Entscheidung sollte vor der Umschaltung festgelegten Auslösern, einer verantwortlichen Person und einem Zeitbudget folgen. Ohne diese Vorgaben verbringen Entwickler das umkehrbare Fenster mit Diagnose, während neue Schreibvorgänge auflaufen und externe Folgen sich ausbreiten. Wenn die Leitung schließlich zurück will, kann das Replay länger dauern als eine Vorwärtskorrektur.

Wählen Sie Auslöser, die Schaden für Benutzer oder Buchhaltung beschreiben: abgewiesene wichtige Vorgänge, verletzte Invarianten, ungeklärte Abstimmungsdifferenzen, eine unbegrenzt wachsende Queue, fehlende externe Bestätigungen oder die Unfähigkeit, einen erforderlichen Batch abzuschließen. CPU und Latenz können die Entscheidung stützen, doch Infrastruktursymptome allein sagen selten, ob Daten sicher bleiben. Legen Sie Beobachtungszeitraum und Quelle jedes Signals fest.

Geben Sie einer Person die Befugnis, den Rollback anzuordnen, und benennen Sie eine Vertretung. Datenbankleitung, Anwendungsleitung, Betrieb, Fachverantwortliche und Einsatzleitung dürfen beraten, aber Konsens ist zu langsam, während Schreibvorgänge eintreffen. Benennen Sie außerdem, wer den Rollback für nicht mehr verfügbar erklären darf, weil eine destruktive Grenze überschritten wurde. Diese Erklärung sollte den Reaktionsplan auf Vorwärtsreparatur und Kompensation umstellen, statt das Team über eine veraltete Möglichkeit diskutieren zu lassen.

Die Uhr braucht zwei Grenzen. Die Entscheidungsfrist bestimmt, wie lange das Team untersuchen darf, bevor es Schreibvorgänge einfriert oder sich auf Vorwärtsreparatur festlegt. Das Ausführungsbudget bestimmt, wie lange das Geschäft Schreibpause und Replay verkraftet. Leiten Sie beides aus Transaktionszufluss, Abbaurate des Rückstands, externen Fristen und Personal ab und testen Sie die Annahmen in der Probe.

Ein für die Umschaltung bereites Team kann das Runbook einem Bediener geben, der es nicht geschrieben hat, nach echten Schreibvorgängen einen Fehler auslösen und das alte System innerhalb des Budgets wiederherstellen. Wenn die Übung eine undokumentierte Abfrage, einen bestimmten Entwickler oder eine manuelle Datenänderung braucht, verschieben Sie die Umschaltung. Die Produktion wird mit diesen Abhängigkeiten nicht freundlicher umgehen.

FAQ

Was muss ein Rollback-Plan für eine Systemumschaltung enthalten?

Er braucht die Steuerung der Schreibhoheit, Datengrenze, Methode für das Rückwärts-Replay, Kompatibilitätsregeln, Behandlung externer Folgen, Entscheidungsverantwortung, Auslöser und zeitlich gemessene Befehle. Hängen Sie erwartete Ausgaben und die Belege einer abgeschlossenen Probe an.

Wie lange sollte das alte System nach der Migration verfügbar bleiben?

Halten Sie es warm, bis das neue System die Geschäftszyklen mit verzögerten Fehlern durchlaufen hat und das Team die sichere Rückführung nachträglicher Daten beweist. Nutzen Sie beobachtbare Ausstiegsbedingungen und eine Kalendergrenze statt einer beliebigen Tageszahl.

Können wir durch Zurückschalten des Verkehrs zur alten Anwendung zurückrollen?

Nur wenn das neue System noch keine relevanten Schreibvorgänge angenommen hat. Nach dem ersten Schreibvorgang müssen Sie Aktivität einfrieren, spätere Änderungen abspielen oder kompensieren, den alten Zustand prüfen und erst dann den Verkehr verschieben.

Sind doppelte Schreibvorgänge eine sichere Datenbank-Rollback-Strategie?

Meist nicht, wenn Anwendungscode zwei Datenbanken unabhängig beschreibt. Ein Commit kann erfolgreich sein, während der andere ausläuft. Verwenden Sie deshalb eine an die maßgebliche Transaktion gebundene Erfassung und einen idempotenten Zustellungs-Consumer.

Was geschieht mit Transaktionen, die nach der Umschaltung entstehen?

Jede Transaktion muss im alten Modell abgespielt, für später aufbewahrt, kompensiert oder als unvereinbar mit einem Rollback erklärt werden. Entscheiden Sie pro Geschäftsvorgang und erhalten Sie Reihenfolge, Identität sowie externe Bestätigungen.

Wie testen wir, ob ein Rollback wirklich funktioniert?

Lassen Sie das neue System repräsentative Schreibvorgänge annehmen, lösen Sie einen Fehler aus, stoppen und starten Sie den Replay-Pfad und stellen Sie über die Produktionssteuerungen wieder her. Stimmen Sie fachliche Invarianten und externe Folgen ab, nicht nur Zeilenzahlen.

Wann macht eine Datenbankschemaänderung den Rollback unmöglich?

Der Rollback endet, wenn das alte Release das aktive Schema nicht mehr sicher lesen oder ändern kann oder neue Daten keine genaue alte Darstellung haben. Behandeln Sie den Abbau der Kompatibilität als eigene, freizugebende Zusammenziehungsphase.

Sollten altes und neues System während der Umschaltung beide Schreibvorgänge annehmen?

Nein. Geben Sie einem System die verbindliche Schreibhoheit und lassen Sie jeden anderen Pfad Änderungen abweisen oder nur als unverbindliche Schattenarbeit erfassen. Unabhängige Schreiber erzeugen Konflikte, die Routing nicht reparieren kann.

Wer sollte den Rollback auslösen dürfen?

Benennen Sie vor der Umschaltung eine entscheidende Person und eine Vertretung. Geben Sie ihnen Auslöser für Benutzerschaden, eine Diagnosefrist und das Ausführungsbudget, damit keine Notfallabstimmung nötig wird.

Was passiert, wenn eine externe Aktion beim Rollback nicht rückgängig gemacht werden kann?

Speichern Sie Aktion und Bestätigung, verhindern Sie doppelte Sendungen und definieren Sie einen kompensierenden Geschäftsvorgang, sofern es einen gibt. Kann der Empfänger nicht rückgängig machen, braucht das Runbook eine verantwortliche Person und einen manuellen Lösungsweg.