Cloudflare ने nginx हटाकर Rust में HTTP Proxy (Pingora) बनाया और इस्तेमाल किया
(blog.cloudflare.com)nginx की कुछ सीमाएँ थीं
- हर request के लिए केवल एक single worker इस्तेमाल होता था, इसलिए CPU core उपयोग में असंतुलन होता था
- हर worker के लिए connection pool अलग होने की वजह से TCP और TLS connection reuse rate खराब था -> TTFB बढ़ जाता था
- nginx चलाने के लिए ज़रूरी कई features वे खुद implement कर रहे थे, लेकिन C में डिज़ाइन किया गया nginx memory-safe नहीं था, इसलिए अनुभवी engineers से भी गलतियाँ हो जाती थीं
Pingora
- Cloudflare को RFC standard के बाहर के बहुत से requests भी मिलते हैं, लेकिन third-party library (
hyper) RFC को सख्ती से follow करती है, इसलिए उसे extend करने में अतिरिक्त मेहनत लगती, इस वजह से उन्होंने इसे खुद बनाया - Rust को इसलिए चुना गया क्योंकि यह performance गिराए बिना C के कामों को memory-safe तरीके से replace कर सकता है
- connection pool को आसानी से share करने के लिए work-stealing scheduling system अपनाया गया, जिससे reuse rate बढ़ा. पहले की तुलना में अब प्रति सेकंड केवल 1/3 स्तर के connections बनते हैं
- पहले की तुलना में CPU 70% और memory 67% कम इस्तेमाल होती है
- आगे चलकर इसे open source के रूप में जारी करने की योजना है
5 टिप्पणियां
CPU 70% और मेमोरी 67% वाला हिस्सा वाकई चौंकाने वाला है..
वाह, nginx भी मैंने बहुत अच्छी तरह इस्तेमाल किया है, ये अगर open source के रूप में आए तो मैं इसे तुरंत आज़माना चाहूँगा।
Rust सीखने के बाद भी नौकरी के मौके नहीं मिलते।
Rust है, यह मुझे पसंद आया।
कम से कम सिस्टम प्रोग्रामिंग में तो Rust धीरे-धीरे बेजोड़ होता जा रहा है..