सादे अंग्रेजी में अंततः स्थिरता


130

मैं अक्सर NoSQL, डेटा ग्रिड आदि के बारे में अलग-अलग भाषणों में अंतिम निरंतरता के बारे में सुनता हूं। ऐसा लगता है कि अंतिम स्थिरता की परिभाषा कई स्रोतों में भिन्न होती है (और शायद एक ठोस डेटा भंडारण पर भी निर्भर करती है)।

क्या कोई भी सामान्य विवरण दे सकता है कि आखिर सामान्य स्थिति क्या है, किसी ठोस डेटा संग्रहण से संबंधित नहीं है?


1
क्या उदाहरण के लिए विकिपीडिया ने मदद नहीं की? en.wikipedia.org/wiki/Eventual_consistency
ओलिवर चार्ल्सवर्थ

21
@OliCharlesworth: नहींं। हो सकता है कि यह सिर्फ मैं ही हूं लेकिन दो बार पढ़ने के बाद भी यह बिल्कुल स्पष्ट नहीं है।
रोमन

जवाबों:


228

अंतिम स्थिरता:

  1. मैं मौसम की रिपोर्ट देखता हूं और सीखता हूं कि कल बारिश होने वाली है।
  2. मैं तुमसे कहता हूं कि कल बारिश होने वाली है।
  3. आपका पड़ोसी अपनी पत्नी से कहता है कि वह कल सनी होने वाली है।
  4. आप अपने पड़ोसी को बताएं कि कल बारिश होने वाली है।

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

सख्त संगति / ACID अनुपालन के विपरीत:

  1. आपका बैंक बैलेंस $ 50 है।
  2. आप $ 100 जमा करें।
  3. आपका बैंक बैलेंस, किसी भी एटीएम से कहीं भी है, $ 150 है।
  4. आपकी बेटी आपके एटीएम कार्ड से $ 40 निकालती है।
  5. आपका बैंक बैलेंस, किसी भी एटीएम से कहीं भी, $ 110 है।

किसी भी समय आपका शेष आपके खाते पर किए गए सभी लेनदेन के वास्तविक योग के अलावा कुछ भी नहीं दिखा सकता है।

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


मुझे समझ नहीं आता। क्या विकास रैखिक या घातीय है?
मैकीक क्रेफ्ट

4
N की एक प्रणाली के संचार उपरि में सख्ती से लगातार नोड्स में वृद्धि को आमतौर पर सुपर-लीनियर (यानी रैखिक से अधिक) समझा जाता है। घातांक हो सकता है, घन हो सकता है ... संचार प्रोटोकॉल पर निर्भर करता है, आदि
क्रिस शिन

2
अच्छा उत्तर। कुछ अनुवर्ती प्रश्न: क्या यह "बुरा" नहीं है जो किसी सर्वर से अनुरोध आपको गलत / पुरानी जानकारी दे सकता है? क्या लोग इसके साथ ठीक हैं या इसका कोई समाधान है? इसके अलावा, विभिन्न सर्वरों पर डेटा को आखिरकार कैसे दोहराया जाता है? यदि सर्वर में से एक नीचे चला गया है, और डेटा को सर्वरों में दोहराया जा रहा है, यदि वह सर्वर वापस आता है, तो उसके बाद उसका डेटा कैसे प्राप्त होता है?
नोबेलारे जुले

5
@noblerare यह "बैड" है जो अलग-अलग डिग्रियों की डिग्री के लिए है। यदि मेरा एटीएम बैलेंस पुराना हो गया तो यह बहुत बुरा होगा। यह कम बुरा है यदि मेरा लॉगिंग डेटाबेस काफी पकड़ा नहीं गया है, या यदि मेरा फेसबुक फीड कुछ सेकंड पीछे है। डेटा प्रतिकृति और स्थायित्व तंत्र बहुत विविध हैं, और विशेष प्लेटफॉर्म पर निर्भर करते हैं। कैसंड्रा के लिए (एक उदाहरण के रूप में) लेखक यह तय कर सकता है कि किसी विशेष लेखन के सफल होने के लिए उसे एक, सभी, या एक कोरम (बहुमत) के लिए प्रतिबद्ध होना चाहिए। HBase एक अलग दृष्टिकोण लेता है, जहां डेटा की प्रत्येक पंक्ति के लिए एक विशेष नोड "मास्टर" है।
क्रिस शिन

