लिग्नम: वितरित संदेश कतार
सभी WFH फ़ज़ और अलग-थलग स्थिति के बीच, मैंने कॉन्सुल का उपयोग करके वितरित तालों को देखने के लिए खुद को निर्धारित किया, सरल परीक्षण कार्यक्रम जल्द ही लिग्नम नामक एक वितरित संदेश कतार बनाने का मार्ग बन गया ।
यह लिग्नम संदेश कतार का एक परिचयात्मक लेख है।
वितरित प्रणाली क्या है?
वहाँ कई परिभाषाएँ हैं, एक साधारण Google खोज के परिणामस्वरूप कई उत्तर मिलेंगे। मैं वितरित प्रणाली को स्वायत्त या व्यक्तिगत कार्यक्रम या प्रणालियों के संग्रह के रूप में परिभाषित कर सकता हूं जो एक सामान्य लक्ष्य की दिशा में काम कर रहे हैं।
मतलब, एक सामान्य उद्देश्य की पूर्ति के लिए संचार के विभिन्न माध्यमों द्वारा एक साथ नेटवर्क की गई कई प्रणालियाँ। यह ऐसे सिस्टम हो सकते हैं जहां कोई वेब पेज मांगता है और कोई वेब पेज सर्व करता है। एक अंतिम उपयोगकर्ता के लिए ये प्रणालियाँ एक के रूप में दिखाई दे सकती हैं, लेकिन ऐसी सैकड़ों प्रणालियाँ हो सकती हैं, जो कार्य करने के लिए एक दूसरे से संचार करती हैं।
संदेश कतार क्या है?
सिस्टम जो FIFO क्रम में संदेशों को पढ़ने और लिखने के लिए अन्य सेवाओं के लिए कतार डेटा संरचना प्रदान करता है।
कतार निर्माता सेवा को संदेश लिखने और उपभोक्ता को अतुल्यकालिक रूप से उपभोग करने की अनुमति देती है। निर्माता और उपभोक्ता को एक दूसरे के बारे में जागरूक होने की आवश्यकता नहीं है।
संदेश कतार की दो मूलभूत विशेषताएँ हैं
- विषय
संदेश नामित बफ़र को भेजे जाते हैं, इन्हें विषय कहा जाता है। हम विषय से संदेशों का उत्पादन और उपभोग करते हैं। - संदेश
यह वास्तविक संदेश है जिसे हम दूसरों के उपभोग के लिए विषय पर लिखते हैं।
वितरित संदेश कतार क्या है?
जब हम एक संदेश कतार बनाते हैं जो कई नोड्स में होस्ट की जाती है, सामूहिक रूप से अन्य सेवाओं के लिए एकल इकाई के रूप में काम करने के लिए मिलकर काम करती है।
प्रदान करने के लिए उपयोगकर्ता संदेशों को होस्ट करने वाली कई कतारें होंगी
- विश्वसनीयता और उच्च उपलब्धता
- दोष सहिष्णुता
- प्रदर्शन
- एकाधिक नोड्स के साथ रीड लोड साझा करना
लिग्नम को कौंसल सत्र लॉक का उपयोग करके वितरित लॉकिंग सीखने के लिए एक परीक्षण कार्यक्रम के रूप में शुरू किया गया था , जो उस समय संदेश कतार की ओर बढ़ने लगा था जब मैं काफ्का पर काम कर रहा था।
यह गो में लिखा है। मैंने इसे परीक्षण संचालित विकास के साथ दिमाग में शुरू किया था लेकिन जल्द ही यह एक गड़बड़ हो गया।
लिग्नम एक पूर्ण संदेश कतार नहीं है, यह एक कार्य प्रगति पर है। तुम कर सकते हो
- विषय पर संदेश भेजें
- विषय से संदेशों का उपभोग करें
- संदेश को सभी नोड्स में दोहराया जाता है, जिसका अर्थ है कि विषय से संदेश पढ़ने के लिए किसी भी नोड का उपयोग किया जा सकता है
- डिस्क पर संदेशों को बनाए रखें
- लिग्नम बिना किसी विशेष सेटअप की आवश्यकता के क्लस्टर मोड में काम कर सकता है
- कॉन्सुल द्वारा अपने सत्र ताले के साथ क्लस्टर प्रबंधन की सुविधा प्रदान की जाती है
- नेता प्राप्त करने के लिए प्रत्येक नोड कॉन्सुल से जुड़ जाएगा। यदि कोई नेता नहीं मिलता है, तो नोड में से एक को नेता के रूप में चुना जाएगा
- अन्य सभी नोड खुद को नेता के अनुयायी के रूप में पंजीकृत करेंगे
- नेता को भेजे गए संदेश को अनुयायी नोड में दोहराया जाएगा
- इसकी प्रतिकृति के दो तरीके हैं
a। वाल प्रतिकृति
B. लाइव प्रतिकृति - यदि नेता नीचे जाता है, तो अनुयायी में से कोई एक नेता के रूप में चुना जाता है
वर्तमान में लिग्नम प्रतिकृति रणनीति के दो तरीके लागू करता है।
- वाल प्रतिकृति
- लाइव प्रतिकृति।
वाल प्रतिकृति
message.initial-szie-per-topic
लॉग फ़ाइल प्रत्येक विषय के लिए बनाई जाती है जब संदेश कॉन्फ़िगरेशन ( ) में परिभाषित बफर आकार से अधिक फैलता है । लिग्नम .qwal
प्रत्येक विषय के लिए वाल फ़ाइल () बनाता है। जब संदेश संख्या बफ़र आकार तक पहुँचती है, तो यह फ़ाइल फ़ाइल के रूप में डिस्क में फ़्लश हो जाती log
है। लिग्नम अक्सर इन लॉग फ़ाइल निर्माण को देखता है और अनुयायियों को भेजता है। सभी अनुयायी समय-समय पर नेता के साथ तालमेल बिठाते हैं, जिससे अंततः / विलंबित स्थिरता मिलती है।
लाइव प्रतिकृति
यह एक स्ट्रीमिंग प्रतिकृति है, जब अनुयायी पहले से ही नेता के साथ पंजीकृत होता है, तो हमें विषय के बाद बनाए गए संदेशों को सिंक करने के बारे में चिंता करने की आवश्यकता नहीं है। हम नेता में प्राप्त संदेशों को केवल अनुयायी के रूप में अग्रेषित कर सकते हैं। इस रणनीति में, पंजीकृत अनुयायी को तुरंत संदेश भेजे जाते हैं। इस तरह लिग्नम मजबूत स्थिरता प्रदान कर सकता है।
लिग्नम कैसे चलाएं
- पूर्वापेक्षा
— कौंसल आप रीडमी में बताए
अनुसार डॉकरफाइल का उपयोग कर सकते हैं - रिपॉजिटरी को क्लोन करें
https://github.com/NishanthSpShetty/lignum.git
config.yml
, आप कॉन्फ़िगरेशन पर अधिक विवरण के लिए इस दस्तावेज़ को देख सकते हैं।make run
- मेसेज भेजें
curl --request POST \
--url http://localhost:8080/api/message \
--header 'Content-Type: application/json' \
--data '{
"topic": "test",
"message":"this is a test message"
}'
curl --request GET \
--url http://localhost:8080/api/message \
--header 'Content-Type: application/json' \
--data '{
"topic": "test",
"from": 0,
"to": 3
}'
यह किस डिलीवरी गारंटी की पेशकश करता है?
जैसा कि संदेश बने रहते हैं और उपभोक्ता किसी भी समय किसी भी ऑफसेट को पढ़ सकता है, वितरण की गारंटी उपभोक्ता के पास होती है। लिग्नम संदेश आदेश देने की गारंटी देता है।
आइए मौजूदा क्लस्टर में नोड जोड़ें
- अपने होस्ट के अनुसार कॉन्फ़िगरेशन बदलें।
- यदि पिछले रन के समान होस्ट पर चल रहा है, तो कॉन्फ़िगरेशन फ़ाइल में पोर्ट, डेटा निर्देशिका और प्रतिकृति पोर्ट मान बदलें।
- दौड़ना
make run
यह लिग्नम का संक्षिप्त परिचय है। मैं भविष्य में इसके आंतरिक और विकास विवरण पर एक अलग दस्तावेज़ लेकर आऊंगा।
कोड जीथब में है: लिग्नम ।
चेकआउट करें और प्रतिक्रिया दें, योगदान का स्वागत है।
मैं जिन अन्य भयानक परियोजनाओं पर काम कर रहा हूं, उनके लिए मेरी जीथब प्रोफाइल चेकआउट करें
मुझे लिंक्डइन पर कनेक्ट करें
https://www.linkedin.com/in/nishanthspshetty/