थ्योरी:
यह नेता चुनाव है, जो Consensus Problem का एक रूप है, कभी-कभी इसे The Two Generals Problem कहा जाता है। धारणाओं के कुछ सेटों के तहत (पूरी तरह से async और संदेश खो जा सकते हैं) यह असंभव साबित हुआ है, और सबूत विशेष रूप से सुरुचिपूर्ण है।
इस समस्या का अंतर्ज्ञान यह है: कल्पना करें कि कुछ एल्गोरिदम मौजूद हैं जो कुछ निश्चित संदेशों में सर्वसम्मति तक पहुंचने की अनुमति देता है। चूंकि विफलताओं को सहन किया जाता है, इसलिए हम प्रोटोकॉल से एक संदेश छोड़ सकते हैं, और इसे अभी भी काम करना चाहिए। हम इस प्रक्रिया को तब तक दोहरा सकते हैं जब तक कि कोई संदेश न हो, स्पष्ट रूप से असंभवता।
प्रैक्टिस में हम एक सिंक्रोनस सिस्टम अनुकरण करने के लिए विफलता डिटेक्टरों का उपयोग करके इसे दूर करते हैं।
सर्वसम्मति से हल होने वाला सबसे व्यापक रूप से ज्ञात एल्गोरिदम Paxos है, जो भाग लेने वाले नोड्स के आधे तक की विफलता को सहन कर सकता है। पक्सोस को कार्यान्वित करने में बहुत मुश्किल होने की प्रतिष्ठा है क्योंकि प्रोटोकॉल के विवरण की थोड़ी सी गलतफहमी भी इसकी शुद्धता को नष्ट कर देती है।
व्यावहारिक समाधान:
जबकि सामान्य रूप में समस्या काफी मुश्किल है, काम कर प्रणाली उठने काफी आसान है। पैक्सोस या समकक्ष एल्गोरिदम उपलब्ध शेल्फ कार्यान्वयन बंद हैं। Apache Zookeeper सबसे अच्छा मुझे पता है। आपकी विशिष्ट समस्या के लिए, मुझे पूरा यकीन है कि यह आपका सबसे तेज़ मार्ग होगा। अन्य पैक्सो कार्यान्वयन आसपास हैं, और नेटवर्क रिडंडेंसी वर्चुअल आईपी टूल्स जैसे Wackamole पर कुछ बनाना संभव हो सकता है। मेरा मानना है कि अधिकांश वाणिज्यिक डेटाबेस के उच्च अंत संस्करण कोरम सुविधाओं को एक (महंगे) विकल्प के रूप में पेश करते हैं।
इसके अलावा, कई अनुप्रयोगों के लिए यह सहीता को कमजोर करने के लिए स्वीकार्य है या अन्यथा समाधान को आसान बनाने के लिए समस्या को समायोजित करने के लिए स्वीकार्य है।
उदाहरण के लिए, यदि विफलता का एक बिंदु सहनशील है क्योंकि पुनर्प्राप्ति जल्दी होने की संभावना है, तो समस्या छोटी है: केवल एक विशेष नोड काम करें।
एक और दृष्टिकोण idempotent कार्यों के आसपास प्रणाली बनाने के लिए हो सकता है, तो डुप्लिकेट प्रसंस्करण सहनशील हो जाता है।
आखिरकार आप वर्कलोड को गैर-अनावश्यक सिस्टम के पूल में विभाजित कर सकते हैं: यहां विफलता पुनर्प्राप्ति तक प्रसंस्करण में देरी होगी, लेकिन केवल उस नोड पर आइटम्स के लिए, पूरे वर्कलोड के लिए नहीं।
इस तरह के समझौते इतने सरल हैं कि वे अक्सर बेहतर विकल्प होते हैं। इसे लागू करने की जटिलता के खिलाफ एक पूर्ण समाधान की उपयोगिता को वजन करना होगा और देखें कि वास्तव में मूल्य है या नहीं। यही कारण है कि बहुत से व्यावहारिक सिस्टम केवल 2 Phase या 3 Phase Commit का उपयोग करते हैं, भले ही वे कुछ परिदृश्यों में अवरुद्ध हों: कम उपलब्धता कोरुल प्रणाली की जटिलता की तुलना में कम हो सकती है।
इस विस्तृत स्पष्टीकरण, और संदर्भों के लिए धन्यवाद। मैं मानता हूं कि सरल समाधान को सक्षम करने के लिए बाधाओं को आराम देना एक ऐसा एवेन्यू है जिसे हमें एक्सप्लोर करना चाहिए। [जब मैं टीम में वापस जाता हूं, तो अब मैं स्पाइक मिलिगन के एपिटैफ को प्रतिबिंबित कर सकता हूं "देखो, मैंने आपको बताया था कि यह मुश्किल था!"]। – djna
स्पष्टता के लिए जुकीपर जेएबी "जुकीपर परमाणु प्रसारण" लागू करता है जो अमूर्त पैक्सोस से मेल खाता है लेकिन क्लासिक पैक्सो से अलग है जैसे कि संदेश प्राथमिक क्रम रखते हैं जो कई परिदृश्यों में बहुत महत्वपूर्ण है। – gertas