23 पॉइंट द्वारा GN⁺ 2024-09-23 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • जब कोई client Discord से connect करता है, तो उसे "Gateway" नाम की service के ज़रिए क्या हो रहा है इसकी real-time updates मिलती हैं
  • 2017 के अंत से, clients के Gateway connections को zlib से compress किया गया, जिससे messages का आकार 2 गुना से 10 गुना तक छोटा हो गया
  • Zstandard (zstd) zlib की तुलना में बेहतर compression ratio, कम compression time देता है, और dictionary feature को support करता है जिससे bandwidth को और कम किया जा सकता है
  • 2019 में zstd test के नतीजे बहुत सकारात्मक नहीं थे, लेकिन यह माना गया कि इसे फिर से आज़माना चाहिए

Zstd स्ट्रीमिंग

  • zlib streaming compression का उपयोग कर रहा था, जबकि zstd नहीं कर रहा था
  • छोटे payloads पर zstd, zlib से खराब प्रदर्शन कर रहा था
  • Elixir के लिए zstd binding ezstd को fork करके उसमें streaming जोड़ी गई
  • zstd streaming पर स्विच करने के बाद, compression ratio और speed दोनों में zlib streaming की तुलना में बड़ा सुधार हुआ

ऑप्टिमाइज़ेशन प्रयास

ट्यूनिंग

  • chainlog, hashlog, windowlog जैसे zstd compression parameters को adjust करके memory usage और compression time के बीच संतुलन बनाया गया

Zstd dictionary

  • zstd के dictionary feature का उपयोग करके compression ratio बढ़ाने की कोशिश की गई, लेकिन असर सीमित रहा
  • यह तय किया गया कि dictionary उपयोग की जटिलता उसके फ़ायदे से अधिक है, इसलिए इसे अपनाया नहीं गया

Buffer upgrade

  • off-peak समय की अतिरिक्त memory का उपयोग करके zstd buffers को upgrade करने के लिए एक feedback loop लागू किया गया
  • upgrade rate उम्मीद से कम था, और BEAM allocator settings को adjust करने जैसे सुधारों की कोशिश की गई, लेकिन जटिलता के मुकाबले लाभ बड़ा नहीं था इसलिए इसे वापस ले लिया गया

इम्प्लीमेंटेशन और रिलीज़

  • zstd से bandwidth में सुधार इतना बड़ा था कि इसे सिर्फ mobile ही नहीं बल्कि desktop पर भी लागू करने का निर्णय लिया गया
  • Java, Objective-C, Rust आदि हर platform के लिए उपयुक्त zstd bindings ढूँढे गए और कई महीनों में इसे चरणबद्ध तरीके से release किया गया

अतिरिक्त उपलब्धि: Passive Sessions V2

  • zstd लागू करने की प्रक्रिया में यह पता चला कि passive_update_v1 message Gateway bandwidth का 30% से अधिक हिस्सा ले रहा था
  • सिर्फ बदले हुए channel/member भेजने वाले passive_update_v2 को लाकर उस bandwidth हिस्से को 35% से घटाकर 5% कर दिया गया

बड़ा बचत प्रभाव

  • Passive Sessions v2 और zstd के संयोजन से clients द्वारा उपयोग की जाने वाली Gateway bandwidth लगभग 40% कम हो गई
  • अनपेक्षित optimization opportunity का मिलना यह दिखाता है कि सही instrumentation और graphs को आलोचनात्मक नज़र से analyze करना कितना महत्वपूर्ण है

1 टिप्पणियां

 
GN⁺ 2024-09-23
Hacker News राय
  • Discord के start होने में 20-30 सेकंड लगने की समस्या को लेकर शिकायत है

    • $5000 PC पर भी धीमी startup speed पर सवाल उठाया गया
    • इसे ऐसे बताया गया मानो client को हर बार single core के लिए फिर से compile किया जाता हो
  • लगता है कि ध्यान compression ratio और network bandwidth कम करने पर था

    • CPU time या वास्तविक users के लिए मापे जा सकने वाले improvements का कोई ज़िक्र नहीं है
    • कंपनी में इसी तरह की कोशिश करने पर compression/decompression overhead की वजह से performance और खराब हो गई थी
  • JSON और Erlang ETF का इस्तेमाल करने वाला dictionary-based compression approach दिलचस्प है

    • Cap'n Proto या Protobufs जैसे schema-based systems पर जाने के बजाय यह तरीका चुना गया
    • Zstandard और LZ4 के benchmarks में रुचि है
    • drone के streaming overlay/HUD data के मामले में LZ4 इस्तेमाल किया गया था, और Zstd dictionary tool से बनी dictionary के साथ ऊंची speed पर similar compression हासिल किया गया
  • यह चौंकाने वाला है कि सामान्य bootstrapping response (READY) 2MB से ज़्यादा है

  • PASSIVE_UPDATE_V1 dispatch की वास्तविक सामग्री का ज़िक्र

    • जब सिर्फ एक element बदला था, तब भी सभी channels, members या voice members भेजे गए
    • zstd experiment के दौरान मिले metrics ने चौंकाने वाला behavior दिखाया
    • शुरुआत से metrics analysis न करने की वजह पर सवाल
    • शुरुआत से delta न भेजने की वजह पर सवाल
  • compression oracle attacks (BREACH) जैसे हमलों के खिलाफ सुरक्षा का कोई ज़िक्र नहीं है

    • लगता है Discord ने compression rollout पर काफी मेहनत की होगी, इसलिए संभव है कि इस पर विचार किया गया हो
    • राय है कि इस पर और ठोस जानकारी लिखी जानी चाहिए थी
  • Discord tab खोलते ही कंप्यूटर धीमा हो जाने की समस्या है

  • यह बहुत अच्छा लगा कि किन चीज़ों को आज़माया गया लेकिन वे काम नहीं कर पाईं, यह भी बताया गया

    • असफल कोशिशों को समझाने वाले लेख अब कम होते जा रहे हैं, लेकिन वे बहुत दिलचस्प और मददगार होते हैं
  • राय कि mIRC ने यह बेहतर किया था