दरअसल, ज्यादातर बैंकिंग सिस्टम अंततः सुसंगत होते हैं।
अराजकता

106

अंतिम स्थिरता:

  1. आपका डेटा कई सर्वरों पर दोहराया जाता है
  2. आपके ग्राहक डेटा को पुनः प्राप्त करने के लिए किसी भी सर्वर तक पहुंच सकते हैं
  3. कोई एक सर्वर पर डेटा का एक टुकड़ा लिखता है, लेकिन इसे अभी तक बाकी की नकल नहीं किया गया था
  4. एक क्लाइंट डेटा के साथ सर्वर तक पहुंचता है, और सबसे अद्यतित प्रतिलिपि प्राप्त करता है
  5. एक अलग क्लाइंट (या यहां तक ​​कि एक ही क्लाइंट) एक अलग सर्वर एक्सेस करता है (एक जिसे अभी तक नई कॉपी नहीं मिली है), और पुरानी कॉपी प्राप्त करता है

मूल रूप से, क्योंकि कई सर्वरों में डेटा को दोहराने में समय लगता है, डेटा को पढ़ने का अनुरोध एक नई कॉपी के साथ सर्वर पर जा सकता है, और फिर एक पुरानी कॉपी के साथ सर्वर पर जा सकता है। "अंतिम" शब्द का अर्थ है कि अंततः डेटा को सभी सर्वरों पर दोहराया जाएगा, और इस प्रकार वे सभी अप-टू-डेट कॉपी होंगे।

यदि आप निम्न सर्वर डेटा की अपनी प्रति वापस करना चाहते हैं, और अन्य सर्वरों से परामर्श करने और डेटा की सामग्री पर एक आपसी समझौते तक पहुंचने के लिए समय नहीं है, क्योंकि आप कम विलंबता पढ़ना चाहते हैं, तो अंतिम स्थिरता होनी चाहिए। मैंने इसे और अधिक विस्तार से समझाते हुए एक ब्लॉग पोस्ट लिखा ।


2
अच्छा ब्लॉग पोस्ट। आखिरकार किसी नए व्यक्ति के लिए पढ़ने के लायक। यह उत्तर बेहतर होगा यदि इसे ब्लॉग पोस्ट में और अधिक समझाने के लिए फिर से लिखा गया हो।
स्वयंसिद्ध

1
अपने ब्लॉग में अच्छी तरह से समझाया। साझा करने के लिए धन्यवाद।
अताउर रहमान मुन्ना

12

लगता है कि आपके पास एक आवेदन और इसकी प्रतिकृति है। फिर आपको एप्लिकेशन में नया डेटा आइटम जोड़ना होगा।

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

फिर एप्लिकेशन नीचे में अन्य प्रतिकृति शो के लिए डेटा को सिंक्रनाइज़ करता है

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

इस बीच नए ग्राहक एक प्रतिकृति से डेटा प्राप्त करने जा रहे हैं जो अभी तक अपडेट नहीं हुए हैं। उस स्थिति में वह सही डेटा प्राप्त नहीं कर सकता। क्योंकि सिंक्रोनाइज़ेशन में थोड़ा समय लगता है। उस मामले में यह अंततः स्थिरता नहीं है

समस्या यह है कि हम आखिरकार संगति कैसे कर सकते हैं ?

उसके लिए हम डेटा को अपडेट / बनाने / हटाने के लिए मध्यस्थ एप्लिकेशन का उपयोग करते हैं और डेटा पढ़ने के लिए प्रत्यक्ष क्वेरी का उपयोग करते हैं। वह अंततः स्थिरता बनाने में मदद करता है

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


3

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

स्रोत: http://www.oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf


1

सरल अंग्रेजी में, हम कह सकते हैं: यद्यपि आपका सिस्टम असंगत अवस्थाओं में हो सकता है, उद्देश्य हमेशा डेटा के प्रत्येक टुकड़े के लिए कुछ बिंदु पर निरंतरता तक पहुंचना है।


1

