2012-06-29 14 views
5

मैं 3 चरण पढ़ रहा था विकिपीडिया पर प्रोटोकॉल के लिए प्रतिबद्ध (http://en.wikipedia.org/wiki/Three-phase_commit_protocol) और यहाँ एक परिदृश्य है कि मेरे दिमाग में आया था जहां 3PC असफल हो जायेगी है:3 चरण प्रोटोकॉल प्रतिबद्ध

मान लें दो प्रतिभागियों ए और बी और एक समन्वयक सी देखते हैं:

1) सी ए को precommit संदेश भेजा है और यह संदेश precommit दोनों ए और सी बी को भेजता है इससे पहले कि simulataneously असफल। 2) लेनदेन अब पुनरारंभ किया गया है और बी इसे समाप्त कर देता है क्योंकि ए 3 से कोई जवाब नहीं है) ए लेनदेन करता है क्योंकि इसे पहले से ही प्रीकॉमिट संदेश मिला है।

क्या यह 2 पीसी में भी मूल समस्या नहीं थी जिसे 3 पीसी को संबोधित किया जाना था? समस्या को हल करने के लिए 3 पीसी कैसे है? मैं क्या खो रहा हूँ। धन्यवाद।

उत्तर

2

अद्यतन:

प्रतिभागियों तो प्रतिबद्ध नहीं, जब तक वे समन्वयक से doCommit संदेश प्राप्त करते हैं?

प्रीकॉमिट संदेश प्राप्त करने के बाद, प्रतिभागी पहले इंतजार करेंगे, और यदि टाइमआउट होता है, तो वे प्रतिबद्ध होने के लिए आगे बढ़ेंगे।

यदि संयोजक प्रीकॉमिट संदेश भेजने के बाद विफल रहता है और कम से कम एक क्रीमेंट को प्रीकॉमिट संदेश वाला होता है, तो बाकी सिस्टम सिस्टम में आगे बढ़ सकता है और प्रतिबद्ध हो सकता है क्योंकि वे पहले से ही सिस्टम पर राज्य को जानते हैं।

हां, एक बार जब नया समन्वयक देखता है कि उनका एक प्रतिभागी है जो पहले से ही प्रीकॉमिट संदेश प्राप्त कर चुका है, तो यह अन्य प्रतिभागियों को प्रीकॉमिट संदेश भेज देगा।

+0

क्षमा करें, मैं प्रोटोकॉल के इस हिस्से पर थोड़ा अस्पष्ट हूं। प्रतिभागियों को तब तक प्रतिबद्ध नहीं करते जब तक कि वे समन्वयक से DoCommit संदेश प्राप्त नहीं करते? –

+0

मुझे लगता है कि यह जिस तरह से होगा, यह है कि अगर समन्वयक और सभी प्रतिभागियों को सिस्टम की स्थिति जानने में विफल रहता है तो नए समन्वयक चुने जाने के बाद लेनदेन बंद हो जाता है (मुझे लगता है कि आपने जो कहा है उसके अनुसार)। और अगर समन्वयक संदेश भेजने के बाद समन्वयक विफल रहता है और कम से कम एक कण्टेंट को प्रीकॉमिट संदेश वाला होता है, तो बाकी सिस्टम सिस्टम में आगे बढ़ सकता है और प्रतिबद्ध हो सकता है क्योंकि वे पहले से ही सिस्टम पर राज्य को जानते हैं। तो किसी भी समय यह प्रणाली एक अपरिभाषित स्थिति में है –

+0

@AbdulRahman मेरे अपडेट देखें – xvatar

0

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

http://the-paper-trail.org/blog/consensus-protocols-three-phase-commit/ से --cited

तो मुझे लगता है नए समन्वयक साथियों के राज्य क्वेरी करेगा, केवल जब सभी को लाइव साथियों प्राप्त हुआ है पूर्व प्रतिबद्ध संदेश, तो नए समन्वयक भेज देंगे do-प्रतिबद्ध संदेश; अन्यथा, लेनदेन निरस्त कर दिया जाएगा।

0

3 पीसी केवल एकल-बिंदु विफलता को सहन करता है, बहु-बिंदु विफलता नहीं। वास्तव में, यह सुनिश्चित करें 3PC काम करता है बनाने के लिए, निम्न तीन शर्तों के सभी पूरी होनी चाहिए:

  1. कोई नेटवर्क विफलता (अर्थातकोई नेटवर्क विभाजन, हर संदेश गंतव्य के लिए समय समाप्ति से पहले यदि गंतव्य मशीन काम कर रहा है सबसे एक प्रतिभागी पर (नहीं दुर्घटनाग्रस्त))

  2. असफल हो सकता है (दुर्घटना) मिल जाएगा। यह सटीक बनाने के लिए, अगर समन्वयक विफल रहता है (दुर्घटनाओं), सभी साथियों

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

कोई भी व्यावहारिक है। इसलिए मुझे नहीं लगता कि वास्तविक दुनिया में 3 पीसी लागू किया जा सकता है।

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