2015-10-02 11 views
8

हाल ही में मैंने कई बार पढ़ा है कि दो चरण की प्रतिबद्धता खराब है, लेकिन हमेशा एक साइड नोट के रूप में। तो इसके साथ कभी भी एक अच्छा स्पष्टीकरण नहीं था।दो चरणों का कारण क्या हो सकता है?

उदाहरण के लिए CQRS Journey Chapter 5 में:

दूसरा, हम दो चरण से बचने के लिए कोशिश कर रहे हैं क्योंकि वे हमेशा लंबे समय में कारण समस्याओं करता है।

या पेज 563 पर Implementing Domain-Driven Design में:

दूसरा ReadRecorts() बुनियादी ढांचे द्वारा किया जाता है घटनाओं को दोहराने के लिए, दो चरण की आवश्यकता के बिना उन्हें प्रकाशित करने के लिए प्रतिबद्ध ...

मैंने सोचा कि एकाधिक डेटाबेस सर्वरों के बीच स्थिरता सुनिश्चित करने के लिए दो चरण की प्रतिबद्धता लागू की गई है।

दो चरण के कामकाज का उपयोग करते समय क्या समस्याएं हो सकती हैं? उनसे बचने के लिए बेहतर क्यों है?

+1

देखें http://www.enterpriseintegrationpatterns.com/docs/IEEE_Software_Design_2PC.pdf – Matt

उत्तर

8

2 चरण प्रतिबद्ध प्रोटोकॉल की अवरुद्ध प्रकृति के कारण सबसे बड़ी समस्या स्केलेबिलिटी है।

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

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

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