- İstemci Discord'a bağlandığında, "gateway" adı verilen bir servis üzerinden neler olup bittiğine dair gerçek zamanlı güncellemeler alır
- 2017 sonlarından beri istemcinin gateway bağlantıları
zlib kullanılarak sıkıştırılıyor ve bu sayede mesaj boyutu 2 ila 10 kat küçülüyor
- Zstandard(
zstd), zlib'e kıyasla daha yüksek sıkıştırma oranı, daha kısa sıkıştırma süresi sunuyor ve sözlük özelliğini destekleyerek bant genişliğini ek olarak azaltabiliyor
- 2019'daki
zstd test sonuçları çok olumlu değildi, ancak yeniden denemeye değer olduğuna karar verildi
zstd streaming
zlib streaming sıkıştırma kullanırken, zstd kullanmıyordu
- Küçük payload'larda
zstd, zlib'den daha kötü performans gösteriyordu
- Elixir için
zstd binding'i olan ezstd fork edilerek streaming desteği eklendi
zstd streaming'e geçilince, zlib streaming'e göre hem sıkıştırma oranında hem hızda büyük iyileşme sağlandı
Optimizasyon çalışmaları
Tuning
chainlog, hashlog, windowlog gibi zstd sıkıştırma parametreleri ayarlanarak bellek kullanımı ile sıkıştırma süresi arasında denge kuruldu
zstd sözlüğü
zstd'nin sözlük özelliği kullanılarak sıkıştırma oranı artırılmaya çalışıldı, ancak etkisi sınırlı kaldı
- Sözlük kullanımının getirdiği karmaşıklığın faydasından büyük olduğuna karar verilerek uygulanmadı
Buffer yükseltmesi
- Yoğun olmayan saatlerdeki boş belleği kullanarak
zstd buffer'ını yükselten bir feedback loop uygulandı
- Yükseltme oranı beklenenden düşük kaldı; BEAM allocator ayarlarını değiştirmek gibi iyileştirme denemeleri yapıldı, ancak karmaşıklığa kıyasla fayda yeterli görülmediği için geri çekildi
Uygulama ve dağıtım
zstd'nin bant genişliği iyileştirmesi büyük olduğu için bunun yalnızca mobilde değil masaüstünde de uygulanmasına karar verildi
- Java, Objective-C, Rust gibi her platforma uygun
zstd binding'leri bulunarak birkaç ay boyunca kademeli biçimde dağıtıma çıkarıldı
Ek kazanım: Passive Sessions V2
zstd uygulama sürecinde, passive_update_v1 mesajlarının gateway bant genişliğinin %30'undan fazlasını oluşturduğu fark edildi
- Yalnızca değişen kanal ve üyeleri gönderen
passive_update_v2 devreye alınarak bu bant genişliği payı %35'ten %5'e düşürüldü
Büyük tasarruf
- Passive Sessions v2 ile
zstd'nin birleşimi sayesinde istemcilerin kullandığı gateway bant genişliği neredeyse %40 azaltıldı
- İstenmeden bulunan bu optimizasyon fırsatı, doğru ölçümleme ve grafiklere eleştirel gözle bakmanın önemini gösteriyor
1 yorum
Hacker News görüşleri
Discord’un açılmasının 20-30 saniye sürmesi sorununa dair şikayetler var
Görünüşe göre sıkıştırma oranına ve ağ bant genişliğini azaltmaya odaklanmışlar
JSON ve Erlang ETF kullanan sözlük tabanlı sıkıştırma yaklaşımı ilginç bulunuyor
Tipik önyükleme yanıtının (READY) 2MB’tan büyük olması şaşırtıcı bulunuyor
PASSIVE_UPDATE_V1 dispatch’inin gerçek içeriğine değiniliyor
Sıkıştırma oracle saldırıları (BREACH) gibi saldırılara karşı güvenliğe dair bir ifade yok
Discord sekmesi açıldığında bilgisayarı yavaşlatma sorunu olduğundan bahsediliyor
Denenip de işe yaramayan şeylerin de anlatılmış olması çok olumlu bulunuyor
mIRC’in bunu daha iyi yaptığı yönünde bir görüş var