Discord, WebSocket trafiğini %40 nasıl azalttı
(discord.com)- İ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ı
zlibkullanı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
zstdtest sonuçları çok olumlu değildi, ancak yeniden denemeye değer olduğuna karar verildi
zstd streaming
zlibstreaming sıkıştırma kullanırken,zstdkullanmıyordu- Küçük payload'larda
zstd,zlib'den daha kötü performans gösteriyordu - Elixir için
zstdbinding'i olanezstdfork edilerek streaming desteği eklendi zstdstreaming'e geçilince,zlibstreaming'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,windowloggibizstdsı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
zstdbuffer'ı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
zstdbinding'leri bulunarak birkaç ay boyunca kademeli biçimde dağıtıma çıkarıldı
Ek kazanım: Passive Sessions V2
zstduygulama sürecinde,passive_update_v1mesajları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_v2devreye 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