कैप प्रमेय - उपलब्धता और विभाजन सहिष्णुता


207

जबकि मैंने कैप में "उपलब्धता" (ए) और "विभाजन सहिष्णुता" (पी) को समझने की कोशिश की, मुझे विभिन्न लेखों से स्पष्टीकरण को समझना मुश्किल लगा।

मुझे लगता है कि ए और पी एक साथ जा सकते हैं (मुझे पता है कि यह मामला नहीं है, और यही कारण है कि मैं समझने में असफल हूं)।

सरल शब्दों में समझाते हुए, A और P क्या हैं और उनमें क्या अंतर है?


1
यहाँ एक लेख है जो सादा अंग्रेजी में CAP की व्याख्या करता है ksat.me/a-plain-english-introduction-to-cap-theorem
तुषार साहा

2
रेडीमेड anslwers के लिए मत जाओ। प्रत्येक C, A, P को अलग से पढ़ें, समझें और समझें। एक वितरित क्लस्टर आर्किटेक्चर (शायद 3 DB) डिज़ाइन करें और अब अपनी समझ लागू करें। देखें कि वितरित (DB) के विफल होने पर C, A, P का क्या होता है। एक बार जब आप समझ जाते हैं, तो उत्तर की जांच करें और अपने तर्क के साथ आवेदन करें। याद रखें - यदि आप समझते हैं, तो भी यह स्पष्ट नहीं हो सकता है। इसलिए, अपनी समझ को लागू करें और सोचें। धन्यवाद
मेडेन

1
किसी तरह उपरोक्त ksat.me लिंक 404 url ​​पर चला जाता है क्योंकि यह '/' के साथ समाप्त होता है। ksat.me/a-plain-english-introduction-to-cap-theorem यह ठीक काम करता है और 'C', 'A', 'P'
vivek.m

जवाबों:


402

संगति का अर्थ है कि डेटा क्लस्टर में समान है, इसलिए आप किसी भी नोड से / से पढ़ सकते हैं या लिख ​​सकते हैं और समान डेटा प्राप्त कर सकते हैं।

उपलब्धता का मतलब है कि क्लस्टर में एक नोड नीचे जाने पर भी क्लस्टर तक पहुंचने की क्षमता।

विभाजन सहिष्णुता का अर्थ है कि दो नोड्स (दोनों नोड्स ऊपर हैं, लेकिन संचार नहीं कर सकते हैं) के बीच "विभाजन" (संचार ब्रेक) होने पर भी क्लस्टर कार्य करता रहता है।

उपलब्धता और विभाजन सहिष्णुता दोनों प्राप्त करने के लिए, आपको निरंतरता छोड़नी होगी। विचार करें कि क्या आपके पास मास्टर-मास्टर सेटअप में दो नोड्स, एक्स और वाई हैं। अब, X और Y के बीच नेटवर्क संचार के बीच विराम है, इसलिए वे अपडेट सिंक नहीं कर सकते। इस बिंदु पर आप या तो कर सकते हैं:

ए) नोड्स को सिंक से बाहर निकलने (निरंतरता देने), या

बी) क्लस्टर को "डाउन" (उपलब्धता को देखते हुए) पर विचार करें

उपलब्ध सभी संयोजन हैं:

  • CA - डेटा सभी नोड्स के बीच संगत है - जब तक कि सभी नोड ऑनलाइन हैं - और आप किसी भी नोड से पढ़ / लिख सकते हैं और सुनिश्चित करें कि डेटा समान है, लेकिन यदि आप कभी भी नोड्स के बीच एक विभाजन विकसित करते हैं, तो डेटा होगा सिंक से बाहर (और विभाजन हल होने के बाद फिर से सिंक नहीं करेगा)।
  • CP - डेटा सभी नोड्स के बीच सुसंगत है, और नोड के नीचे जाने पर अनुपलब्ध होने से विभाजन सहनशीलता (डेटा डेसिंक को रोकना) को बनाए रखता है।
  • एपी - नोड्स ऑनलाइन रहते हैं भले ही वे एक दूसरे के साथ संवाद न कर सकें और विभाजन हल हो जाने के बाद डेटा को फिर से सिंक करेंगे, लेकिन आपको इस बात की गारंटी नहीं है कि सभी नोड्स में एक ही डेटा होगा (या तो विभाजन के दौरान या बाद में)

