मेरे पास एक प्रणाली है जहां एक ग्राहक (इसे ग्राहक कहते हैं) किसी विशेष MQTT विषय के लिए अनुरोध प्रकाशित कर सकता है। ब्रोकर, मामले में यह मायने रखता है, अमेज़ॅन वेब सेवा है। फिर मेरे पास एक और ग्राहक है (चलो इसे मेनस्क्रिप्चर कहते हैं) जो हमेशा एक ही विषय पर सब्सक्राइब किया जाता है ताकि वह क्लाइंटए के अनुरोधों को उठा सके और कुछ काम कर सके, जो अंत में डेटाबेस ऑपरेशन में बदल जाता है। डेटाबेस, मामले में यह मायने रखता है, DynamoDB है।
चूंकि MainScricriber हमेशा सुलभ / ऑनलाइन नहीं हो सकता है, इसलिए मुख्य ग्राहक के फ़ेलओवर बैकअप के लिए एक विफल ग्राहक होने की इच्छा होती है। विचार यह है कि यदि मुख्य ग्राहक अनुरोध को समयबद्ध तरीके से नहीं संभालता है, तो विफलता ग्राहक सब्सक्राइब करेगा और समकक्ष कार्य / डेटाबेस ऑपरेशन करेगा। चुनौती यह है कि "काम" और परिणामस्वरूप "डेटाबेस ऑपरेशन" को मुख्य और असफल दोनों ग्राहकों द्वारा दोहराया नहीं जाना चाहिए।
यहाँ इस प्रणाली के लिए एक तार्किक प्रणाली वास्तुकला ड्राइंग है।
-----> MainSubscriber ----
/ \
ClientA --> Broker ---> Database
\ /
---> FailoverSubscriber --
स्पष्ट रूप से, ऐसी प्रणाली के साथ कुछ चुनौतियाँ हैं:
- मुख्य ग्राहक विफल ग्राहक को कैसे इंगित करता है कि वह अनुरोध पर काम कर रहा है?
- फेलओवर सब्सक्राइबर कैसे पता लगाता है कि मुख्य ग्राहक ने अनुरोध नहीं उठाया है और इस पर काम करना शुरू करने की जरूरत है?
- फ़ेलओवर सब्सक्राइबर कैसे मुख्य सब्सक्राइबर को बंद कर देता है अगर यह अचानक ऑनलाइन वापस आ जाता है और अनुरोध को चुनता है?
- मुख्य और असफल ग्राहकों के बीच समकालिकता के मुद्दों से कैसे निपटें?
यदि इस तरह की योजना के लिए पहले से ही कोई मौजूदा समाधान मौजूद है, तो मुझे पहिया को सुदृढ़ नहीं करना होगा। तो, मेरा पहला सवाल यह है कि क्या वहां पहले से ही कुछ है?
यदि नहीं, तो मैं मेन और फेलओवर ग्राहकों के बीच मध्यस्थ के रूप में कार्य करने के लिए मजबूत रूप से लगातार पढ़े जाने वाले डायनामोडीबी का उपयोग करने के बारे में सोच रहा था। तो, मेरा दूसरा सवाल यह है कि क्या ऐसा करने के लिए कोई अच्छी तरह से स्थापित योजनाएं हैं?