2009-07-09 9 views
14

मान लें कि आपके पास एन प्रक्रियाएं हैं, n> 2. आप उनमें से एक समझौता करना चाहते हैं कि कोई सक्रिय होना है। तो उन्हें यह निर्धारित करने के लिए कि कौन सा सक्रिय है, एक दूसरे को वोट देने की जरूरत है।विभाजन-मस्तिष्क, वोट और कोरम से बचें

सभी प्रक्रियाओं को किसी भी समय विफल हो सकता है, हम यदि संभव हो तो एक प्रक्रिया सक्रिय करना चाहते हैं, लेकिन ...

हम चाहिए एक ही समय में दो सक्रिय कभी नहीं है, इसलिए अगर वे नहीं किया जा सकता सुनिश्चित करें कि कोई भी सक्रिय नहीं है। (यानी हम विभाजित मस्तिष्क से बचना चाहते हैं)

उनके बीच एकमात्र उपलब्ध संचार तंत्र पब-सब मैसेजिंग (बिंदु बिंदु नहीं) है।

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

डिज़ाइन? किस संदेश को प्रकाशित करने की आवश्यकता है?

उत्तर

29

थ्योरी:

यह नेता चुनाव है, जो Consensus Problem का एक रूप है, कभी-कभी इसे The Two Generals Problem कहा जाता है। धारणाओं के कुछ सेटों के तहत (पूरी तरह से async और संदेश खो जा सकते हैं) यह असंभव साबित हुआ है, और सबूत विशेष रूप से सुरुचिपूर्ण है।

इस समस्या का अंतर्ज्ञान यह है: कल्पना करें कि कुछ एल्गोरिदम मौजूद हैं जो कुछ निश्चित संदेशों में सर्वसम्मति तक पहुंचने की अनुमति देता है। चूंकि विफलताओं को सहन किया जाता है, इसलिए हम प्रोटोकॉल से एक संदेश छोड़ सकते हैं, और इसे अभी भी काम करना चाहिए। हम इस प्रक्रिया को तब तक दोहरा सकते हैं जब तक कि कोई संदेश न हो, स्पष्ट रूप से असंभवता।

प्रैक्टिस में हम एक सिंक्रोनस सिस्टम अनुकरण करने के लिए विफलता डिटेक्टरों का उपयोग करके इसे दूर करते हैं।

सर्वसम्मति से हल होने वाला सबसे व्यापक रूप से ज्ञात एल्गोरिदम Paxos है, जो भाग लेने वाले नोड्स के आधे तक की विफलता को सहन कर सकता है। पक्सोस को कार्यान्वित करने में बहुत मुश्किल होने की प्रतिष्ठा है क्योंकि प्रोटोकॉल के विवरण की थोड़ी सी गलतफहमी भी इसकी शुद्धता को नष्ट कर देती है।

व्यावहारिक समाधान:

जबकि सामान्य रूप में समस्या काफी मुश्किल है, काम कर प्रणाली उठने काफी आसान है। पैक्सोस या समकक्ष एल्गोरिदम उपलब्ध शेल्फ कार्यान्वयन बंद हैं। Apache Zookeeper सबसे अच्छा मुझे पता है। आपकी विशिष्ट समस्या के लिए, मुझे पूरा यकीन है कि यह आपका सबसे तेज़ मार्ग होगा। अन्य पैक्सो कार्यान्वयन आसपास हैं, और नेटवर्क रिडंडेंसी वर्चुअल आईपी टूल्स जैसे Wackamole पर कुछ बनाना संभव हो सकता है। मेरा मानना ​​है कि अधिकांश वाणिज्यिक डेटाबेस के उच्च अंत संस्करण कोरम सुविधाओं को एक (महंगे) विकल्प के रूप में पेश करते हैं।

इसके अलावा, कई अनुप्रयोगों के लिए यह सहीता को कमजोर करने के लिए स्वीकार्य है या अन्यथा समाधान को आसान बनाने के लिए समस्या को समायोजित करने के लिए स्वीकार्य है।

उदाहरण के लिए, यदि विफलता का एक बिंदु सहनशील है क्योंकि पुनर्प्राप्ति जल्दी होने की संभावना है, तो समस्या छोटी है: केवल एक विशेष नोड काम करें।

