जब माइक्रोसर्विसेज़ बहुत अधिक हो जाती हैं
\n\nआपने TypeScript में अपनी पहली माइक्रोसर्विस लिखी। वह काम करती है। फिर दूसरी, तीसरी, दसवीं। और अचानक आप पाते हैं कि अधिक समय बिज़नेस लॉजिक लिखने में नहीं, बल्कि माइक्रोसर्विसेज़ को एक-दूसरे से संवाद कराने में लग रहा है। टाइम-आउट, रिट्राइ, लोड बैलेंसिंग, ट्रैफ़िक एन्क्रिप्शन, मीट्रिक्स — यह सब हर सर्विस में अलग-अलग लागू करना पड़ता है।
\n\nयहाँ पर Service Mesh आता है — एक ऐसी तकनीक जो सभी संचार बुनियादी ढाँचे को कोड से अलग एक अलग लेयर में ले जाती है। और हाँ, यह TypeScript माइक्रोसर्विसेज़ के साथ बढ़िया काम करती है। इस लेख में हम वास्तविक कोड उदाहरणों के साथ व्यवहार में देखेंगे कि यह कैसे काम करता है।
\n\nसरल शब्दों में Service Mesh क्या है
\n\nकल्पना करें कि आपकी प्रत्येक TypeScript माइक्रोसर्विस एक बड़े ऑफिस में एक कर्मचारी है। Service Mesh के बिना, प्रत्येक कर्मचारी को स्वयं केबल बिछाने, फोन सेट करने और यह सुनिश्चित करने की ज़िम्मेदारी लेनी होगी कि कोई उनकी जासूसी न करे। Service Mesh के साथ, यह काम एक विशेष IT विभाग करता है, जो प्रत्येक कर्मचारी से एक 'व्यक्तिगत सहायक' (sidecar proxy) जोड़ता है।
\n\nप्रौद्योगिकी की दुनिया में, इस सहायक को Envoy Proxy कहा जाता है, और इस पूरे बुनियादी ढाँचे का प्रबंधन Istio या Linkerd जैसा ऑर्केस्ट्रेटर करता है। सबसे अच्छी बात यह है कि आपका TypeScript कोड लगभग अछूता रहता है।
\n\nService Mesh की प्रमुख क्षमताएँ
\n\n- \n
- Traffic Management — स्मार्ट रूटिंग, A/B परीक्षण, कैनरी रिलीज़ \n
- Security — सर्विसेज़ के बीच स्वचालित mTLS एन्क्रिप्शन \n
- Observability — मीट्रिक्स, लॉग, ट्रेसिंग 'बॉक्स से बाहर' \n
- Resilience — बुनियादी ढाँचे के स्तर पर रिट्राइ, circuit breaker, टाइम-आउट \n
TypeScript माइक्रोसर्विसेज़ को Service Mesh से विशेष लाभ क्यों होता है
\n\nTypeScript एक मजबूत टाइप सिस्टम वाली भाषा है, लेकिन इसका मुख्य रनटाइम वातावरण (Node.js) हमेशा I/O प्रदर्शन के लिए प्रसिद्ध नहीं है। जब आप TypeScript में माइक्रोसर्विस लिखते हैं, तो प्रत्येक अतिरिक्त HTTP अनुरोध, प्रत्येक मैन्युअल रिट्राइ कार्यान्वयन या TLS हैंडशेक — यह सब Event Loop पर अतिरिक्त भार डालता है।
\n\nService Mesh इस भार को अपने ऊपर ले लेता है। आपका TypeScript कोड साफ रहता है: बस अनुरोध प्राप्त करता है और उनका उत्तर देता है, और सारी 'पाइपलाइन' Envoy करता है। यह विशेष रूप से महत्वपूर्ण है जब आपके पास दर्जनों माइक्रोसर्विसेज़ हों — प्रत्येक अपने स्वयं के रीट्राई लॉजिक और टाइम-आउट के साथ।
\n\nव्यावहारिक उदाहरण: Service Mesh के तहत TypeScript माइक्रोसर्विस
\n\nमान लीजिए कि हमारे पास TypeScript पर दो माइक्रोसर्विसेज़ हैं: user-service और order-service। Order-service को उपयोगकर्ता के बारे में डेटा प्राप्त करना होगा। Service Mesh के बिना, हम कुछ इस तरह लिखते:
// Service Mesh के बिना — मैन्युअल HTTP प्रबंधन\nimport axios from 'axios';\n\nclass UserClient {\n private baseUrl = 'http://user-service:3000';\n private retries = 3;\n\n async getUser(id: string): Promise<User> {\n for (let i = 0; i < this.retries; i++) {\n try {\n const response = await axios.get(`${this.baseUrl}/users/${id}`, {\n timeout: 5000,\n httpsAgent: new https.Agent({ rejectUnauthorized: true })\n });\n return response.data;\n } catch (error) {\n if (i === this.retries - 1) throw error;\n await delay(1000 * Math.pow(2, i));\n }\n }\n }\n}\n\nऔर Service Mesh के साथ यह बन जाता है:
\n\n// Service Mesh के साथ — बस एक HTTP अनुरोध\nimport axios from 'axios';\n\nclass UserClient {\n async getUser(id: string): Promise<User> {\n const response = await axios.get(`http://user-service/users/${id}`);\n return response.data;\n }\n}\n\nअंतर देखा? सारी जटिलता — रिट्राइ, टाइम-आउट, एन्क्रिप्शन — चली गई है।