- Letzte Woche wurde LedgerStore (LSG) untersucht, Ubers zusätzlicher dedizierter Ledger-Datenbank im Ledger-Stil.
- Diese Woche geht es darum, wie Uber geschäftskritische Ledger-Daten zu LSG migriert hat.
- Es wird besprochen, wie mehr als 1 Billion Einträge (mehrere Petabyte an Daten) transparent und ohne Unterbrechung verschoben wurden und was dabei gelernt wurde.
Historie
- Gulfstream ist Ubers Zahlungsplattform und wurde 2017 mit DynamoDB eingeführt.
- In Ubers Größenordnung wurde DynamoDB teuer, daher wurden nur 12 Wochen an Daten (Hot Data) in DynamoDB gespeichert und ältere Daten (Cold Data) in Ubers Blobstore TerraBlob abgelegt.
- Als langfristige Lösung war LSG vorgesehen. LSG wurde speziell für die Speicherung von zahlungsähnlichen Daten entwickelt.
- Wichtige Funktionen von LSG:
- Verifizierbare Unveränderlichkeit (mithilfe kryptografischer Signaturen kann geprüft werden, dass Datensätze nicht verändert wurden)
- Tiered Storage zur Kostenkontrolle (Hot Data an einem Ort, der gut für die Verarbeitung von Anfragen geeignet ist, Cold Data an einem Ort, der für Speicherung optimiert ist)
- Verbesserte Latenz bei letztlich konsistenten Sekundärindizes
- Bis 2021 nutzte Gulfstream eine Kombination aus DynamoDB, TerraBlob und LSG zur Datenspeicherung.
- DynamoDB: Daten der letzten 12 Wochen
- TerraBlob: Cold Data
- LSG: Zielsystem, in das Daten geschrieben wurden und in das migriert werden sollte
Warum musste migriert werden?
- LSG eignet sich wegen seiner Unveränderlichkeit besser zur Speicherung von Ledger-Daten.
- Der Umzug zu LSG brachte erhebliche wiederkehrende Kosteneinsparungen.
- Der Wechsel von drei Speichersystemen zu einem einzigen vereinfachte Code und Architektur des Gulfstream-Services.
- LSG versprach kürzere Indexierungsverzögerungen und bot dank On-Premises-Betrieb in Ubers Rechenzentren geringere Netzwerklatenzen.
Risiken im Zusammenhang mit den Eigenschaften der Daten
- Die zu migrierenden Daten umfassen alle geschäftlichen Ledger-Daten von Uber seit 2017:
- Unveränderliche Datensätze: 1,2 PB komprimiert
- Sekundärindizes: 0,5 PB unkomprimiert
- Die unveränderlichen Datensätze können nicht geändert werden, während bei den Sekundärindexdaten die Flexibilität besteht, Korrekturen vorzunehmen.
Validierung
- Um sicherzustellen, dass das Backfill in jeder Hinsicht korrekt und akzeptabel ist, musste geprüft werden, ob aktueller Traffic verarbeitet werden kann und ob derzeit nicht abgerufene Daten korrekt sind.
- Validierungskriterien:
- Vollständigkeit: Wurden alle Datensätze per Backfill übertragen?
- Korrektheit: Sind alle Datensätze korrekt?
- Last: Kann LSG die aktuelle Last verarbeiten?
- Latenz: Liegt die P99-Latenz von LSG im akzeptablen Bereich?
- Verzögerung: Liegt die Erzeugungsverzögerung der Sekundärindizes im akzeptablen Bereich?
Shadow Validation
- Durch den Vergleich der Antworten vor und nach der Migration wurde sichergestellt, dass aktueller Traffic nicht durch Probleme bei der Datenmigration oder Bugs im Code beeinträchtigt wurde.
- Mit Shadow Validation wurde bestätigt, dass das Backfill mindestens zu 99,99 % vollständig und korrekt war; die Obergrenze wurde auf 99,9999 % gesetzt.
- Shadow Validation bestätigte, dass LSG produktiven Traffic verarbeiten kann, und stärkte das Vertrauen in den Datenzugriffscode.
- Shadow Validation lieferte Vertrauen in die Vollständigkeit und Korrektheit der aktuell genutzten Daten.
Offline-Validierung und inkrementelles Backfill
- Die gesamten Daten in LSG wurden mit einem Daten-Dump aus DynamoDB verglichen.
- Die Offline-Validierung überprüfte, ob das Daten-Backfill korrekt durchgeführt wurde, und deckte den gesamten Datenbestand ab.
- Die Offline-Validierung sollte zusammen mit der Shadow Validation durchgeführt werden.
Backfill-Probleme
- Jedes Backfill ist riskant. Für das Backfill wurde Ubers Apache Spark verwendet.
- Ansätze zur Problemlösung:
- Skalierbarkeit: Im kleinen Maßstab beginnen und schrittweise ausweiten.
- Inkrementelles Backfill: Daten in kleine Batches aufteilen und schrittweise übertragen.
- Geschwindigkeitssteuerung: Die Rate der Backfill-Jobs regulieren.
- Dynamische Geschwindigkeitssteuerung: Die Rate anhand des aktuellen Systemzustands anpassen.
- Not-Aus: Eine Funktion bereitstellen, mit der das Backfill bei Verdacht auf Überlast schnell gestoppt werden kann.
- Größe der Datendateien: Die Größe der Daten-Dump-Dateien angemessen halten.
- Fehlertoleranz: Probleme bei Datenqualität oder -beschädigung behandeln.
- Logging: Logs begrenzen, damit die Logging-Infrastruktur nicht überlastet wird.
Risikominderung
- Verschiedene Validierungs- und Backfill-Statistiken wurden analysiert, und das Rollout von LSG wurde konservativ vorangetrieben.
- Anfangs wurde ein Fallback genutzt, der Daten aus DynamoDB holte, falls das Backfill fehlschlug.
- Durch Prüfung der Fallback-Logs wurde sichergestellt, dass in LSG tatsächlich keine Daten fehlten.
Fazit
- Dieser Artikel behandelt den Prozess der Migration großvolumiger geschäftskritischer Ledger-Daten von einem Datenspeicher in einen anderen.
- Behandelt wurden verschiedene Aspekte wie Migrationskriterien, Validierung, Backfill-Probleme und Sicherheit.
- Die Migration wurde über zwei Jahre hinweg ohne Unterbrechungen oder Ausfälle abgeschlossen.
Meinung von GN⁺
- Bedeutung der Datenmigration: Große Datenmigrationen sind komplex und riskant, bieten aber langfristig erhebliche Vorteile durch Kostensenkung und Vereinfachung des Systems.
- Nutzen von Shadow Validation: Shadow Validation ist ein leistungsfähiges Werkzeug, um Vollständigkeit und Korrektheit von Daten zu prüfen, ohne den realen Traffic zu beeinflussen.
- Notwendigkeit der Offline-Validierung: Offline-Validierung ist ebenfalls unverzichtbar, da sie Probleme aufdecken kann, die allein durch Shadow Validation nicht sichtbar werden.
- Schrittweiser Ansatz beim Backfill: Backfill-Arbeiten in kleine Batches aufzuteilen und schrittweise auszuführen, ist wirksam, um eine Überlastung des Systems zu vermeiden.
- Not-Aus-Funktion: Eine Funktion, mit der Backfill-Arbeiten bei Problemen schnell gestoppt werden können, ist wichtig, um die Systemstabilität zu erhalten.
1 Kommentare
Hacker-News-Meinung
Zusammenfassung der Hacker-News-Kommentare
2 Milliarden Fahrten pro Quartal
DynamoDB schlecht genutzt
Google lehnt ab
SQLite auf einem einzelnen Server
LedgerStore ist nicht Open Source
Ära der maßgeschneiderten Infrastruktur
Teure proprietäre Cloud
TigerBeetle in Betracht gezogen?
DynamoDB ist teuer
Kosten für den Betrieb des Teams