Node.js के साथ JavaScript में माइक्रोसर्विसेज: आर्किटेक्चर और अभ्यास
माइक्रोसर्विस आर्किटेक्चर स्केलेबल और दोष-सहिष्णु वेब एप्लिकेशन बनाने के लिए डी-फैक्टो मानक बन गया है। JavaScript, विशेष रूप से Node.js रनटाइम, अपने एसिंक्रोनस मॉडल, समृद्ध इकोसिस्टम और उच्च विकास गति के कारण इस प्रतिमान के लिए आदर्श है। इस लेख में, हम JavaScript में माइक्रोसर्विसेज को डिजाइन और कार्यान्वित करने का तरीका समझेंगे, प्रमुख आर्किटेक्चरल निर्णयों पर विचार करेंगे और कार्यशील कोड उदाहरण लिखेंगे।
1. Node.js पर माइक्रोसर्विस आर्किटेक्चर की मूल बातें
माइक्रोसर्विसेज एक दृष्टिकोण है जिसमें एप्लिकेशन को छोटी, शिथिल रूप से युग्मित सेवाओं में विभाजित किया जाता है। प्रत्येक सेवा एक विशिष्ट व्यावसायिक कार्य (जैसे, उपयोगकर्ता प्रबंधन, ऑर्डर प्रोसेसिंग या सूचनाएं भेजना) के लिए जिम्मेदार होती है और इसे स्वतंत्र रूप से विकसित, तैनात और स्केल किया जा सकता है। Node.js अपनी इवेंट-संचालित आर्किटेक्चर के साथ हल्की और तेज़ सेवाएं बनाने की अनुमति देता है जो हजारों समवर्ती अनुरोधों को कुशलतापूर्वक संभालती हैं।
माइक्रोसर्विसेज के लिए JavaScript का उपयोग करने के प्रमुख लाभ:
- एकीकृत भाषा — फ्रंटएंड और बैकएंड एक ही भाषा में लिखे जाते हैं, जो डेवलपर्स के लिए परतों के बीच संक्रमण को सरल बनाता है।
- उच्च प्रदर्शन — Node.js का नॉन-ब्लॉकिंग I/O माइक्रोसर्विसेज के लिए उपयुक्त है जो अक्सर नेटवर्क पर संचार करती हैं।
- समृद्ध इकोसिस्टम — npm REST API बनाने, कतारों, डेटाबेस और कंटेनरीकरण के साथ काम करने के लिए तैयार लाइब्रेरी प्रदान करता है।
2. सेवाओं के बीच डिजाइन और संचार
JavaScript में माइक्रोसर्विसेज डिजाइन करते समय, यह निर्धारित करना महत्वपूर्ण है कि सेवाएं एक-दूसरे के साथ कैसे संवाद करेंगी। दो मुख्य दृष्टिकोण हैं:
- सिंक्रोनस संचार (REST/gRPC) — सेवा A सेवा B को HTTP अनुरोध भेजती है और प्रतिक्रिया की प्रतीक्षा करती है। कार्यान्वयन में सरलता, लेकिन कठोर युग्मन बनाता है और कैस्केडिंग विफलताओं का कारण बन सकता है।
- एसिंक्रोनस संचार (मैसेज कतारें) — सेवाएं ब्रोकर (RabbitMQ, Kafka) के माध्यम से संदेशों का आदान-प्रदान करती हैं। यह शिथिल युग्मन सुनिश्चित करता है, दोष सहिष्णुता बढ़ाता है और हैंडलर को आसानी से स्केल करने की अनुमति देता है।
Express (REST API) और RabbitMQ (एसिंक्रोनस सूचना भेजना) का उपयोग करके ऑर्डर प्रबंधन के लिए एक सरल माइक्रोसर्विस का उदाहरण देखें।
उदाहरण: ऑर्डर माइक्रोसर्विस का REST API
const express = require('express');const amqp = require('amqplib');const app = express();app.use(express.json());
// ऑर्डर स्टोरेज (वास्तविक प्रोजेक्ट में — डेटाबेस)const orders = [];
// ऑर्डर बनानाapp.post('/orders', async (req, res) => { const { userId, product, quantity } = req.body; const order = { id: Date.now(), userId, product, quantity, status: 'created' }; orders.push(order); // उपयोगकर्ता को सूचित करने के लिए कतार में इवेंट भेजें const connection = await amqp.connect('amqp://localhost'); const channel = await connection.createChannel(); await channel.assertQueue('order_notifications'); channel.sendToQueue('order_notifications', Buffer.from(JSON.stringify(order))); res.status(201).json(order);});
// ऑर्डर की सूची प्राप्त करनाapp.get('/orders', (req, res) => { res.json(orders);});
app.listen(3001, () => console.log('Order service running on port 3001'));उदाहरण: सूचना सेवा (एसिंक्रोनस उपभोक्ता)
const amqp = require('amqplib');
async function consumeNotifications() { const connection = await amqp.connect('amqp://localhost'); const channel = await connection.createChannel(); await channel.assertQueue('order_notifications'); channel.consume('order_notifications', (msg) => { const order = JSON.parse(msg.content.toString()); console.log(`Sending notification for order ${order.id} to user ${order.userId}`); // यहां बाहरी API (email, SMS) को कॉल किया जा सकता है });}
consumeNotifications();