26 poin oleh xguru 2023-07-04 | 3 komentar | Bagikan ke WhatsApp
  • 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

 
pmc7777 2023-07-05

Kebetulan saya sedang mencari tahu tentang tech stack Discord, terima kasih!

 
secret3056 2023-07-04

Cara Discord menyimpan miliaran pesan

GC di Go memiliki overhead yang cukup besar, sehingga metode tuning terus ditambahkan dan memory arena pun diperkenalkan.