आपको ध्यान देना चाहिए कि सीए सिस्टम व्यावहारिक रूप से मौजूद नहीं है (भले ही कुछ सिस्टम ऐसा होने का दावा करते हैं)।


1
एपी में हमने गारंटी क्यों नहीं दी है कि सभी नोड्स में समान डेटा होगा? ठीक है, क्योंकि हमारे पास "सी" नहीं है .. लेकिन यह मेरे लिए स्पष्ट नहीं है ... मैं जानना चाहता हूं कि ऐसा क्यों होता है ...
grep

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

4
पार्टी के लिए देर हो चुकी है, लेकिन यह प्रत्येक श्रेणी में कुछ उदाहरण दिखाने लायक है, जैसे। blog.nahurst.com/visual-guide-to-nosql-systems
बिटिन

यह वास्तव में नोड-क्लस्टर के बारे में एक साधारण चित्रण / उदाहरण को शामिल करने में मदद करेगा जिसका मतलब यहाँ है। क्या यह एक प्रणाली या डेटा टेबल / संग्रह अलग-अलग प्रणाली में फैली है या कुछ और है?
श्रोत्रेव

व्यावहारिक रूप से, नोड्स अक्सर कुछ नेटवर्किंग तंत्र द्वारा जुड़े अलग-अलग सिस्टम (या उन सिस्टम पर चलने वाले सॉफ़्टवेयर) होते हैं।
क्रिस हेडल

43

C और A के साथ समान शब्दों में P को ध्यान में रखना एक गलती है, बल्कि C, A, P में से 3 में से 2 'धारणा है। जिस तरह से मैं सीएपी प्रमेय की व्याख्या करता हूं वह यह है, "वितरित डेटा स्टोर में, नेटवर्क विभाजन के समय आपको या तो संगति या उपलब्धता को चुनना होगा और दोनों को प्राप्त नहीं किया जा सकता है"। नए NoSQL सिस्टम उपलब्धता पर ध्यान केंद्रित करने की कोशिश कर रहे हैं, जबकि पारंपरिक ACID डेटाबेस में संगति पर अधिक ध्यान केंद्रित किया गया था।

आप वास्तव में सीए का चयन नहीं कर सकते हैं, नेटवर्क विभाजन कुछ ऐसा नहीं है जिसे कोई भी करना चाहे, यह वितरित प्रणाली की सिर्फ एक अवांछनीय वास्तविकता है, नेटवर्क विफल हो सकता है। सवाल यह है कि ऐसा होने पर आप अपने आवेदन के लिए क्या व्यापार करते हैं। उस लेख से जिस व्यक्ति ने पहली बार उस शब्द को तैयार किया था, वह इस बात को स्पष्ट रूप से समझाता है।


18

पी के बारे में विशेष रूप से यहां मैं कैप की चर्चा कर रहा हूं।

सीए केवल तभी संभव है जब आप एक अखंड, एकल सर्वर डेटाबेस (शायद प्रतिकृति के साथ लेकिन एक "विफलता ब्लॉक" पर सभी डेटा के साथ ठीक हैं - सर्वर आंशिक रूप से विफल नहीं माने जाते हैं)।

यदि आपकी समस्या के लिए स्केल आउट, डिस्ट्रिब्यूटेड और मल्टी-सर्वर --- नेटवर्क पार्टिशन की आवश्यकता हो सकती है। आपको पहले से ही पी। की आवश्यकता है। कुछ समस्याएं जो मैं दृष्टिकोण करता हूं, वे एकल-सर्वर-हमेशा प्रतिमानों के लिए उत्तरदायी हैं (या, जैसा कि स्टोनब्रेकर ने कहा, "वितरित टेबल स्टेक है")। यदि आप एक CA समस्या पा सकते हैं, तो पारंपरिक गैर-स्केल-आउट RDBMS जैसे समाधान बहुत सारे लाभ प्रदान करते हैं।

