- Minggu lalu, Uber membahas LedgerStore (LSG), database bergaya ledger tambahan milik mereka.
- Minggu ini, pembahasan berfokus pada bagaimana Uber memigrasikan data ledger yang penting bagi bisnis mereka ke LSG.
- Dibahas bagaimana mereka memindahkan lebih dari 1 triliun entri (beberapa petabyte data) secara transparan tanpa gangguan, serta pelajaran yang didapat selama proses tersebut.
Sejarah
- Gulfstream adalah platform pembayaran Uber yang diluncurkan pada 2017 dengan menggunakan DynamoDB.
- Pada skala Uber, DynamoDB menjadi mahal, sehingga mereka mulai menyimpan hanya 12 minggu data (hot data) di DynamoDB dan menyimpan data lama (cold data) di TerraBlob, blobstore milik Uber.
- Sebagai solusi jangka panjang, mereka ingin menggunakan LSG. LSG dirancang khusus untuk menyimpan data bergaya pembayaran.
- Fitur utama LSG:
- Immutability yang dapat diverifikasi (menggunakan tanda tangan kriptografis untuk memastikan catatan tidak diubah)
- Penyimpanan bertingkat untuk pengelolaan biaya (hot data disimpan di tempat yang cocok untuk melayani request, cold data disimpan di tempat yang dioptimalkan untuk penyimpanan)
- Peningkatan latensi secondary index yang pada akhirnya konsisten
- Hingga 2021, Gulfstream menyimpan data menggunakan kombinasi DynamoDB, TerraBlob, dan LSG.
- DynamoDB: data 12 minggu terakhir
- TerraBlob: cold data
- LSG: tempat pencatatan data dan target migrasi
Mengapa perlu migrasi?
- LSG lebih cocok untuk menyimpan data bergaya ledger karena sifatnya yang immutable.
- Dengan berpindah ke LSG, penghematan biaya berulang yang diperoleh cukup besar.
- Beralih dari tiga storage ke satu storage dapat menyederhanakan kode dan desain layanan Gulfstream.
- LSG menjanjikan latensi indexing yang lebih singkat, dan karena berjalan on-premise di dalam data center Uber, ia juga memberikan latensi jaringan yang lebih cepat.
Risiko terkait karakteristik data
- Data yang dimigrasikan adalah seluruh data ledger bisnis Uber sejak 2017:
- Catatan immutable: ukuran terkompresi 1.2 PB
- Secondary index: ukuran tidak terkompresi 0.5 PB
- Catatan immutable tidak bisa dimodifikasi, sementara data secondary index memiliki fleksibilitas untuk diubah guna memperbaiki masalah.
Validasi
- Untuk memastikan backfill benar dan dapat diterima dalam segala aspek, perlu dipastikan bahwa sistem dapat menangani traffic saat ini dan bahwa data yang saat ini tidak diakses juga benar.
- Kriteria validasi:
- Kelengkapan: apakah semua catatan sudah di-backfill
- Akurasi: apakah semua catatan akurat
- Beban: apakah LSG dapat menangani beban saat ini
- Latensi: apakah latensi P99 LSG berada dalam rentang yang dapat diterima
- Delay: apakah delay pembuatan secondary index berada dalam rentang yang dapat diterima
Shadow validation
- Respons sebelum dan sesudah migrasi dibandingkan untuk memastikan traffic saat ini tidak terganggu oleh masalah migrasi data atau bug kode.
- Melalui shadow validation, mereka memastikan backfill setidaknya 99.99% lengkap dan akurat, dengan batas atas ditetapkan pada 99.9999%.
- Shadow validation memverifikasi bahwa LSG dapat menangani traffic produksi dan memberi keyakinan pada kode akses data.
- Shadow validation memberi keyakinan terhadap kelengkapan dan akurasi data yang sedang diakses saat ini.
Validasi offline dan incremental backfill
- Seluruh data di LSG dibandingkan dengan dump data dari DynamoDB.
- Validasi offline memastikan bahwa backfill data telah dilakukan dengan benar dan mencakup keseluruhan data.
- Validasi offline harus dilakukan bersama shadow validation.
Masalah backfill
- Semua backfill memiliki risiko. Uber menjalankan backfill menggunakan Apache Spark.
- Cara mengatasi masalah:
- Skalabilitas: mulai dari skala kecil lalu diperluas secara bertahap.
- Incremental backfill: data dibagi ke dalam batch kecil untuk di-backfill.
- Kontrol kecepatan: laju pekerjaan backfill diatur.
- Kontrol kecepatan dinamis: kecepatan diatur dengan memantau kondisi sistem saat ini.
- Emergency stop: menyediakan kemampuan untuk menghentikan backfill dengan cepat jika dicurigai terjadi overload.
- Ukuran file data: menjaga ukuran file dump data tetap sesuai.
- Fault tolerance: menangani masalah kualitas/kerusakan data.
- Logging: membatasi log agar tidak membebani infrastruktur logging.
Mitigasi risiko
- Mereka menganalisis berbagai data statistik validasi dan backfill, lalu melakukan rollout LSG secara konservatif.
- Pada tahap awal, mereka menggunakan fallback untuk mengambil data dari DynamoDB jika backfill gagal.
- Dengan memeriksa log fallback, mereka memastikan bahwa data benar-benar tidak hilang di LSG.
Kesimpulan
- Artikel ini membahas proses migrasi data ledger yang sangat penting bagi bisnis dalam skala besar dari satu data store ke data store lainnya.
- Berbagai aspek dibahas, termasuk kriteria migrasi, validasi, masalah backfill, dan keamanan.
- Migrasi berhasil diselesaikan selama 2 tahun tanpa gangguan atau outage.
Opini GN⁺
- Pentingnya migrasi data: Migrasi data skala besar itu kompleks dan berisiko, tetapi dalam jangka panjang memberikan manfaat besar melalui penghematan biaya dan penyederhanaan sistem.
- Kegunaan shadow validation: Shadow validation adalah alat yang kuat untuk memverifikasi kelengkapan dan akurasi data tanpa memengaruhi traffic nyata.
- Pentingnya validasi offline: Validasi offline juga penting karena dapat menemukan masalah yang tidak terlihat hanya dengan shadow validation.
- Pendekatan bertahap untuk backfill: Membagi pekerjaan backfill ke dalam batch kecil dan melakukannya secara bertahap efektif untuk mencegah sistem kelebihan beban.
- Fitur emergency stop: Kemampuan untuk menghentikan pekerjaan backfill dengan cepat saat terjadi masalah penting untuk menjaga stabilitas sistem.
1 komentar
Komentar Hacker News
Ringkasan kumpulan komentar Hacker News
2 billion rides per quarter
Using DynamoDB poorly
Google rejects
SQLite on a single server
LedgerStore not open source
Era of custom infrastructure
Expensive proprietary cloud
Considered TigerBeetle?
DynamoDB is expensive
Cost of running the team