- जब कोई 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 टिप्पणियां
Hacker News राय
Discord के start होने में 20-30 सेकंड लगने की समस्या को लेकर शिकायत है
लगता है कि ध्यान compression ratio और network bandwidth कम करने पर था
JSON और Erlang ETF का इस्तेमाल करने वाला dictionary-based compression approach दिलचस्प है
यह चौंकाने वाला है कि सामान्य bootstrapping response (READY) 2MB से ज़्यादा है
PASSIVE_UPDATE_V1 dispatch की वास्तविक सामग्री का ज़िक्र
compression oracle attacks (BREACH) जैसे हमलों के खिलाफ सुरक्षा का कोई ज़िक्र नहीं है
Discord tab खोलते ही कंप्यूटर धीमा हो जाने की समस्या है
यह बहुत अच्छा लगा कि किन चीज़ों को आज़माया गया लेकिन वे काम नहीं कर पाईं, यह भी बताया गया
राय कि mIRC ने यह बेहतर किया था