मेरे लिए, दुर्लभ: इसलिए हम एपी बनाम सीपी पर चर्चा करते हैं।

विभाजन होने पर आप केवल AP और CP ऑपरेशन के बीच चयन करते हैं। यदि नेटवर्क और हार्डवेयर सही तरीके से चल रहा है, तो आप अपना केक प्राप्त करें और उसे खाएं।

आइए एपी / सीपी के भेद पर चर्चा करें।

एपी - जब नेटवर्क विभाजन होता है, तो स्वतंत्र भागों को स्वतंत्र रूप से काम करने दें।

CP - जब कोई नेटवर्क विभाजन होता है, तो नोड्स को बंद करें या रीड एंड डिसॉल्व करें ताकि निर्धारक विफलताएं हों।

मुझे ऐसे आर्किटेक्चर पसंद हैं जो दोनों कर सकते हैं, क्योंकि कुछ समस्याएं एपी हैं और कुछ सीपी हैं - और कुछ डेटाबेस दोनों कर सकते हैं। सीपी और एपी समाधानों के बीच, सूक्ष्मताएं भी हैं।

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

एक CP प्रणाली में, छोटे विभाजनों (एकल सर्वर) के साथ आपको कितनी अनुपलब्धता मिलती है, यदि कोई हो? एक सीपी प्रणाली में ग्रेटर प्रतिकृति अनुपलब्धता को बढ़ा सकती है, सिस्टम उन ट्रेडऑफ़ को कैसे संभालता है?

सीपी बनाम एपी के साथ ये सभी प्रश्न पूछे जाने हैं।

इस क्षेत्र में अभी बहुत अच्छा पढ़ा गया है ब्रेवर की "12 साल बाद" पोस्ट। मेरा मानना ​​है कि यह स्पष्टता के साथ सीएपी बहस को आगे बढ़ाता है, और इसकी अत्यधिक अनुशंसा करता है।

http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed


CA सिस्टम वास्तव में भ्रमित कर रहा है, मेरे पास एक अखंड डेटाबेस के आपके CA उदाहरण के बारे में एक प्रश्न है। यदि यह सिर्फ एक सर्वर है, तो "ए" कहां से आता है, क्योंकि यह मुझे प्रतीत होता है कि उक्त सर्वर की विफलता के परिणामस्वरूप कोई सेवा उपलब्ध नहीं होगी?
चूडेर

1
अच्छा प्रश्न। सर्वर डिस्क विफल हो सकते हैं, या यहां तक ​​कि DIMM विफल हो सकते हैं, या बिजली की आपूर्ति विफल हो सकती है यदि वे उच्च उपलब्धता के लिए डिज़ाइन किए गए हैं। यहां तक ​​कि कई बिजली ग्रिड पर होने की कल्पना करो। आपको उच्च और उच्च उपलब्धता प्राप्त होती है, लेकिन अंदर कभी भी "नेटवर्क" नहीं होता है, जिसमें असहमति वाले घटकों के साथ विभाजन और चलाने की क्षमता होती है। जबकि अधिक गूढ़ हार्डवेयर मौजूद है (SQL NON-STOP देखें), विफल रहने और फिर से शुरू होने वाले घटकों के साथ RAID सरणियों के उदाहरण इन दिनों अभी भी आम हैं, और एक ही सर्वर में बहुत अधिक उपलब्धता प्रदान करते हैं।
ब्रायन बुल्कोव्स्की

13

सीएपी प्रमेय

संगति:

दिए गए क्लाइंट के लिए एक रीड को सबसे हाल के लेखन (जैसे ACID) को वापस करने की गारंटी है । यदि उस दौरान कोई अनुरोध आता है , तो उसे नोड (ओं) में / भर में डेटा सिंक पूरा होने तक इंतजार करना होगा


उपलब्धता:

प्रत्येक नोड (यदि विफल नहीं है) हमेशा प्रश्नों को निष्पादित करता है और हमेशा अनुरोधों का जवाब देना चाहिए। इससे कोई फर्क नहीं पड़ता कि वह नवीनतम प्रति लौटाता है या नहीं।


