मैं AWS IoT के साथ नौकरी की कतार के लिए मुख्य और फेलओवर MQTT सब्सक्राइबर कैसे सेट कर सकता हूं?


11

मेरे पास एक प्रणाली है जहां एक ग्राहक (इसे ग्राहक कहते हैं) किसी विशेष MQTT विषय के लिए अनुरोध प्रकाशित कर सकता है। ब्रोकर, मामले में यह मायने रखता है, अमेज़ॅन वेब सेवा है। फिर मेरे पास एक और ग्राहक है (चलो इसे मेनस्क्रिप्चर कहते हैं) जो हमेशा एक ही विषय पर सब्सक्राइब किया जाता है ताकि वह क्लाइंटए के अनुरोधों को उठा सके और कुछ काम कर सके, जो अंत में डेटाबेस ऑपरेशन में बदल जाता है। डेटाबेस, मामले में यह मायने रखता है, DynamoDB है।

चूंकि MainScricriber हमेशा सुलभ / ऑनलाइन नहीं हो सकता है, इसलिए मुख्य ग्राहक के फ़ेलओवर बैकअप के लिए एक विफल ग्राहक होने की इच्छा होती है। विचार यह है कि यदि मुख्य ग्राहक अनुरोध को समयबद्ध तरीके से नहीं संभालता है, तो विफलता ग्राहक सब्सक्राइब करेगा और समकक्ष कार्य / डेटाबेस ऑपरेशन करेगा। चुनौती यह है कि "काम" और परिणामस्वरूप "डेटाबेस ऑपरेशन" को मुख्य और असफल दोनों ग्राहकों द्वारा दोहराया नहीं जाना चाहिए।

यहाँ इस प्रणाली के लिए एक तार्किक प्रणाली वास्तुकला ड्राइंग है।

                   -----> MainSubscriber ----
                  /                          \
ClientA --> Broker                            ---> Database
                  \                          /
                   ---> FailoverSubscriber --

स्पष्ट रूप से, ऐसी प्रणाली के साथ कुछ चुनौतियाँ हैं:

  1. मुख्य ग्राहक विफल ग्राहक को कैसे इंगित करता है कि वह अनुरोध पर काम कर रहा है?
  2. फेलओवर सब्सक्राइबर कैसे पता लगाता है कि मुख्य ग्राहक ने अनुरोध नहीं उठाया है और इस पर काम करना शुरू करने की जरूरत है?
  3. फ़ेलओवर सब्सक्राइबर कैसे मुख्य सब्सक्राइबर को बंद कर देता है अगर यह अचानक ऑनलाइन वापस आ जाता है और अनुरोध को चुनता है?
  4. मुख्य और असफल ग्राहकों के बीच समकालिकता के मुद्दों से कैसे निपटें?

यदि इस तरह की योजना के लिए पहले से ही कोई मौजूदा समाधान मौजूद है, तो मुझे पहिया को सुदृढ़ नहीं करना होगा। तो, मेरा पहला सवाल यह है कि क्या वहां पहले से ही कुछ है?

यदि नहीं, तो मैं मेन और फेलओवर ग्राहकों के बीच मध्यस्थ के रूप में कार्य करने के लिए मजबूत रूप से लगातार पढ़े जाने वाले डायनामोडीबी का उपयोग करने के बारे में सोच रहा था। तो, मेरा दूसरा सवाल यह है कि क्या ऐसा करने के लिए कोई अच्छी तरह से स्थापित योजनाएं हैं?


क्या आपने जांच की है कि क्या अमेजन एसक्यूएस जैसी संदेश कतार यहां मददगार हो सकती है? ऐसा लगता है कि AWS IoT के साथ एकीकरण है और यह 'कार्य कतार' शैली की समस्या के लिए उपयुक्त है।
Aurora0001

जवाबों:


8

AWS SQS प्रलेखन के अनुसार (जैसा कि आपने कहा दलाल AWS है) यह मूल होना चाहिए:

संदेश प्राप्त होने के तुरंत बाद, यह कतार में रहता है। अन्य उपभोक्ताओं को संदेश को फिर से संसाधित करने से रोकने के लिए, अमेज़ॅन एसक्यूएस एक दृश्यता समयबाह्य समय निर्धारित करता है, जिस अवधि के दौरान अमेज़ॅन एसक्यूएस अन्य खपत घटकों को संदेश प्राप्त करने और संसाधित करने से रोकता है।

समस्या आपके अधिकतम प्रसंस्करण समय के अनुसार सही दृश्यता का समय पा रही है।

आपके पास अभी भी एक छोटा सा मौका है कि दोनों ग्राहक एक ही संदेश की प्रक्रिया करते हैं, इस मामले में आपके ग्राहक कोड को डेटाबेस के लिए समान आउटपुट बनाने की कोशिश करनी चाहिए (कम से कम प्राथमिक कुंजी) और उसी रिकॉर्ड को सम्मिलित करने का प्रयास करते समय इनायत से विफल होना चाहिए।


7

आप AWS SQS की मृत-पत्र कतारों की अवधारणा को देखना चाह सकते हैं । AWS डॉक्स से:

एक मृत पत्र कतार एक कतार है जो अन्य (स्रोत) कतार उन संदेशों के लिए लक्षित हो सकती है जिन्हें सफलतापूर्वक संसाधित नहीं किया जा सकता (भस्म)। आप अलग-अलग सेट कर सकते हैं और इन संदेशों को मृत पत्र कतार में अलग कर सकते हैं ताकि यह निर्धारित किया जा सके कि उनका प्रसंस्करण सफल क्यों नहीं हुआ।

इसलिए, यदि आप मुख्य ग्राहक को सामान्य कतार से सुनने के लिए और द्वितीयक ग्राहक को मृत-पत्र कतार से सुनने के लिए इंगित करते हैं, तो विफलता की समस्या को हल किया जाना चाहिए।

साथ ही, इसके साथ आपकी समस्याओं का 1, 2 और 3 का ध्यान रखा जाता है। मुख्य और द्वितीयक ग्राहकों को इस मामले में एक दूसरे से बात करने की आवश्यकता नहीं है।

इसके अलावा, Tensibai के जवाब पर निर्माण, के रूप में एक समय में एक संदेश प्राप्त होता है करने के लिए सुनिश्चित आपके ग्राहक कोड इतना लिखा है बनाने के कई ग्राहकों को एक ही कतार में सुन रहे हैं, तो की वजह सेvisibility timeout


नकारात्मक पक्ष यह होगा कि यह प्रसंस्करण में देरी का परिचय देगा, संदेश कुछ समय बाद ही मृत पत्र कतार में प्रवेश करते हैं।

तो, यदि आप ऐसा नहीं चाहते हैं, तो आप तेंसिबाई के जवाब के साथ आगे बढ़ सकते हैं। और अगर आप स्टेटस चेक के लिए अतिरिक्त डायनामो टेबल रखने के बजाय उसे सहन कर सकते हैं, तो आप इसका उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.