Giriş
- 2017'de Discord, mesajları saklama yöntemini paylaşarak veritabanını MongoDB'den Cassandra'ya taşıdığını anlattı
- Cassandra ölçeklenebilirlik, hata toleransı ve bakım kolaylığı sağladı; ancak zamanla performans sorunları ve bakım yükü arttı
- 2022'de Discord, veritabanını yeniden ScyllaDB'ye taşıdı
Cassandra'daki sorunlar
- Mesaj saklama yapısı: Mesajlar
channel_id ve bucket ile bölümlenerek saklanıyordu
- Hot partition sorunu: Belirli kanallarda trafik yoğunlaştığında tüm veritabanının gecikme süresi artıyordu
- Bakım sorunları: SSTable sıkıştırma işlemleri ve JVM'in garbage collection sorunları nedeniyle performans düşüşü yaşanıyordu
Mimari değişiklikler
- ScyllaDB'nin benimsenmesi: C++ ile yazılmış, Cassandra uyumlu bir veritabanı olarak garbage collection sorunlarını çözdü
- Veri servisi: API ile veritabanı arasına bir ara servis koyularak trafik düzenlendi ve performans iyileştirildi
- Rust kullanımı: Güvenli ve hızlı eşzamanlılık kodu yazmak için Rust kullanıldı
Veri servisi
- İstek birleştirme: Birden fazla kullanıcı aynı veriyi istediğinde veritabanına yalnızca bir kez sorgu gönderilip sonuç paylaşılıyordu
- Tutarlı hash tabanlı yönlendirme: Aynı kanalın istekleri aynı servis örneğine yönlendirilerek veritabanı yükü azaltılıyordu
Büyük ölçekli geçiş
- ScyllaDB kümesi kurulumu: Hızlı ve dayanıklı depolama için yerel SSD ve RAID kullanıldı
- Veri geçişi: Rust ile yazılmış bir veri taşıyıcı kullanılarak veriler hızlıca aktarıldı
- Otomatik veri doğrulama: Her iki veritabanına da az miktarda okuma isteği gönderilip sonuçlar karşılaştırılarak veri bütünlüğü doğrulandı
Birkaç ay sonra
- Performans artışı: Cassandra'ya kıyasla daha az düğümle daha iyi performans sağlandı
- Gecikme süresinde azalma: Mesaj sorgulama ve ekleme performansı büyük ölçüde iyileşti
- Yeni ürün kullanım senaryoları: Performans iyileştirmeleri sayesinde yeni özellikler hayata geçirilebildi
# GN⁺ özeti
- Discord, Cassandra'daki performans sorunlarını çözmek için veritabanını ScyllaDB'ye taşıdı
- Rust ile yazılmış veri servisi ve ScyllaDB sayesinde trafik etkili biçimde yönetilip performans artırıldı
- Veri geçişi sürecinde hızlı ve verimli yöntemler kullanılarak kesinti olmadan geçiş tamamlandı
- Yazı, büyük ölçekli veritabanı geçişlerinin zorluklarını ve çözüm sürecini ele aldığı için büyük sistemlerin işletilmesiyle ilgilenenler için faydalı
1 yorum
Hacker News görüşleri
Blog yazısı GC'yi suçluyor, ancak aslında sorun Cassandra'nın kullanım biçiminde ya da Cassandra'nın büyük ölçekli silmeleri ele alış şeklinde
Dağıtık bir sohbet protokolü kullanılsaydı bu tür sorunlar olmazdı
ScyllaDB kurucu ortağından ek yorumlar
tombstone_gc=repairmodu varServis katmanı Varnish Cache'i hatırlatıyor
Eski mesajları silmek neredeyse imkansız
Çok iyi yazılmış bir makale
Discord'un mesaj depolama düğümü sayısı beklenenden az
Veriyi depolamak ile veri madenciliği yapmak farklı problemler
ScyllaDB ekibi performans artışını önceliklendirdi ve ters yönlü sorguları hayata geçirdi
"How Discord Stores Trillions of Messages" üzerine tartışma