प्रकाशित/सदस्यता लें (या पब/उप ) एक सॉफ्टवेयर इंजीनियरिंग पैटर्न है जिसका उपयोग दशकों से किया जा रहा है लेकिन उपयोगी होने के लिए अक्सर समर्पित मैसेजिंग सर्वर और विशेष ज्ञान की आवश्यकता होती है।
रेडिस पब/सब पब्लिश/सब्सक्राइब पैटर्न का एक दुबला और सरल कार्यान्वयन है जो 2.0 रिलीज के बाद से सभी रेडिस सर्वरों की एक विशेषता रही है। इसका मतलब है कि जहां भी रेडिस तैनात है, वहां इसका उपयोग करना आसान है, और रेडिस को तैनात करके एक तेज और सरल पब/सब सिस्टम जल्दी से बनाया जा सकता है।
यह समझने के लिए कि क्या रेडिस पब/सब किसी ऐप के लिए उपयुक्त है, पहले पब/सब के डिजाइन और लक्ष्य को समझना महत्वपूर्ण है, फिर रेडिस पब/उप कार्यान्वयन के विवरण पर विचार करना।
पब/उप अवलोकन
पब/उप डिज़ाइन:"पब्लिशर्स" को "सब्सक्राइबर" से अलग करना
निर्भरता को कम करना और ज्ञान को विभाजित करना स्केलेबल सॉफ्टवेयर को डिजाइन करने के प्रमुख लक्ष्य हैं। पब्लिश/सब्सक्राइब मैसेजिंग पैटर्न, एकेए पब/सब, आपके सॉफ़्टवेयर के उन हिस्सों को अलग करता है जो प्रकाशित करते हैं आपके सॉफ़्टवेयर के उन हिस्सों से संदेश जो इस पर कार्य करते हैं संदेश। इसे बेहतर तरीके से समझने के लिए, आइए कुछ उदाहरण देखें:
“प्रकाशकों” के उदाहरण
- एक ऐप जो आपको चैट रूम में संदेश भेजने की सुविधा देता है
- एक डॉकटर कंटेनर अपने स्वास्थ्य या सेवाओं की घोषणा करता है
- स्टॉक ट्रेडों की कीमतों की घोषणा करने वाला ऐप
- आपके घर में तापमान संवेदक इसकी रीडिंग की घोषणा करता है
- एक बहु-उपयोगकर्ता गेम में एक संदेश प्रसारक ("एलोन को एक ग्रू द्वारा खा लिया गया है")
"सदस्यों" के उदाहरण
- ऐप चैट रूम में संदेशों को सुन रहे हैं।
- एक ऐप जो स्लैक को नोटिफिकेशन फॉरवर्ड करता है
- एक मोबाइल क्लाइंट यह देखता था कि रीयल-टाइम में क्या हो रहा है
- एक लॉगिंग सेवा जो बाद के विश्लेषण के लिए घटनाओं को रिकॉर्ड करती है
पब/उप पैटर्न सदस्यों . के बारे में बहुत अधिक सोचने से बचने में आपकी सहायता करता है प्रकाशकों . पर काम करते समय , और इसके विपरीत। ऊपर के उदाहरणों में हम कल्पना कर सकते हैं कि कई ग्राहक किसी एक प्रकाशक के संदेशों में रुचि रखते हैं। ग्राहक शायद सभी . को सुनना चाहें प्रकाशक।
पब/उप में एक प्रकाशक को अपने ग्राहकों के बारे में जानने की आवश्यकता नहीं है - यह एक संदेश को चैनल पर भेजता है (जिसे अक्सर विषय . कहा जाता है अन्य प्रणालियों में) और मूवसन। कोई भी सदस्य जो संदेश प्रकाशित होने पर उस चैनल पर सुन रहा होगा, उसे प्राप्त होगा।
सब्सक्राइबर्स को एक या एक से अधिक चैनलों को सुनने और थीम्स के आने पर प्रतिक्रिया देने के लिए डिज़ाइन किया गया है। यदि कोई सब्सक्राइबर प्रकाशित संदेशों की गति को बनाए रखने में असमर्थ है, तो वह कुछ संदेशों को याद करेगा। यह एक उपयोगी डिज़ाइन है:यह सिस्टम को किसी भी धीमे सब्सक्राइबर की क्षमता से अधिक स्केल करने की अनुमति देता है। प्रकाशक सब्सक्राइबर व्यवहार से धीमा हुए बिना जल्दी से आगे बढ़ते हैं।
पब/उप का लक्ष्य:काम का बोझ नहीं, डिलीवरी को बढ़ाना
पब/सब स्केलिंग सॉफ़्टवेयर में उपयोग किया जाने वाला एक पैटर्न है - यह समझना महत्वपूर्ण है कि यह किस प्रकार की स्केलिंग में मदद करता है। पब/उप और संदेश क्यूइंग . के बीच एक महत्वपूर्ण अंतर है ।
कतार पैटर्न में, एक कतार (या सूची रेडिस में) संसाधित किए जाने वाले संदेशों को बफ़र करता है जबकि श्रमिकों का एक पूल सूची से आइटम को हटाता है और उन्हें संभालता है। इस मॉडल में, आपके कर्मचारियों के पूल के आकार को स्केल करना उस गति को मापता है जिसके साथ आप अपनी कतार को संसाधित करते हैं, क्योंकि प्रत्येक संदेश केवल एक कार्यकर्ता को दिया जाता है। सभी कार्यकर्ता किसी दिए गए संदेश को ठीक उसी तरह से संभालते हैं।
दूसरी ओर, पब/उप में, सिस्टम चैनल के सभी संदेशों को उसके सभी ग्राहकों तक पहुंचाने का प्रयास करता है। यह कई-से-अनेक पैटर्न है, जहां प्रत्येक अलग-अलग ग्राहक संदेश के साथ कुछ अनोखा करते हैं - कोई इसे टिकाऊ लॉग में लिखता है, कोई इसे स्लैक चैनल पर भेजता है, कोई स्थानीय बिक्री कार्यालय में घंटी बजाता है, आदि।
संक्षेप में, पब/उप स्केल संदेश वितरण , और कतारबद्ध तराजू संदेशकार्यभार प्रसंस्करण . इन दोनों लक्ष्यों के लिए रेडिस का अक्सर उपयोग किया जाता है। रेडिस के साथ कतारबद्ध करने के लोकप्रिय उदाहरण के लिए साइडकीक देखें।
Redis पब/उप विवरण
पब/सब एक ऐसा पैटर्न है जो बहुत लंबे समय से है, और जबकि मूल पैटर्न समान है, विशिष्ट विशेषताएं कार्यान्वयन से कार्यान्वयन तक काफी भिन्न होती हैं।
रेडिस पब/उप एक हल्का, तेज कार्यान्वयन है। इसकी डिज़ाइन को बेहतर ढंग से समझने के लिए, कुछ ऐसी विशेषताओं को देखना उपयोगी होगा जो नहीं . हैं रेडिस पब/उप का एक हिस्सा:
- कोई दृढ़ता या मूल्य कैशिंग नहीं
- कोई डिलीवरी गारंटी नहीं
- कोई क्लस्टर अनुकूलन नहीं... अभी तक
कोई दृढ़ता नहीं:"लेकिन मुझे लगा कि यह एक चैट रूम की तरह है..."
अधिकांश रेडिस संचालन के विपरीत, जिसे डिस्क पर लिखा जा सकता है, रेडिसपब/उप गैर-निरंतर है। प्रकाशित संदेश सीधे सब्सक्राइबर्स को भेजे जाते हैं और फिर छोड़ दिए जाते हैं, रेडिस की मेमोरी या ऑनडिस्क में कोई रिकॉर्ड नहीं रखा जाता है।
यह कभी-कभी नए उपयोगकर्ताओं के लिए भ्रमित करने वाला हो सकता है जो सुनते हैं कि रेडिस पब/उप का उपयोग अक्सर चैट रूम को लागू करने के लिए किया जाता है। हम में से बहुत से लोग स्लैक जैसे टूल को चैट रूम के रूप में समझते हैं - आप लॉग इन करते हैं और हाल के संदेश देखते हैं और फिर सभी नए प्राप्त करते हैं। वास्तव में "हाल के संदेशों को देखना" पब/उप का हिस्सा नहीं है, और इसे एक अलग माध्यम से नियंत्रित किया जाना चाहिए। पब/उप केवल नए संदेशों के वितरण की सुविधा प्रदान करता है। इस अर्थ में पब/उप एक लाइव स्ट्रीम की तरह है - जब आप इसे चालू करते हैं तो आपको जानकारी मिलना शुरू हो जाती है, लेकिन आप इसे चालू करने से पहले क्या हुआ इसके बारे में कुछ नहीं सीखते हैं। इसके अलावा:इंटरनेट रिले चैट (आईआरसी) पब/उप मॉडल का उपयोग करता है जिसमें कोई अंतर्निहित इतिहास या संदेश प्रतिधारण नहीं है - यही कारण है कि चैट रूम रूपक इतना आम है।
वास्तव में आप अभी भी रेडिस और पब/उप के साथ चैट रूम लागू कर सकते हैं। ऐसा करने के लिए आप यह सुनिश्चित करेंगे कि संदेश न केवल प्रकाशित हों बल्कि एक सूची . पर भी धकेले जाएं ताकि उपयोगकर्ता संदेश इतिहास देख सकें।
कोई डिलीवरी गारंटी नहीं
ग्राहकों को पब/उप मॉडल में संदेश प्राप्त करने की गारंटी नहीं है। यदि सब्सक्राइबर को नेटवर्किंग की समस्या है, संदेशों को जल्दी से पढ़ने में विफल रहता है, या अन्यथा ऐसा लगता है कि जब कोई संदेश प्रकाशित होता है, तो उसे संदेश प्राप्त नहीं होता है। प्रकाशक चैनलों को संदेश भेज सकते हैं, भले ही कोई ग्राहक न सुन रहा हो - वे संदेश छोड़ दिए जाते हैं।
कुछ अन्य मैसेजिंग सिस्टम रीड रिसिप्ट या "एक्स" का उपयोग करते हैं या एक सब्सक्राइबर के लिए बफर स्टोर कर सकते हैं जो कम अवधि के डिस्कनेक्शन के खिलाफ सुरक्षा करता है। रेडिस यहां सरल विकल्प चुनता है:यदि आप कोई संदेश याद करते हैं, तो आप संदेश से चूक गए हैं। संदेश जो जरूरी उनके प्राप्तकर्ता तक पहुँचने के लिए अन्य माध्यमों से वितरित करने की आवश्यकता है।
यह ट्रेडऑफ़ इससे भी बदतर लगता है। संदेश पावती छोड़ने और ग्राहक-विशिष्ट बफ़रिंग Redis पब/उप संदेशों को बहुत संसाधित करने देता है शीघ्रता से, और ऐसे कई सिस्टम हैं जो फेयर-वेदर संदेश वितरण से लाभान्वित होते हैं।
अक्षम क्लस्टर स्केलिंग, अभी के लिए...
पब/सब स्केलिंग के लिए एक समाधान है, इसलिए न केवल अपने संदेशों को स्केल करने पर विचार करना महत्वपूर्ण है, बल्कि संदेश देने के लिए आप जिस सेवा का उपयोग कर रहे हैं। रैबिटएमक्यू और काफ्का सहित कई मैसेजिंग सिस्टम को उच्च उपलब्धता और उचित स्केलिंग गुणों के लिए डिज़ाइन किया गया था। एक संदेश सेवा सेटअप बढ़ता है।
रेडिस क्लस्टर (3.0 से रेडिस का हिस्सा) में एक महत्वपूर्ण चेतावनी के साथ रेडिस पब/उप के लिए अंतर्निहित समर्थन है। प्रत्येक प्रकाशित संदेश रेडिस क्लस्टर के प्रत्येक सदस्य को प्रसारित किया जाता है, जिससे बड़े क्लस्टर जल्दी से ट्रैफ़िक से अभिभूत हो सकते हैं।
इसका संक्षिप्त उत्तर केवल व्यक्तिगत रेडिस सर्वर या छोटे पब/उप-विशिष्ट समूहों पर पब/उप का उपयोग करना है - ये दोनों विकल्प बड़ी संख्या में संदेशों को संभाल सकते हैं। लंबी अवधि के रेडिस क्लस्टर में केवल आवश्यकतानुसार संदेशों को रूट करने के लिए बेहतर सुविधाएं होंगी, लेकिन यह सुविधा अभी भी डिज़ाइन चरण में है।
रैपिंग अप
कुल मिलाकर रेडिस पब/सब स्केलिंग सॉफ्टवेयर के लिए एक उपयोगी उपकरण है। ऊपर हमने जिन सुविधाओं को देखा उनमें से प्रत्येक की अनुपस्थिति एक डिज़ाइन ट्रेडऑफ है, जिसके परिणामस्वरूप सभी मैसेजिंग उद्देश्यों के लिए रामबाण होने की कीमत पर रेडिस के लिए सादगी और गति होती है।
रेडिस के कई अन्य हिस्सों की तरह यह हर विशेष उपयोग के मामले के लिए तैयार नहीं है, लेकिन यह आपको थोड़ी सी समझ के साथ एक लंबा रास्ता तय कर सकता है। Redis की अन्य विशेषताओं के साथ जोड़ा गया यह डेवलपर के स्टूलबेल्ट में एक बहुत शक्तिशाली टूल बन गया।
उस उच्च-स्तरीय अवलोकन के पूरा होने के साथ, आप शायद कुछ पब/उप कोड उदाहरण देखने के लिए तैयार हैं। रेडिस पब/सब पर एक नज़र डालें:आगे कैसे करें।