अंततः सुसंगतता का अर्थ है कि परिवर्तनों को प्रचारित होने में समय लगता है और डेटा हर क्रिया के बाद भी समान स्थिति में नहीं हो सकता है, यहां तक ​​कि डेटा के समान कार्यों या परिवर्तनों के लिए भी। यह बहुत खराब चीजें हो सकती हैं जब लोग यह नहीं जानते कि ऐसी प्रणाली के साथ बातचीत करते समय वे क्या कर रहे हैं।

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

सभी दस्तावेज़ स्टोर समान नहीं बनाए गए हैं। इन दिनों (MongoDB) कुछ प्रकार के लेनदेन का समर्थन करते हैं, लेकिन डेटस्टोर्स के माइग्रेट करने की संभावना पुन: कार्यान्वयन के खर्च की तुलना में है।

चेतावनी: डेवलपर्स और यहां तक ​​कि आर्किटेक्ट जो दस्तावेज़ डेटा स्टोर की तकनीक को नहीं जानते या समझते हैं और यह स्वीकार करने से डरते हैं कि अपनी नौकरी खोने के डर से लेकिन आरडीबीएमएस में शास्त्रीय रूप से प्रशिक्षित किया गया है और जो केवल एसीआईडी ​​सिस्टम जानते हैं (कितना अलग हो सकता है) ;) और जो तकनीक को नहीं जानते हैं या इसे सीखने के लिए समय नहीं लेते हैं, वे दस्तावेज़ डेटा स्टोर को डिज़ाइन करने से चूक जाएंगे। वे आरडीबीएमएस या कैशिंग जैसी चीजों के लिए भी इसका उपयोग कर सकते हैं। वे टूट जाएंगे कि परमाणु लेन-देन क्या होना चाहिए, जो पूरे दस्तावेज पर "रिलेशनल" टुकड़ों में काम करना चाहिए, यह भूल जाते हैं कि प्रतिकृति और विलंबता चीजें हैं, या इससे भी बदतर हैं, तीसरे पक्ष के सिस्टम को "लेनदेन" में खींचते हैं। वे ऐसा करेंगे ताकि उनका आरडीबीएमएस उनके डेटा झील को मिरर कर सके, बिना इस बात की परवाह किए कि वह काम करेगा या नहीं, और बिना किसी परीक्षण के, क्योंकि वे जानते हैं कि वे क्या कर रहे हैं। तब वे आश्चर्यचकित हो जाएंगे जब "ऑर्डर" जैसे अलग-अलग दस्तावेज़ों में संग्रहीत जटिल ऑब्जेक्ट्स में अपेक्षा से कम "ऑर्डर आइटम" होंगे, या शायद बिल्कुल भी नहीं। लेकिन ऐसा अक्सर नहीं होगा, या अक्सर इतना होगा कि वे आगे मार्च करेंगे। हो सकता है कि वे विकास में समस्या से भी न टकराएं। फिर, चीजों को फिर से डिज़ाइन करने के बजाय, वे एक रिलेशनल डेटा मॉडल को नकली करने के लिए "देरी" और "रिट्रीट" और "चेक" को फेंक देंगे, जो काम नहीं करेगा, लेकिन बिना किसी लाभ के अतिरिक्त जटिलता जोड़ देगा। लेकिन अब इसकी बहुत देर हो चुकी है - इस चीज को तैनात कर दिया गया है और अब इस पर कारोबार चल रहा है। आखिरकार, पूरी प्रणाली को बाहर फेंक दिया जाएगा और विभाग को आउटसोर्स किया जाएगा और कोई और इसे बनाए रखेगा। यह अभी भी सही ढंग से काम नहीं करेगा, लेकिन वे मौजूदा विफलता की तुलना में कम खर्चीले रूप से असफल हो सकते हैं।


0

अंततः एक स्पेक्ट्रम की तरह स्थिरता है। एक छोर पर आपके पास मजबूत स्थिरता है और दूसरे पर आपके पास आखिरकार निरंतरता है। बीच में स्नैपशॉट जैसे स्तर होते हैं, मेरे लेखन को पढ़ते हैं, बंधी हुई स्थिरता। डौग टेरी ने अपने पेपर में अंततः सुसंगतता के आधार पर एक सुंदर व्याख्या की है ।

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

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

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