2012-06-28 10 views
5

परिदृश्य: हमारे पास भौगोलिक रूप से वितरित कई नोड्स हैं जिन पर हम उस स्थान के लिए संदेश एकत्रित करना चाहते हैं। और फिर हम इस एकत्रित डेटा को प्रत्येक स्थान पर प्रत्येक कतार में केंद्रीय स्थान पर अपनी संबंधित कतारों में भेजना चाहते हैं। केंद्रीय नोड में, हम कतारों (अन्य नोड्स से) में एकत्रित डेटा खींचेंगे, इसे संसाधित करेंगे और इसे लगातार स्टोर करेंगे।एकाधिक रेडिस उदाहरणों के साथ एक कतार उदाहरण सिंक्रनाइज़ करें

प्रतिबंध:

  • डाटा हमारे लिए बहुत महत्वपूर्ण है। इसलिए, हमें यह सुनिश्चित करना होगा कि हम किसी भी मामले में डेटा खो नहीं रहे हैं।
  • इसलिए, हमें प्रत्येक नोड पर लगातार कतार की आवश्यकता है ताकि अगर कुछ यादृच्छिक कारणों के लिए नोड नीचे चला जाए, तब भी जब हम इसे लाएंगे तो हमारे पास एकत्रित डेटा हमारे साथ सुरक्षित होगा और हम इसे केंद्रीय नोड में भेज सकते हैं जहां यह कर सकता है प्रोसेस किया गया।
  • इसी तरह, यदि केंद्रीय नोड नीचे चला जाता है, तो डेटा अन्य सभी नोड्स पर ही रहना चाहिए ताकि जब केंद्रीय नोड आता है तो हम सभी डेटा को केंद्रीय नोड को प्रोसेसिंग के लिए भेज सकते हैं।
  • इसके अलावा, केंद्रीय नोड पर डेटा डुप्लीकेट या फिर से संग्रहीत नहीं होना चाहिए। यह एक नोड्स पर एकत्रित डेटा केवल एक बार केंद्रीय नोड्स पर संग्रहीत किया जाना चाहिए।
  • जो डेटा हम एकत्र कर रहे हैं वह हमारे लिए बहुत महत्वपूर्ण है और केंद्रीय नोड को डेटा डिलीवरी का आदेश कोई मुद्दा नहीं है।

हमारे समाधान हम जिसमें से मैं एक है कि हमने सोचा कि सबसे अच्छा होगा नीचे सूचीबद्ध करने के लिए जा रहा हूँ समाधान के एक जोड़े पर विचार किया है। एक संभावित समाधान (हमारी राय में) हर जगह कतारों को बनाए रखने के लिए रेडिस का उपयोग करना है क्योंकि रेडिस लगातार भंडारण प्रदान करता है। तो शायद सभी भौगोलिक दृष्टि से अलग नोड्स पर एक डिमन चल रहा है जो कतार से डेटा पढ़ता है और इसे केंद्रीय नोड में भेजता है। डेटा प्राप्त करने पर केंद्रीय नोड एक एसीके को नोड को भेजता है जिसने डेटा प्राप्त किया है (क्योंकि डेटा हमारे लिए बहुत महत्वपूर्ण है) और फिर एसीके प्राप्त करने पर, नोड कतार से डेटा हटा देता है। बेशक, टाइमआउट अवधि होगी जिसमें एसीके प्राप्त किया जाना चाहिए।

समस्या ऊपर कहा गया है समाधान (हमें के अनुसार) ठीक काम करेगा, लेकिन मुद्दा यह है कि हम सरल कारण है कि हम यहाँ गलत हो सकता है के लिए अपने आप को पूरे तुल्यकालन प्रोटोकॉल को लागू नहीं करना चाहती। हम Redis में सिंक्रनाइज़ेशन के इस विशेष तरीके को खोजने में असमर्थ थे। इसलिए हम अन्य एएमक्यूपी आधारित कतारों जैसे कि रब्बीएमक्यू, ज़ीरोएमक्यू इत्यादि के लिए खुले हैं। फिर हम यह समझने में सक्षम नहीं थे कि क्या हम इन समाधानों के साथ ऐसा कर सकते हैं।

  • क्या ये संदेश पंक्तियां या कोई अन्य डेटा स्टोर ऐसी सुविधाएं प्रदान करता है जो हमारी समस्या का समाधान हो सकते हैं? यदि हां, तो कैसे?
  • यदि नहीं, तो हमारा समाधान पर्याप्त है?
  • क्या कोई बेहतर समाधान सुझा सकता है?
  • क्या ऐसा करने का एक बेहतर तरीका हो सकता है?
  • इसे सुरक्षित करने में सबसे अच्छा तरीका क्या होगा?
  • जो डेटा हम एकत्र कर रहे हैं वह हमारे लिए बहुत महत्वपूर्ण है और केंद्रीय नोड को डेटा डिलीवरी का आदेश कोई मुद्दा नहीं है।

उत्तर

4

आप अन्य नोड्स से संदेशों का उपभोक्ता होने और संदेश पावती सुविधा का उपयोग करने के लिए केंद्रीय नोड (या नोड्स के क्लस्टर) को स्थापित करके खरगोश एमक्यू के साथ ऐसा कर सकते हैं। इस सुविधा का मतलब है कि केंद्रीय नोड एके डिलीवरी कर सकते हैं, ताकि अन्य नोड्स केवल एके के बाद संदेशों को हटा दें। उदाहरण के लिए देखें: http://www.rabbitmq.com/tutorials/tutorial-two-python.html

यदि आपके पास और प्रश्न हैं तो कृपया मेलिंग सूची rabbitmq-चर्चा ईमेल करें।

+0

सही नौकरी के लिए सही उपकरण का उपयोग करें: जब आपको पावती, दृढ़ता और (उन्नत) संदेश रूटिंग की आवश्यकता होती है तो खरगोश एमक्यू निश्चित रूप से सही उपकरण है। – FGRibreau

+0

"इसके अलावा, केंद्रीय नोड पर डेटा डुप्लीकेट या फिर से संग्रहीत नहीं होना चाहिए। यह एक नोड्स पर एकत्रित डेटा केवल एक बार केंद्रीय नोड्स पर संग्रहीत किया जाना चाहिए।" मैं यह कैसे सुनिश्चित करूं? इस बात पर विचार करें कि नेटवर्क मुद्दों (हमारे परिदृश्य में) के कारण एसीके वितरित नहीं होता है। उस मामले में क्या होता है? कतार अभी भी काम के पूरा होने की स्थिति से अवगत नहीं है। क्या उस मामले में संदेश बंद हो जाता है? या कोई और कर्मचारी इसे उठाता है? यदि कोई और कर्मचारी इसे उठाता है, तो हमारे पास एक ही डेटा दो बार काम करेगा, है ना? – vaidik

संबंधित मुद्दे