Discord ने WebSocket ट्रैफ़िक को 40% कैसे घटाया
(discord.com)- जब कोई 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 में
zstdtest के नतीजे बहुत सकारात्मक नहीं थे, लेकिन यह माना गया कि इसे फिर से आज़माना चाहिए
Zstd स्ट्रीमिंग
zlibstreaming compression का उपयोग कर रहा था, जबकिzstdनहीं कर रहा था- छोटे payloads पर
zstd,zlibसे खराब प्रदर्शन कर रहा था - Elixir के लिए
zstdbindingezstdको fork करके उसमें streaming जोड़ी गई zstdstreaming पर स्विच करने के बाद, compression ratio और speed दोनों मेंzlibstreaming की तुलना में बड़ा सुधार हुआ
ऑप्टिमाइज़ेशन प्रयास
ट्यूनिंग
chainlog,hashlog,windowlogजैसेzstdcompression parameters को adjust करके memory usage और compression time के बीच संतुलन बनाया गया
Zstd dictionary
zstdके dictionary feature का उपयोग करके compression ratio बढ़ाने की कोशिश की गई, लेकिन असर सीमित रहा- यह तय किया गया कि dictionary उपयोग की जटिलता उसके फ़ायदे से अधिक है, इसलिए इसे अपनाया नहीं गया
Buffer upgrade
- off-peak समय की अतिरिक्त memory का उपयोग करके
zstdbuffers को upgrade करने के लिए एक feedback loop लागू किया गया - upgrade rate उम्मीद से कम था, और BEAM allocator settings को adjust करने जैसे सुधारों की कोशिश की गई, लेकिन जटिलता के मुकाबले लाभ बड़ा नहीं था इसलिए इसे वापस ले लिया गया
इम्प्लीमेंटेशन और रिलीज़
zstdसे bandwidth में सुधार इतना बड़ा था कि इसे सिर्फ mobile ही नहीं बल्कि desktop पर भी लागू करने का निर्णय लिया गया- Java, Objective-C, Rust आदि हर platform के लिए उपयुक्त
zstdbindings ढूँढे गए और कई महीनों में इसे चरणबद्ध तरीके से release किया गया
अतिरिक्त उपलब्धि: Passive Sessions V2
zstdलागू करने की प्रक्रिया में यह पता चला किpassive_update_v1message 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 ने यह बेहतर किया था