Pengantar
- Pada 2017, Discord membagikan cara mereka memigrasikan basis data dari MongoDB ke Cassandra untuk menyimpan pesan
- Cassandra menawarkan skalabilitas, toleransi kesalahan, dan kemudahan pemeliharaan, tetapi seiring waktu masalah performa dan beban pemeliharaan meningkat
- Pada 2022, Discord kembali memigrasikan basis datanya ke ScyllaDB
Masalah di Cassandra
- Struktur penyimpanan pesan: pesan disimpan dengan partisi berdasarkan
channel_id dan bucket
- Masalah partisi panas: ketika trafik terkonsentrasi pada kanal tertentu, latensi seluruh basis data meningkat
- Masalah pemeliharaan: penurunan performa terjadi akibat proses kompresi SSTable dan masalah garbage collection pada JVM
Perubahan arsitektur
- Adopsi ScyllaDB: basis data kompatibel Cassandra yang ditulis dalam C++, yang menyelesaikan masalah garbage collection
- Layanan data: menempatkan layanan perantara antara API dan basis data untuk mengendalikan trafik dan meningkatkan performa
- Penggunaan Rust: menggunakan Rust untuk menulis kode konkurensi yang aman dan cepat
Layanan data
- Penggabungan permintaan: ketika beberapa pengguna meminta data yang sama, hanya satu kueri dikirim ke basis data dan hasilnya dibagikan
- Routing berbasis consistent hashing: permintaan untuk kanal yang sama diarahkan ke instance layanan yang sama untuk mengurangi beban basis data
Migrasi skala besar
- Membangun klaster ScyllaDB: menyusun penyimpanan yang cepat dan tahan lama dengan SSD lokal dan RAID
- Migrasi data: memindahkan data dengan cepat menggunakan data migrator yang ditulis dalam Rust
- Validasi data otomatis: mengirim sedikit permintaan baca ke kedua basis data lalu membandingkan hasilnya untuk memastikan integritas data
Beberapa bulan kemudian
- Peningkatan performa: memberikan performa yang lebih baik dengan lebih sedikit node dibanding Cassandra
- Pengurangan latensi: performa pengambilan dan penyisipan pesan meningkat secara signifikan
- Use case produk baru: berkat peningkatan performa, fitur-fitur baru menjadi mungkin untuk diimplementasikan
# Ringkasan GN⁺
- Discord memigrasikan basis datanya ke ScyllaDB untuk mengatasi masalah performa Cassandra
- Melalui layanan data yang ditulis dalam Rust dan ScyllaDB, mereka mengelola trafik secara efektif dan meningkatkan performa
- Dalam proses migrasi data, mereka menggunakan metode yang cepat dan efisien untuk menyelesaikan perpindahan tanpa downtime
- Tulisan ini membahas tantangan dan solusi dalam migrasi basis data berskala besar, sehingga bermanfaat bagi orang yang tertarik pada operasi sistem berskala besar
1 komentar
Komentar Hacker News
Tulisan blog tersebut menyalahkan GC, tetapi sebenarnya masalahnya ada pada cara Cassandra digunakan atau cara Cassandra menangani penghapusan dalam jumlah besar
Jika menggunakan protokol chat terdistribusi, masalah seperti ini tidak akan terjadi
Pendapat tambahan dari salah satu pendiri ScyllaDB
tombstone_gc=repairLapisan layanan mengingatkan pada Varnish Cache
Menghapus pesan lama hampir mustahil
Artikelnya ditulis dengan sangat baik
Jumlah node penyimpanan pesan Discord lebih sedikit dari perkiraan
Menyimpan data dan melakukan data mining adalah dua masalah yang berbeda
Tim ScyllaDB memprioritaskan peningkatan performa dan mengimplementasikan kueri terbalik
Diskusi tentang "How Discord Stores Trillions of Messages"