- Non-Rust सर्वरों (JavaScript, Python, Java आदि) में धीरे-धीरे Rust जोड़ने की रणनीति का परिचय
- लक्ष्य है CPU bottleneck के कारण परफ़ॉर्मेंस आवश्यकताओं को पूरा नहीं कर पाने वाले hot functions की पहचान करना और उन्हें Rust में दोबारा लागू करना
- रणनीति को Tier (Rust अपनाने के स्तर) के आधार पर बाँटा गया है; Tier 0 में Rust का उपयोग नहीं होता, और अंतिम Tier में पूरे सर्वर को Rust में फिर से लिखा जाता है
रणनीति
Tier 0: Rust का उपयोग नहीं
- Node.js सर्वर में QR code generation endpoint लागू करना
- आधारभूत परफ़ॉर्मेंस: प्रति सेकंड 1464 requests, औसत latency 68ms, p99 latency 96ms, औसत response size 1506 bytes, memory 1353MB
Tier 1: Rust CLI टूल
- QR code generation function को Rust में फिर से लिखकर CLI टूल के रूप में compile करना
- host सर्वर से CLI टूल को call करना
- baseline की तुलना में परफ़ॉर्मेंस: प्रति सेकंड requests 1.76 गुना बढ़ीं, औसत latency 0.57 गुना घटी, औसत response size 0.52 गुना घटी, memory 0.92 गुना घटी
Tier 2: Rust Wasm मॉड्यूल
- Rust function को Wasm मॉड्यूल में compile करना और host सर्वर में Wasm runtime का उपयोग कर load तथा run करना
- Node.js सर्वर में
wasm-bindgen का उपयोग
- baseline की तुलना में परफ़ॉर्मेंस: प्रति सेकंड requests 2.03 गुना बढ़ीं, औसत latency 0.50 गुना घटी
- Wasm bindings को मैन्युअली लिखने का तरीका समझाया गया है (दूसरी भाषाओं के उपयोगकर्ताओं के लिए)
Tier 3: Rust native functions
- Rust में function लिखना, native code में compile करना, और host runtime में load व run करना
- Node.js के लिए
napi-rs का उपयोग
- baseline की तुलना में परफ़ॉर्मेंस: प्रति सेकंड requests 3.75 गुना बढ़ीं, औसत latency 0.26 गुना घटी
Tier 4: Rust में पुनर्लेखन
- पूरे host सर्वर को Rust में फिर से लिखना
- व्यवहार में host सर्वर के केवल कुछ हिस्सों को फिर से लिखना अधिक यथार्थवादी है
- baseline की तुलना में परफ़ॉर्मेंस: प्रति सेकंड requests 4.93 गुना बढ़ीं, औसत latency 0.21 गुना घटी, memory 0.01 गुना रह गई (13MB उपयोग)
निष्कर्ष
- सभी रणनीतियाँ अच्छी हैं, लेकिन Tier 3 सबसे प्रभावी है
- यदि off-the-shelf binding generator library का उपयोग किया जा सके, तो Rust में native functions लिखना आसान होता है और परफ़ॉर्मेंस पर बड़ा असर पड़ता है
4 टिप्पणियां
ओह........ कई तरह के काम जुगाड़ू की तरह करते-करते मैं दोनों को थोड़ा-थोड़ा इस्तेमाल करने लगा, और यह वाकई बहुत उपयोगी जानकारी है।
मैं हाल ही में Rust देख रहा हूँ। यह एक दिलचस्प लेख है।
काफ़ी अच्छी पोस्ट है। यह Rust के सही इस्तेमाल का एक अच्छा उदाहरण है।
लगता है कि जिन क्षेत्रों को पहले C/C++ से हल किया जाता था, वहाँ अब Rust वाकई काफ़ी लोकप्रिय हो रहा है।