एक और दृष्टिकोण idempotent कार्यों के आसपास प्रणाली बनाने के लिए हो सकता है, तो डुप्लिकेट प्रसंस्करण सहनशील हो जाता है।

आखिरकार आप वर्कलोड को गैर-अनावश्यक सिस्टम के पूल में विभाजित कर सकते हैं: यहां विफलता पुनर्प्राप्ति तक प्रसंस्करण में देरी होगी, लेकिन केवल उस नोड पर आइटम्स के लिए, पूरे वर्कलोड के लिए नहीं।

इस तरह के समझौते इतने सरल हैं कि वे अक्सर बेहतर विकल्प होते हैं। इसे लागू करने की जटिलता के खिलाफ एक पूर्ण समाधान की उपयोगिता को वजन करना होगा और देखें कि वास्तव में मूल्य है या नहीं। यही कारण है कि बहुत से व्यावहारिक सिस्टम केवल 2 Phase या 3 Phase Commit का उपयोग करते हैं, भले ही वे कुछ परिदृश्यों में अवरुद्ध हों: कम उपलब्धता कोरुल प्रणाली की जटिलता की तुलना में कम हो सकती है।

+1

इस विस्तृत स्पष्टीकरण, और संदर्भों के लिए धन्यवाद। मैं मानता हूं कि सरल समाधान को सक्षम करने के लिए बाधाओं को आराम देना एक ऐसा एवेन्यू है जिसे हमें एक्सप्लोर करना चाहिए। [जब मैं टीम में वापस जाता हूं, तो अब मैं स्पाइक मिलिगन के एपिटैफ को प्रतिबिंबित कर सकता हूं "देखो, मैंने आपको बताया था कि यह मुश्किल था!"]। – djna

+0

स्पष्टता के लिए जुकीपर जेएबी "जुकीपर परमाणु प्रसारण" लागू करता है जो अमूर्त पैक्सोस से मेल खाता है लेकिन क्लासिक पैक्सो से अलग है जैसे कि संदेश प्राथमिक क्रम रखते हैं जो कई परिदृश्यों में बहुत महत्वपूर्ण है। – gertas

1

मैं पब-सब मैसेजिंग पर स्पष्ट नहीं हूं।

अगर उन्हें किसी बाहरी स्रोत से कुछ प्रकार की कार्य वस्तुएं मिल रही हैं और आप केवल उनमें से एक को काम को संसाधित करना चाहते हैं, तो आप हैश वैल्यू स्पेस ले सकते हैं, 2^64, स्पेस को संख्या से विभाजित करें नोड्स प्रत्येक नोड एक हिस्सा ले रहा है। प्रत्येक नोड कार्य वस्तुओं को हश कर सकता है क्योंकि वे अंदर आते हैं और यह निर्धारित करते हैं कि यह उनका है या नहीं।

+0

पब-एसबी संदेश, जिसका अर्थ यह है कि प्रत्येक सदस्य जानकारी प्रसारित कर सकता है लेकिन यह सुनिश्चित नहीं कर सकता कि अन्य सदस्य इसे देखते हैं। वैसे भी, आपका उत्तर वास्तव में एक है जिसे हमने सोचा था, और वास्तव में पसंद किया था। नकारात्मकता यह है कि हम वास्तव में केवल 2 नोड्स हैं, और इसलिए अपर्याप्त मोड में आधा काम खो देता है। – djna

0

देखें कि रूटिंग प्रोटोकॉल (ओएसपीएफ और आईएस-आईएस) कैसे करते हैं, और देखें कि यह आपके लिए काम करता है या नहीं। वे एक नेता (और ओएसपीएफ मामले में, एक बैकअप नेता) का चुनाव करते हैं।

+0

यह चुनाव प्रक्रिया ही है जो हमें परेशान कर रही थी। सलाह के लिये धन्यवाद। यह http://routergod.com/sevenofnine/ospf_part_2.html आलेख बताता है कि क्या हो रहा है, लेकिन अधिक जानकारी नहीं देता है। अविश्वसनीय सांप्रदायिकताओं से निपटने और मस्तिष्क को विभाजित करने की संभावना से बचने के लिए मुझे समस्या है। – djna

+0

वह लिंक केवल एक संक्षिप्त अवलोकन बताता है। कुछ सिस्को दस्तावेज़ों या पुस्तक "रूटिंग टीसीपी/आईपी" पर एक नज़र डालें। – Thomas