- Seiring pertumbuhannya, Discord terus mengganti DB penyimpanan pesan
- Pada awalnya menggunakan satu MongoDB. Pada November 2015, ketika jumlah pesan meningkat menjadi 100 juta, keterbatasan MongoDB mulai terlihat
- Pada 2017, Discord beralih ke klaster Cassandra 12 node untuk menyimpan miliaran pesan
- Pada 2022, jumlah pesan melonjak menjadi triliunan sehingga infrastrukturnya membengkak menjadi 177 node, latensi menjadi tidak dapat diprediksi, dan biaya pemeliharaan menjadi sangat mahal
- Masalah Discord di Cassandra adalah hot partition. Bagian tertentu dari DB mengalami beban berlebih sehingga menurunkan performa seluruh aplikasi
- Karena struktur data internal Cassandra memanfaatkan LSM tree, biaya baca lebih tinggi daripada tulis, dan pembacaan serentak oleh banyak pengguna pada satu server menciptakan hotspot yang berujung pada penurunan performa
- Pekerjaan pemeliharaan seperti kompresi SSTable memengaruhi performa keseluruhan dan memperparah masalah
- Karena itu, mereka mulai merancang ulang arsitektur dengan mengintegrasikan berbagai komponen
- Memanfaatkan API monolitik, layanan data yang diimplementasikan dengan Rust, serta sistem penyimpanan berbasis ScyllaDB (DB kompatibel Cassandra yang dikembangkan dengan C++)
- Adopsi ScyllaDB menghasilkan peningkatan yang signifikan
p99 read latency turun menjadi 15ms, dibanding 40~125ms pada Cassandra
p99 write latency turun menjadi 5ms, dibanding 5~70ms pada Cassandra
- Engineer Discord menulis layanan data dengan Rust
- Menggunakan fitur fearless concurrency dari Rust untuk mengendalikan lalu lintas serentak pada hot partition
- Library dan fitur konkurensi Rust sangat cocok dengan kebutuhan Discord
- Layanan data berperan sebagai layanan perantara antara API monolitik dan klaster database
3 komentar
Kebetulan saya sedang mencari tahu tentang tech stack Discord, terima kasih!
Cara Discord menyimpan miliaran pesan
GC di Go memiliki overhead yang cukup besar, sehingga metode tuning terus ditambahkan dan memory arena pun diperkenalkan.
Mengapa ScyllaDB harus dipilih sebagai pengganti Cassandra
Bagaimana Discord meminimalkan latensi disk jaringan