23 puan yazan GN⁺ 2024-09-23 | 1 yorum | WhatsApp'ta paylaş
  • İ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

 
GN⁺ 2024-09-23
Hacker News görüşleri
  • Discord’un açılmasının 20-30 saniye sürmesi sorununa dair şikayetler var

    • 5000 dolarlık bir PC’de bile neden bu kadar yavaş açıldığı sorgulanıyor
    • Her seferinde istemciyi tek çekirdek için yeniden derliyormuş gibi olduğuna dair bir benzetme yapılıyor
  • Görünüşe göre sıkıştırma oranına ve ağ bant genişliğini azaltmaya odaklanmışlar

    • CPU süresi ya da gerçek kullanıcılar için ölçülebilir iyileştirmelere dair bir ifade yok
    • Şirkette benzer çalışmalar yapıldığında, sıkıştırma/açma ek yükü nedeniyle performansın daha da kötüleştiği belirtiliyor
  • JSON ve Erlang ETF kullanan sözlük tabanlı sıkıştırma yaklaşımı ilginç bulunuyor

    • Cap'n Proto veya Protobufs gibi şema tabanlı sistemlere geçmek yerine bu yaklaşımın seçilmiş olması dikkat çekiyor
    • Zstandard ve LZ4 karşılaştırmalarına ilgi var
    • Drone yayın overlay/HUD verileri için LZ4 kullanıldığı, Zstd sözlük aracıyla oluşturulan bir sözlük sayesinde benzer sıkıştırmanın yüksek hızda elde edildiği söyleniyor
  • 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

    • Yalnızca tek bir öğe değişse bile tüm kanalların, üyelerin veya ses üyelerinin gönderildiği belirtiliyor
    • zstd deneyi sırasında ortaya çıkan metriklerin şaşırtıcı bir davranış gösterdiği söyleniyor
    • Neden en baştan metrik analizi yapılmadığı sorgulanıyor
    • Neden en baştan delta gönderilmediği soruluyor
  • Sıkıştırma oracle saldırıları (BREACH) gibi saldırılara karşı güvenliğe dair bir ifade yok

    • Discord’un sıkıştırmayı devreye alma sürecine çok emek verdiği düşünüldüğünde bunun hesaba katıldığına inanılıyor
    • Daha somut ayrıntılar yazılmış olmasının iyi olacağı söyleniyor
  • 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

    • Başarısız denemeleri anlatan yazılar giderek azalıyor, ancak bunun çok ilgi çekici ve faydalı olduğu söyleniyor
  • mIRC’in bunu daha iyi yaptığı yönünde bir görüş var