2 puan yazan GN⁺ 2024-09-29 | 1 yorum | WhatsApp'ta paylaş

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

 
GN⁺ 2024-09-29
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

    • "API üzerinden milyonlarca mesaj silindiğinde, Cassandra milyonlarca tombstone'u taramak zorunda kaldı"
    • GC ayarlarından bahsediliyor, ancak gerçekte Cassandra ve JVM'in eski sürümleri kullanılıyordu
  • Dağıtık bir sohbet protokolü kullanılsaydı bu tür sorunlar olmazdı

    • IRC, Matrix, XMPP gibi açık spesifikasyonlar ve birden fazla uygulama var
    • Discord'un pazara nasıl hakim olduğunu anlamak zor
  • ScyllaDB kurucu ortağından ek yorumlar

    • Discord, Cassandra ile repair işlemini tamamlayamıyordu, ancak Scylla'da bu mümkün
    • Scylla, Cassandra ile birçok ortak noktaya sahip, ancak kendine özgü CPU ve IO zamanlayıcılarıyla sorgulara öncelik veriyor
    • Scylla'nın yeni tombstone_gc=repair modu var
    • Scylla'nın yeni Raft ve tablet mimarisi yakın zamanda kullanıma sunuldu
  • Servis katmanı Varnish Cache'i hatırlatıyor

    • Önbelleklemeden bahsedilmemiş, ancak Varnish'in "grace mode"una benziyor
    • Tutarlı karma kullanımının tekrar tekrar karşımıza çıkmasını görmek güzel
  • Eski mesajları silmek neredeyse imkansız

    • Bu bir gizlilik kabusu ve AB'nin neden devreye girmediğini merak ediyorum
  • Çok iyi yazılmış bir makale

    • Cassandra'dan Scylla'ya geçiş çözümün bir parçasıydı
  • Discord'un mesaj depolama düğümü sayısı beklenenden az

    • Daha karmaşık bir mimari bekliyordum, ama gerçekte sadece 200 düğüm kullanılıyor
    • Modern bulut mimarileri aşırı tasarlanmış gibi görünüyor
  • Veriyi depolamak ile veri madenciliği yapmak farklı problemler

  • ScyllaDB ekibi performans artışını önceliklendirdi ve ters yönlü sorguları hayata geçirdi

    • ScyllaDB'yi kullanmadan önce ne kadar ödeme yaptıklarını merak ediyorum
  • "How Discord Stores Trillions of Messages" üzerine tartışma

    • 2023 Mart'ında 10 yorum vardı