विभाजन सहिष्णुता:

नेटवर्क विभाजन होने पर सिस्टम कार्य करना जारी रखेगा।


एपी के संबंध में , उपलब्धता (हमेशा सुलभ) ( कैसेंद्र ) या बिना ( RDBMS ) विभाजन सहिष्णुता के साथ मौजूद हो सकती है

तस्वीर स्रोत


2

मुझे लगता है कि विभाजन सहिष्णुता को किसी भी उत्तर में अच्छी तरह से नहीं समझाया गया है, इसलिए केवल कुछ और चीजों को समझाने के लिए कैप प्रमेय का अर्थ है:

सी : (रैखिकता या मजबूत स्थिरता) मोटे तौर पर मतलब है

यदि ऑपरेशन B एक ऑपरेशन सफलतापूर्वक पूरा होने के बाद शुरू हुआ, तो ऑपरेशन B को उसी स्थिति में सिस्टम को देखना होगा, जैसा कि ऑपरेशन A, या एक नए राज्य (लेकिन कभी पुराना राज्य) के पूरा होने पर नहीं था।

:

"सिस्टम में एक गैर-विफल [डेटाबेस] नोड द्वारा प्राप्त प्रत्येक अनुरोध को [गैर-त्रुटि] प्रतिक्रिया में परिणाम होना चाहिए"। यह कुछ नोड के लिए अनुरोध को संभालने में सक्षम होने के लिए पर्याप्त नहीं है: किसी भी गैर-विफल नोड को इसे संभालने में सक्षम होने की आवश्यकता है। कई तथाकथित "अत्यधिक उपलब्ध" (यानी कम डाउनटाइम) सिस्टम वास्तव में उपलब्धता की इस परिभाषा को पूरा नहीं करते हैं।

पी :

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

स्रोत: बहुत बढ़िया मार्टिन kleppmann है काम

बस कुछ उदाहरण लेने के लिए: कैसेंड्रा अधिकतम एपी सिस्टम हो सकता है। लेकिन यदि आप इसे कोरम के आधार पर पढ़ने या लिखने के लिए कॉन्फ़िगर करते हैं तो यह CAP- उपलब्ध नहीं रहता है (CAP प्रमेय की परिभाषा के अनुसार उपलब्ध है) और केवल P सिस्टम है।


1

सरल कैप प्रमेय में कहा गया है कि एक वितरित प्रणाली के लिए एक साथ सभी तीन गारंटी प्रदान करना असंभव है:

यहां छवि विवरण दर्ज करें

संगति

प्रत्येक नोड में एक ही समय में एक ही डेटा होता है

उपलब्धता

हर बार डेटा परोसने के लिए कम से कम एक नोड उपलब्ध होना चाहिए

विभाजन सहिष्णुता

प्रणाली की विफलता बहुत दुर्लभ है

ज्यादातर हर प्रणाली केवल न्यूनतम दो सुविधाओं की गारंटी दे सकती है या तो सीए, एपी, या सीपी


0

संगति - जब हम रीड रिक्वेस्ट भेज रहे हैं, यदि यह परिणाम लौट रहा है, तो इसे क्लाइंट रिक्वेस्ट द्वारा दिए गए सबसे हाल के लेखन को वापस करना चाहिए। उपलब्धता - पढ़ने / लिखने के लिए आपका अनुरोध हमेशा सफल होना चाहिए। विभाजन सहिष्णुता - जब नेटवर्क विभाजन होता है (कुछ मशीनों के एक दूसरे के साथ बात करने के लिए समस्या) होती है, तो सिस्टम को अभी भी काम करना चाहिए।

वितरित में ऐसी संभावनाएँ हैं कि नेटवर्क विभाजन होगा और हम CAP के "P" से बच नहीं सकते हैं। इसलिए हम "संगति" और "उपलब्धता" के बीच चयन करते हैं।

http://bigdatadose.com/understanding-cap-theorem/


0

कैप प्रमेय को समझने का सरल तरीका:

