प्रेरणा
- Cloudflare का global network प्रति सेकंड 6 करोड़ से अधिक HTTP requests को संभालता है
- एक नए open source Rust crate का उपयोग करके CPU उपयोग को कम किया गया और CDN की processing क्षमता को बेहतर बनाया गया
- Pingora, Cloudflare की Rust-आधारित proxy service का core है, और इसे open source के रूप में जारी किया गया है
- Pingora-origin service उपयोगकर्ता के requests को वास्तविक destination तक पहुंचाने का काम करती है
- request के Cloudflare से बाहर जाने पर internal जानकारी हटाने का काम आवश्यक होता है
- यह काम बहुत बार होता है और CPU उपयोग का 1.7% हिस्सा लेता है
बेंचमार्किंग
- Criterion Rust crate का उपयोग करके function performance को nanosecond स्तर पर मापा गया
- मूल
clear_internal_headers function को औसतन 3.65µs लगते थे
पढ़ने के काम को कम करना
- headers हटाने की दिशा को उलटकर read operations को कम किया गया
- इस बदलाव से function का execution time 3.65µs से घटकर 1.53µs हो गया
- CPU उपयोग 1.71% से घटकर 0.717% हो गया
data structure खोज
- internal headers को store और search करने के लिए hash map का उपयोग करने की कोशिश की गई
- hash map का read time key की लंबाई के अनुपात में linear होता है
- sorted set या state machine जैसे अन्य data structures भी आज़माए गए
- regular expression का उपयोग करने वाला implementation hash map से दोगुना धीमा था
trie का उपयोग
- trie एक tree data structure है जिसका उपयोग prefix search या autocomplete systems में किया जाता है
- trie ऐसे मामलों को तेज़ी से पहचान सकता है जहाँ string मौजूद नहीं होती
- मौजूदा trie implementations hash map से धीमे थे
- Cloudflare ने अपनी optimized trie implementation
trie-hard विकसित की
Trie Hard
- trie-hard, node relationships को integer के bits में store करता है और speed बढ़ाने के लिए memory का contiguous उपयोग करता है
clear_internal_headers function का execution time 0.93µs तक घटा दिया गया
- CPU उपयोग 1.71% से घटकर 0.43% हो गया
- वास्तविक production environment में trie-hard का प्रदर्शन benchmark के अनुरूप रहा
निष्कर्ष
- code के धीमे हिस्सों की पहचान करके उन्हें optimize करना महत्वपूर्ण है
- छोटी optimizations मिलकर बड़ा performance improvement ला सकती हैं
- Cloudflare का connectivity cloud network protection, internet application acceleration, DDoS attack defense जैसी क्षमताएँ प्रदान करता है
GN⁺ का सार
- Cloudflare ने Rust-आधारित नए open source crate के जरिए CPU उपयोग कम किया और CDN की processing क्षमता बेहतर बनाई
- Pingora-origin service में internal header removal को optimize करके CPU उपयोग 1.28% घटाया गया
trie-hard नाम की अपनी optimized trie implementation विकसित कर performance में बड़ा सुधार किया गया
- यह लेख code optimization और data structure selection के महत्व पर ज़ोर देता है, और दिखाता है कि छोटी optimizations भी बड़ा performance improvement ला सकती हैं
- समान कार्यक्षमता वाले प्रोजेक्ट्स में NGINX, HAProxy आदि शामिल हैं
1 टिप्पणियां
Hacker News राय
Cloudflare के internal header को store और remove करने के तरीके को लेकर कई तरह के अनुमान लगाए गए
UTF-8 characters को bitmask पर map करने के बारे में शुरुआत में यह अक्षम लगा
a-zऔर छह special characters शामिल किए जा सकते हैंA-Zऔर छह special characters शामिल किए जा सकते हैंइस पर सवाल कि Cloudflare का optimization वास्तव में कितना मूल्यवान है
data structure optimization के बारे में बहुत जानकारी नहीं, लेकिन hash table को इतनी जल्दी नज़रअंदाज़ करना हैरान करता है
fancy data structure का उपयोग करके हटाए जाने वाले items को व्यवस्थित किया गया और उसके आधार पर header map से हटाया गया
remove_headercall से जुड़ा code link दिया गयाtrie का उपयोग करने वाली blog post आखिरकार आ गई
यह जानने की जिज्ञासा कि क्या किसी ने छोटा Bloom Filter आज़माया था
static item set को match करने के मामले में यह जिज्ञासा कि क्या perfect hash table आज़माया गया था
optimization दिलचस्प है
यह जिज्ञासा कि regex crate ने बेहतर काम क्यों नहीं किया