पब्लिश/सब्सक्राइब मैसेजिंग पैटर्न क्या है?
जब आप ऐसे एप्लिकेशन पर काम कर रहे होते हैं जिसे आसानी से मेंटेन करने योग्य, स्केलेबल और परफॉर्मेंट होने की आवश्यकता होती है, तो पब्लिश/सब्सक्राइब मैसेजिंग पैटर्न एक अच्छा विकल्प है।
इसके पीछे का विचार सरल लेकिन शक्तिशाली है। हमारे पास सेंडर होते हैं जिन्हें पब्लिशर्स कहा जाता है। उनकी एकमात्र भूमिका संदेश भेजना या पब्लिश करना है। उन्हें इस बात की परवाह नहीं होती कि उन्हें कौन प्राप्त करेगा या कोई उन्हें प्राप्त करेगा भी या नहीं। वे बस संदेश भेजते हैं और भूल जाते हैं। और वे इसे चैनल्स के माध्यम से करते हैं।
उन्हें टीवी चैनलों की तरह समझें। हमारे पास स्पोर्ट्स चैनल, मौसम पूर्वानुमान चैनल, कुकिंग चैनल, आदि होते हैं। हर पब्लिशर अपने संदेशों को एक निश्चित चैनल पर भेजता है, और जो कोई भी उस चैनल के लिए सब्सक्राइब्ड है, वह उन संदेशों को प्राप्त कर सकेगा।
यहां सब्सक्राइबर्स की भूमिका आती है। वे एक या अधिक चैनलों को सब्सक्राइब कर सकते हैं और वहां प्रसारित होने वाले संदेशों को प्राप्त करना शुरू कर सकते हैं।
जैसा कि हमने पहले उल्लेख किया, संदेशों को भेजकर भुला दिया जाता है। इसका मतलब है कि यदि कोई सब्सक्राइबर किसी निश्चित चैनल को सब्सक्राइब करता है, तो उस चैनल में पहले भेजे गए सभी संदेश इस सब्सक्राइबर के लिए उपलब्ध नहीं होंगे।
इस प्रकार की आर्किटेक्चर की प्रकृति के कारण, हम विभिन्न घटकों के बीच लो कपलिंग (low coupling) आसानी से प्राप्त कर सकते हैं और मजबूत, आसानी से मेंटेन होने वाले एप्लिकेशन बनाने के लिए एक ठोस आधार प्रदान कर सकते हैं।
उदाहरण के लिए, एक ऐसी स्थिति की कल्पना करें जहां हमें अपने सिस्टम के पब्लिशिंग भाग को बदलने या सुधारने की आवश्यकता है - मान लें अधिक पब्लिशर्स, अधिक चैनल आदि जोड़ने हैं। चूंकि दोनों भाग अलग-थलग हैं, अर्थात पब्लिशर्स को सब्सक्राइबर्स की परवाह नहीं है और इसके विपरीत, हम इसे आसानी से कर सकते हैं बिना इस चिंता के कि हम सिस्टम के किसी अन्य भाग को तोड़ रहे हैं। हम बस नए पब्लिशर्स जोड़ देते हैं। फिर बाद में, जब कोई सब्सक्राइबर संबंधित चैनलों पर आता है, तो वह बस उनका उपयोग करना शुरू कर देता है।
Redis क्या है?
Redis के पीछे प्रारंभिक विचार एक इन-मेमोरी कैश समाधान के रूप में काम करना था, अपने पूर्वज Memcached के विकल्प के रूप में।
लेकिन आजकल यह एक मल्टी-इन-वन समाधान है, जो इन-मेमोरी डेटा स्ट्रक्चर स्टोर, की-वैल्यू डेटाबेस, मैसेज ब्रोकिंग, और बहुत कुछ प्रदान करता है। यह इसे उन एप्लिकेशन के निर्माण के लिए एक आदर्श उम्मीदवार बनाता है जिन्हें वास्तव में तेज़ कैशिंग समाधान के साथ-साथ पहले उल्लेख की गई अन्य सुविधाओं की आवश्यकता होती है। विशेष रूप से यदि ऐप का प्रदर्शन इसके नियमित उपयोग के लिए महत्वपूर्ण है।
Redis प्रदर्शन तुलना (स्रोत: Google)
Redis का उपयोग करने के सबसे बड़े लाभों में से एक है विशाल कम्युनिटी और तकनीकी संसाधन जो आप ऑनलाइन पा सकते हैं। इनमें से कई संसाधन मुफ़्त हैं, और ऐसे ऑनलाइन प्लेटफ़ॉर्म हैं जिनमें फ्री टियर ऑफरिंग हैं।
Redis अपने शस्त्रागार में एक क्लाउड समाधान भी शामिल करता है। यदि आप इसे स्वयं आज़माना चाहते हैं, तो आप यहां जा सकते हैं और एक मुफ़्त खाता रजिस्टर कर सकते हैं या उनके प्रारंभिक कूपन ऑफरिंग का उपयोग कर सकते हैं।
Redis Enterprise Cloud साइन अप / साइन इन पेज
Pub/Sub क्या है?
Redis में पब्लिश/सब्सक्राइब चैनल उन विशेषताओं में से एक है जिनका मैंने ऊपर उल्लेख नहीं किया है लेकिन यह Redis के नवीनतम संस्करणों में शामिल है। यह पब/सब मैसेजिंग पैटर्न का उनका कार्यान्वयन है, जहां हमारे पास पब्लिशर्स और सब्सक्राइबर्स होते हैं जो चैनलों के माध्यम से संदेशों का आदान-प्रदान करते हैं।
हम नीचे इसके बारे में संक्षेप में जानेंगे और फिर एक छोटे डेमो ऐप में इसे व्यवहार में देखेंगे जो मैंने आपके लिए तैयार किया है।
Redis Pub/Sub कैसे काम करता है?
हमारे पास पब्लिशर्स (संदेशों के निर्माता), चैनल (जिनके माध्यम से संदेश जाते हैं), और सब्सक्राइबर्स (संदेशों के प्राप्तकर्ता) होते हैं। कौन क्या प्राप्त करता है यह पूरी तरह से इस बात पर निर्भर करता है कि कौन किस चैनल को सब्सक्राइब करता है।
आइए देखें कि यह एक उदाहरण में कैसे काम करता है:
यदि हमारे पास तीन पब्लिशर्स हैं जो तीन अलग-अलग चैनलों पर संदेश पब्लिश करेंगे। आइए उन्हें चैनल 1, 2 और 3 कहते हैं। हमारे पास तीन सब्सक्राइबर्स भी हैं, आइए उन्हें सब्सक्राइबर A, B और C कहते हैं।
अब, आइए कल्पना करें कि सब्सक्राइबर A सभी तीन चैनलों पर संदेशों को सुन रहा है, अर्थात यह उनसे सब्सक्राइब्ड है। और सब्सक्राइबर B और C चैनल 2 और 3 को सब्सक्राइब्ड हैं। इसका मतलब है कि जब तीनों में से कोई भी पब्लिशर एक संदेश भेजता है, तो सब्सक्राइबर A उसे प्राप्त करेगा। और सब्सक्राइबर B और C केवल पब्लिशर्स 2 और 3 द्वारा भेजे गए संदेशों को प्राप्त करेंगे, क्योंकि वे केवल इन चैनलों (2 और 3) पर संदेशों को सुन रहे हैं।
ध्यान दें कि हमारे पास एक चैनल का उपयोग करने वाली दो एंटिटी हैं - एक भेज रहा है, दूसरा प्राप्त कर रहा है - लेकिन वे पूरी तरह से स्वतंत्र हैं। और भेजे जा रहे संदेश पर्सिस्ट नहीं होते। एक बार जब वे पब्लिशर द्वारा भेज दिए जाते हैं तो वे भुला दिए जाते हैं। केवल वही एंटिटी जो भेजने के क्षण में सब्सक्राइब्ड हैं, उन्हें प्राप्त करेंगी।
Redis में Pub/Sub का उपयोग कैसे करें
Redis के साथ उपयोग करने के लिए ढेर सारे क्लाइंट लाइब्रेरी हैं। एक समर्पित पेज है जहां हर कोई जा सकता है और विशिष्ट प्रोजेक्ट आवश्यकताओं या सिर्फ अपनी पसंदीदा प्रोग्रामिंग भाषा के आधार पर एक चुन सकता है।
Redis के लोगों ने इनमें से कुछ रिपॉजिटरी को अनुशंसित के रूप में चिह्नित किया है जो विकल्प को आसान बनाता है, यदि आप इस सब में नए हैं।
नीचे हमारे डेमो के लिए, मैंने ioredis का उपयोग किया, जो Node.js के लिए एक पूर्ण-विशेषताओं वाला Redis क्लाइंट है। मैंने इसे चुना क्योंकि डेमो ऐप UI React और Node.js के साथ बनाया गया है और मेरा सर्वर कोड इसके साथ काफी अच्छी तरह से काम करता है।
Redis Pub/Sub डेमो
Redis Pub/Sub विज़ुअलाइज़र ऐप
शो टाइम!
डेमो एप्लिकेशन के पीछे का विचार विज़ुअली दिखाना है कि पैटर्न कैसे काम करता है।
जब आप इसे पहली बार खोलेंगे तो आप तीन बटन देखेंगे जो तीन काल्पनिक टीवी चैनलों में सरल संदेश (समाचार) पब्लिश करने के लिए हैं: मौसम, खेल और संगीत।
पब्लिश बटन के नीचे कार्ड सब्सक्राइबर्स हैं। एक बार जब आप उनमें से किसी पर अपना माउस कर्सर ले जाते हैं, तो यह अपने बैक साइड पर फ्लिप हो जाएगा और आप तीन बटन देखेंगे। आप इनमें से प्रत्येक बटन का उपयोग संबंधित चैनल को सब्सक्राइब करने के लिए कर सकते हैं।
एक बार जब कोई सब्सक्राइबर किसी चैनल पर साइन अप हो जाता है और आप उस चैनल के लिए आइकन या पब्लिश बटन पर क्लिक करते हैं, तो आप कार्ड के फ्रंट साइड पर एक सैंपल समाचार देखेंगे।
विभिन्न पब्लिशर्स/सब्सक्राइबर्स संयोजनों के साथ खेलें और परिणाम देखें।
मुझे आशा है कि यह आपको ऊपर दिए गए उदाहरण में मैंने जो समझाया उसकी बेहतर समझ देगा।
डेमो ऐप को स्थानीय रूप से कैसे चलाएं
डेमो एप्लिकेशन को स्थानीय रूप से इंस्टॉल और चलाने के लिए, नीचे दिए गए चरणों का पालन करें (सभी कमांड को रूट प्रोजेक्ट डायरेक्टरी से चलाने के लिए माना जाता है):
फ्रंटएंड चलाएं:
cd client && yarn && yarn dev
बैकएंड चलाएं:
cd server && yarn && yarn start
और अंत में, Docker के अपने स्थानीय इंस्टॉलेशन का उपयोग करें (यदि आपके पास नहीं है, तो आप इसे यहां से प्राप्त कर सकते हैं) इसे चलाने के लिए:
docker run -p 6379:6379 redislabs/redismod:preview
यह शायद स्थानीय रूप से Redis की एक रनिंग कॉपी प्राप्त करने का सबसे आसान तरीका है। दूसरा विकल्प Redis Cloud का सीधे उपयोग करना और एप्लिकेशन को ऑनलाइन डिप्लॉय करना होगा। यह एक विकल्प है जिसकी मैं अभी जांच कर रहा हूं और यदि मैं इसे करने में सफल होता हूं, तो मैं पूरे ऐप को डिप्लॉय कर दूंगा और आपको बता दूंगा।
निष्कर्ष
इस लेख ने आपको पब/सब मैसेजिंग पैटर्न विषय से परिचित कराया। यह याद रखना महत्वपूर्ण है कि जब भी हम लो कपल्ड आर्किटेक्चर और रियल-टाइम जैसे मैसेजिंग फीचर्स के साथ एक अत्यधिक परफॉर्मेंट एप्लिकेशन बनाना चाहते हैं, तो पब्लिश/सब्सक्राइब पैटर्न और विशेष रूप से Redis का उपयोग करने पर विचार करें।
वास्तव में, वास्तविक जीवन के बहुत से एप्लिकेशन जो Redis का उपयोग करते हैं, डैशबोर्ड-आधारित होते हैं। इसका मतलब है कि आमतौर पर एक अच्छा डैशबोर्ड स्क्रीन होता है, जो विभिन्न डेटा दिखाता है, जिसे अक्सर रियल टाइम में अपडेट किया जाता है।
उदाहरण के लिए, एक विशिष्ट क्षेत्र में ट्रैफिक दिखाने वाले सिस्टम की कल्पना करें। इस तरह का सॉफ्टवेयर पब/सब के लाभों का लाभ उठाने के लिए एक आदर्श उम्मीदवार है। और कई मामलों में यह Redis का उपयोग करके प्राप्त किया जाता है।
किसी भी मामले में, डेवलपर्स और इंजीनियरों के रूप में, हमें हमेशा उस प्रोजेक्ट की विशिष्ट आवश्यकताओं द्वारा निर्देशित होना चाहिए जिस पर हम काम कर रहे हैं। जब भी हम किसी नए पैटर्न या तकनीक को पेश करने का निर्णय लेते हैं, तो हमें इसे सावधानीपूर्वक करना चाहिए और इसे गंभीर शोध के साथ समर्थन देना चाहिए।
मुफ़्त में कोड करना सीखें। freeCodeCamp का ओपन सोर्स पाठ्यक्रम 40,000 से अधिक लोगों को डेवलपर के रूप में नौकरी पाने में मदद कर चुका है। शुरू करें