26 पॉइंट द्वारा xguru 2024-11-02 | 4 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
readiz 2024-11-06

ओह........ कई तरह के काम जुगाड़ू की तरह करते-करते मैं दोनों को थोड़ा-थोड़ा इस्तेमाल करने लगा, और यह वाकई बहुत उपयोगी जानकारी है।

 
johnnydev 2024-11-04

मैं हाल ही में Rust देख रहा हूँ। यह एक दिलचस्प लेख है।

 
cosine20 2024-11-04

काफ़ी अच्छी पोस्ट है। यह Rust के सही इस्तेमाल का एक अच्छा उदाहरण है।

 
regentag 2024-11-02

लगता है कि जिन क्षेत्रों को पहले C/C++ से हल किया जाता था, वहाँ अब Rust वाकई काफ़ी लोकप्रिय हो रहा है।