नेटवर्क विभाजन के मामले में, किसी को पूर्ण उपलब्धता और सही स्थिरता के बीच चयन करने की आवश्यकता होती है।

निरंतरता लेने का अर्थ है कि ग्राहक की क्वेरी का जवाब देने में सक्षम नहीं होना क्योंकि सिस्टम सबसे हाल के लेखन को वापस करने की गारंटी नहीं दे सकता है। यह बलिदान की उपलब्धता है।

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

यह स्पष्टीकरण इस उत्कृष्ट लेख से है । आशा है कि यह मदद करेगा।


0

मैं बहुत से लिंक से गुज़रा हूं, लेकिन उनमें से कोई भी मुझे संतोषजनक जवाब नहीं दे सका, सिवाय एक के।

इसलिए मैं बहुत सरल शब्दों में सीएपी का वर्णन कर रहा हूं।

  • संगति : एक ही डेटा को वापस करना चाहिए , भले ही यह किस नोड से आ रहा है।

  • उपलब्धता : नोड को जवाब देना चाहिए (उपलब्ध होना चाहिए)।

  • विभाजन सहिष्णुता : क्लस्टर को जवाब देना चाहिए (उपलब्ध होना चाहिए), भले ही नोड्स के बीच कोई विभाजन (यानी नेटवर्क विफलता) हो।

(इसके अलावा एक मुख्य कारण यह भ्रमित करता है कि इसका बुरा नामकरण सम्मेलन है। यदि मेरे पास सही था, तो मैंने डीएनसी दिया होगा इसके बजाय : डेटा संगतता , नोड उपलब्धता , क्लस्टर उपलब्धता , जहां प्रत्येक क्रमशः संगतता , उपलब्धता और विभाजन सहिष्णुता से मेल खाती है )

CP डेटाबेस: CP डेटाबेस उपलब्धता की कीमत पर स्थिरता और विभाजन सहिष्णुता प्रदान करता है। जब कोई विभाजन दो नोड्स के बीच होता है, तो सिस्टम को गैर-सुसंगत नोड को बंद करना होता है (यानी, इसे अनुपलब्ध) जब तक कि विभाजन हल नहीं हो जाता।

एपी डेटाबेस: एक एपी डेटाबेस स्थिरता की कीमत पर उपलब्धता और विभाजन सहिष्णुता प्रदान करता है। जब एक विभाजन होता है, तो सभी नोड्स उपलब्ध रहते हैं, लेकिन विभाजन के गलत अंत में वे दूसरों की तुलना में डेटा का एक पुराना संस्करण वापस कर सकते हैं। (जब विभाजन हल हो जाता है, तो एपी डेटाबेस आमतौर पर सिस्टम में सभी विसंगतियों को ठीक करने के लिए नोड्स को फिर से टाइप करता है।)

सीए डेटाबेस: एक सीए डेटाबेस सभी नोड्स में स्थिरता और उपलब्धता बचाता है। यदि सिस्टम में कोई दो नोड्स के बीच विभाजन होता है, तो यह ऐसा नहीं कर सकता है, और इसलिए गलती सहनशीलता प्रदान नहीं कर सकता है। एक वितरित प्रणाली में, विभाजन से बचा नहीं जा सकता है। इसलिए, जब हम सिद्धांत में सीए वितरित डेटाबेस पर चर्चा कर सकते हैं, सभी व्यावहारिक उद्देश्यों के लिए, एक सीए वितरित डेटाबेस मौजूद हो सकता है लेकिन मौजूद नहीं होना चाहिए।

इसलिए, इसका मतलब यह नहीं है कि यदि आपके पास एक की जरूरत है तो आप अपने वितरित आवेदन के लिए एक सीए डेटाबेस नहीं कर सकते। कई रिलेशनल डेटाबेस, जैसे कि PostgreSQL, स्थिरता और उपलब्धता प्रदान करते हैं और प्रतिकृति का उपयोग करके कई नोड्स में तैनात किया जा सकता है।

स्रोत: https://www.ibm.com/cloud/learn/cap-theorem

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.