Playbooks der Migrationen
1) Klassifizierung von Migrationen
DB-Schemata: Hinzufügen/Ändern von Spalten, Indizes, Sharding, Ändern des Schlüsseltyps.
Daten: Massen-Backfill/Cleanup, Normalisierung, Retention/Archivierung.
Services und APIs: Endpoint-Wechsel, Versionierung, Vertragsrefactoring.
Warteschlangen/Busse: Verschieben der Achsen, Ändern der Partitionierungsschlüssel, Ereignisformat.
Infrastruktur: Umzug in ein neues Cluster/K8s/Cloud/Region, Wechsel der Geheimnisse/KMS.
Speicher und Analysen: Engine Change (OLTP/OLAP), Format/Partitionierung von Datasets.
Sicherheit/Compliance: Schlüsselrotation, On-the-fly-Verschlüsselung, Geo-Lokalisierung von Daten.
2) Grundsätze erfolgreicher Migration
1. Expand → Migrate → Contract. Zuerst erweitern wir das Schema/Verhalten (kompatibel), dann übertragen wir die Daten/den Verkehr, dann entfernen wir das alte.
2. Shadow & Dual. Shadow Check (Shadow Read/Write) und Double Write zur Validierung.
3. Ficha-Fahnen und der „rote Knopf“. Schnelles Abschalten, schrittweises Einschalten (Persentil/Tenante/Regionen).
4. Idempotenz und Wiederholbarkeit. Skripte und Tasks können ohne Nebenwirkungen neu gestartet werden.
5. Beobachtung vor Veränderungen. Dashboards/Alerts im Voraus, Migrationstoken in Logs/Traces.
6. Der Rollback ist dokumentiert. Das Runbook des Rollbacks ist so detailliert wie der Plan nach vorne.
7. Mini-Partys und Pausen. Wir migrieren in kleinen Portionen und überprüfen SLIs und Geschäftsinvarianten.
3) Bestandsaufnahme und Abhängigkeitsanalyse
Consumer Map: Dienstleistungen, Jobs, Berichte, externe Partner, BI/ETL, Webhooks.
Verträge und Schemata: API/Event-Versionen, Backward/Forward-Kompatibilität.
Zugriffe/Geheimnisse: wer liest/schreibt, wo sind die Caches/Repliken.
Domain-Invarianten: Einzigartigkeit, Balance, Idempotenz, Berichtstag.
Volumen/Geschwindigkeiten: Datengröße, RPS, Spitzenfenster, RPO/RTO.
4) Kanonische Playbook-Vorlage (YAML-Skelett)
yaml playbook: "migrate-orders-to-v2"
owner: "orders-team"
stakeholders: ["platform", "data", "security", "support"]
change_type: ["schema", "data", "api"]
risk_level: "high"
preconditions:
- "Dashboards ready: latency/error/lag"
- "Runbook rollback validated on stage"
- "Backups verified (restore tested)"
plan:
phase_1_prepare:
steps:
- "Add new nullable columns (expand)"
- "Deploy code with dual-write (flag off)"
- "Enable CDC stream to target"
phase_2_shadow:
steps:
- "Shadow-read v2, compare with v1 (1%)"
- "Fix discrepancies; iterate"
phase_3_dual_write:
steps:
- "Enable dual-write (10%→50%→100%)"
- "Start backfill in batches (size=10k, sleep=200ms)"
phase_4_cutover:
steps:
- "Switch reads to v2 by tenants (canary)"
- "Monitor SLI 30m; expand scope"
phase_5_contract:
steps:
- "Drop old indices/columns after T+14d"
- "Disable old topic/api; update docs/SDK"
guardrails:
abort_if:
- "error_rate > 0. 5% for 5m"
- "p95 > baseline1. 5 for 10m"
- "data_mismatch > 0. 01%"
rollback:
steps:
- "Flip flag: reads back to v1"
- "Stop backfill; continue dual-write to v1"
- "Replay missed events (DLQ→v1)"
validation:
checks:
- "Row counts match within epsilon"
- "Business invariants hold (balances, limits)"
comms:
- channel: "on-call-bridge"
- status_updates: "T-24h, T-1h, start, cutover, finish"
window: "low-traffic Sun 02:00–05:00 UTC"
5) Migrationsmuster
5. 1 DB-Schemata (RDBMS/NoSQL)
Hinzufügen - nicht ändern. Neue nullable Spalten/Indizes → Code liest alt und neu.
Online-Neuaufbau. Verwenden Sie Online-Indizes/parallele DDLs.
Serialisierungsversionen. Versionieren Sie payload in JSON/Proto/Avro Spalten.
Schlüsselmigration. Beim PK-Wechsel - zeitliche Entsprechungstabelle + Trigger/CDC.
5. 2 Daten (backfill/cleanup)
CDC + backfill. Zuerst der Änderungsfluss (um mitzuhalten), dann der Batch-Backfill.
Partys und Deadlines. Kleine Batches mit Lagkontrolle, Checkpoints und Re-Launch.
Idempotente Upgrades. Upsert durch natürliche Schlüssel/Versionen.
5. 3 Ereignisse und Warteschlangen
Versionierung von Ereignissen. 'event _ type @ vN', Verbraucher ignorieren ungewohnte Felder.
Der Umzug der Tops. Doppelveröffentlichung, Verbraucher lesen von beiden bis zur Stabilisierung; dann „schneiden“ die alten.
Partition key. Die Schlüsselmigration erfolgt über eine Neuauflage mit Entsprechungskarte und Idempotenz.
5. 4 Services und APIs
Blue/Green/Canary. Pool-Erwärmung, Teilverkehr, schnelles Rollback.
Ficha-Flaggen. Nach Tenanten/Regionen/Prozent, beobachtete Inklusion.
Verträge. CDC-Verträge und Kompatibilitätstests - vor der Umstellung.
5. 5 Regionen/Klauden
Geo-Doppel-Aufnahme. Die Daten werden in zwei Regionen aufgezeichnet; Lesen durch Nähe.
State transfer. Snapshot + Replikation; „rote Linie“ RPO, DNS/Anycast Umladung.
Jurisdiktionen. Einwilligungen/Datenlokalisierung, Listen „verboten“ für die Entnahme von Sätzen.
6) Leistungsphasen (im Detail)
1. Vorbereitung
Dashboards, Alerts, Limits, Ficha-Flags, Backups mit Recovery-Test, Run auf den Stage.
2. Schatten (Schattencheck)
Spiegelung von Anfragen/Einträgen in das neue System ohne Auswirkungen auf die Nutzer. Wir vergleichen die Antworten/Zustände.
3. Dual-write / Dual-read
Wir schreiben in beide Richtungen. Lesungen - nach und nach auf das neue System übertragen. Die Inkonsistenzprotokolle werden analysiert.
4. Backfill
Wir sammeln historische Daten in Chargen. Wir kontrollieren die CDC-Lag, überwachen die Stories/Cache-Last.
5. Schneiden (Umschalten)
Canarim nach Segmenten (Tenanten/Regionen/Prozentsätze). Wir unterstützen einen schnellen Rollback.
6. Vertrag (Bereinigung)
Wir schneiden alte Pfade ab, entfernen veraltete Felder/Indizes/Topics nach der „Sicherheitsperiode“.
7. Verifizierung und Retro
Bericht, Metriken, Lektionen, Aktualisierung des Playbooks/Checklisten.
7) Beobachtbarkeit und SLO während der Migration
Technische SLIs: p50/p95/p99, Fehlerrate, Retry/Timeout, Utilization, CDC-Lag, Warteschlangentiefe.
Business SLI: Erfolg von Transaktionen/Conversions, Invarianten (Salden, Limits, Duplikate).
Spezielle Tags: 'migration _ id', 'phase', 'tenant', 'flag _ state'.
Alertgarden: Schwellen für Schwänze und Fehler, „Auto-Stop“ (Abbruch) durch SLO.
Vergleichspanels: v1 vs v2, „delta“ für Schlüsselmetriken.
8) Rollback und Notfallszenarien
Logisches Rollback: Flags/Traffic-Routing rückwärts, Backfill-Einfrieren.
Daten: „Kompensation“ (Saga), Ereignisreplikationen, DLQ → Quellsystem.
Geheimnisse/Schlüssel: Rückkehr zum vorherigen Schlüssel/Zertifikat (Dual-Key).
DNS/Verkehr: „reverse drift“ Anycast/ALB, TTL kurz im Migrationsfenster.
Kommunikation: Vorab vereinbarter Kanal und Statusformat.
9) Sicherheit, Privatsphäre, Compliance
Datenminimierung. Wir übertragen nur die notwendigen Felder; Anonymisierungsprofile auf der Kopie.
Kryptographie. Verschlüsselung „auf Draht“ und „in Ruhe“, KMS-Rotation; Schlüsselaktivitätsprotokoll.
Zugriffe nach Zeit. Temporäre Rollen für Migrationsjobs, Auswahl der Rechte nach Abschluss.
Spuren. PD-Maskierung in Logs/Traces, Exportbeschränkungen.
10) Change Management und Kommunikation
RACI: Wer behauptet, wer führt, wer informiert wird.
Freeze-Perioden: Verbot irrelevanter Releases im Migrationsfenster.
Status: T-24h, T-1h, Start, Canaring, Cutover, Finish, Post-Sea.
Externe Partner: Kompatibilitätsfenster, Vertragsbriefe, Testsandbox.
11) Runbook's Vorlagen
11. 1 Backfill (Pseudocode)
for batch in paginate(ids, size=10_000):
try:
rows = read_v1(batch)
upsert_v2 (rows) # idempotently mark_checkpoint (batch. end)
sleep(jitter_ms(100..300))
except Throttle:
sleep (5s) # backpressure respect except Fatal as e:
alert("backfill-failed", e, context=batch)
abort_if_needed()
11. 2 Proverka一致nosti (Schnappschuss/Stichprobe)
sample = random_ids(n=10_000, stratify=tenant,timestamp)
v1 = fetch_v1(sample); v2 = fetch_v2(sample)
assert schema_compatible(v2)
assert key_invariants_hold (v1, v2) # sum, statuses, versions mismatch_rate = diff (v1, v2). rate()
abort_if(mismatch_rate > 0. 0001)
11. 3 Lesewechsel
flag. enable("read_from_v2", segment="tenants: cohort_A")
monitor(30m)
if SLO_ok(): expand_segment()
else: rollback_segment()
12) Anti-Muster
„Big Bang“ statt Expand-Migrate-Vertrag.
Backfill ohne CDC → ewige Aufholjagd und Drift.
Keine Idempotenz → doppelte/schmutzige Daten.
Manuelle Schritte ohne Skripte → menschliche Fehler.
Migration ohne Dashboards/Wachen → „Blindflug“.
Unbestätigtes Rollback → Rollback funktioniert nicht, wenn es benötigt wird.
Verbraucher ignorieren (BI/Partner) → „kaputte“ Berichte/Integrationen.
13) Checkliste des Architekten
1. Ziel, Grenzen, Art der Migration und Invarianten des Ergebnisses sind definiert?
2. Verbraucher- und Vertragskarte erstellt, Kompatibilitätstests grün?
3. Dashboards vorbereitet, Alerts, Tags' migration _ id', SLO/guardrails gesetzt?
4. Shadow und/oder Dual-Write implementiert, ist Backfill idempotent?
5. Gibt es ein übliches Rollback-Runbook, das die Wiederherstellung von Backups überprüft?
6. Fenster/Koordination/Kommunikation vereinbart, Freeze eingeschaltet?
7. Stufenplan mit Kanaring und Ausbau-/Haltekriterien fertig?
8. Sicherheit/Compliance: Schlüssel, Zugänge, PII-Hygiene?
9. Werden die Dokumentationen/SDKs/Specs im gleichen Releasezyklus aktualisiert?
10. Post-Sea und Playbook-Update nach Fertigstellung geplant?
Schluss
Migrations-Playbooks sind die architektonische Praxis des Risikomanagements: kleine umkehrbare Schritte, transparente Metriken, ein fertiger Rollback und die Disziplin „expand-migrate-contract“. Indem Sie den beschriebenen Mustern folgen, migrieren Sie Schemata, Daten, Dienste und Regionen ohne Ausfallzeiten und Überraschungen, während Sie die Invarianten des Geschäfts und das Vertrauen der Benutzer behalten.