प्रतिनिधि इंटरव्यू विषय

सिस्टम डिज़ाइन इंटरव्यू: आप Merkle-tree एंटी-एंट्रॉपी रेप्लिकेट सिंक को कैसे डिज़ाइन करेंगे?

सिस्टम डिज़ाइनकठिन
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

एक रेप्लिकेटेड की-वैल्यू स्टोर के लिए बैकग्राउंड एंटी-एंट्रॉपी सर्विस डिज़ाइन करें। राइट्स जारी रहने के दौरान नोड्स अस्थायी रूप से ऑफलाइन हो सकते हैं; सिस्टम को फुल स्कैन से बचना चाहिए और अंततः कन्वर्ज होना चाहिए। बताएं कि Merkle ट्रीज़ अंतरों का पता कैसे लगाते हैं, रिपेयर को कैसे रेट-लिमिट किया जाता है, और पुराने रेप्लिका को नए डेटा को ओवरराइट करने से कैसे रोका जाता है।

प्रॉम्प्ट और संदर्भ

एक रेप्लिकेटेड की-वैल्यू स्टोर के लिए बैकग्राउंड एंटी-एंट्रॉपी सर्विस डिज़ाइन करें। राइट्स जारी रहने के दौरान नोड्स अस्थायी रूप से ऑफलाइन हो सकते हैं; सिस्टम को फुल स्कैन से बचना चाहिए और अंततः कन्वर्ज होना चाहिए। बताएं कि Merkle ट्रीज़ अंतरों का पता कैसे लगाते हैं, रिपेयर को कैसे रेट-लिमिट किया जाता है, और पुराने रेप्लिका को नए डेटा को ओवरराइट करने से कैसे रोका जाता है।

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

इंटरव्यूअर क्या टेस्ट कर रहा है

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

स्पष्टीकरण के लिए प्रश्न

की-स्पेस पार्टीशन्स, रेप्लिकेशन फैक्टर, रीड और राइट कंसिस्टेंसी, वर्शन रिप्रजेंटेशन, डिलीट सेमेंटिक्स, टॉलरेटेड स्टेलनेस, डेटा साइज और रिपेयर बैंडविड्थ की पुष्टि करें। विफलता मॉडल, पार्टीशन्स, एन्क्रिप्शन, टेनेंट आइसोलेशन, और क्या रिपेयर बिज़नेस ट्रैफ़िक के साथ संसाधनों को साझा कर सकता है, इसके बारे में पूछें।

30-सेकंड का उत्तर

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

विस्तृत उत्तर

चरण 1: पार्टीशन्स और वर्शन्स को परिभाषित करें

की-स्पेस को एक ओनर रेप्लिका सेट के साथ स्थिर रेंज में विभाजित करें। प्रत्येक रिकॉर्ड एक मोनोटोनिक वर्शन, वेक्टर क्लॉक या कॉज़ल वर्शन रखता है। डिलीट के लिए प्रोपेगेट होने वाले टॉम्बस्टोन्स की आवश्यकता होती है; गायब रिकॉर्ड का अर्थ यह नहीं हो सकता कि वह "कभी अस्तित्व में ही नहीं था।"

चरण 2: एक तुलनीय Merkle ट्री बनाएं

लीव्स एक नियतात्मक क्रम में कीज़ और वर्शन डाइजेस्ट को एकत्रित करती हैं; पैरेंट्स चाइल्ड हैश को स्टोर करते हैं। रीबिल्ड या इंक्रीमेंटल अपडेट दोनों संभव हैं, लेकिन राइट स्नैपशॉट बाउंड्री स्पष्ट होनी चाहिए ताकि एक रूट का एक ही अर्थ हो।

चरण 3: रूट से लीव्स तक तुलना करें

पहले रेंज की पहचान और रूट्स की तुलना करें। समान रूट्स को किसी ट्रांसफर की आवश्यकता नहीं होती है। असमान रूट्स बच्चों के माध्यम से तब तक रिकर्स करते हैं जब तक कि सबसे छोटी भिन्न रेंज न मिल जाए, फिर कीज़ और वर्शन सारांशों को बैच किया जाता है। हॉट रेंज को विभाजित करें या बैच साइज़ को सीमित करें ताकि एक रिपेयर अन्य पार्टीशन्स को ब्लॉक न करे।

चरण 4: वर्शन्स और डिलीट्स का आर्बिट्रेशन करें

जब कोई भिन्न की आती है तो वर्शन संबंधों की तुलना करें। कॉनकरेंट वर्शन्स को केवल आगमन समय के आधार पर हल नहीं किया जा सकता है; मर्ज करें, कॉन्फ्लिक्ट को बनाए रखें, या कोई बिज़नेस नियम लागू करें। क्लीनअप से पहले टॉम्बस्टोन्स को एक रिटेंशन अवधि और एक सुरक्षित वॉटरमार्क की आवश्यकता होती है।

चरण 5: रिपेयर बैचेस को आइडेम्पोटेंट बनाएं

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

चरण 6: रिसोर्सेज और कॉनकरेंसी का बजट बनाएं

टेनेंट, रेंज, नोड और प्राथमिकता के आधार पर कॉनकरेंसी, बैंडविड्थ, CPU, डिस्क-रीड और कतार बजट निर्धारित करें। बिज़नेस ट्रैफ़िक को प्राथमिकता मिलती है। जब कोई नोड ओवरलोड हो या रेप्लिकेशन लैग किसी सीमा को पार कर जाए तो रिपेयर को रोकें। एक्सपोनेंशियल बैकऑफ़ में जिटर जोड़ें ताकि नोड्स एक साथ रीट्राई न करें।

चरण 7: टोपोलॉजी परिवर्तन और विफलता को संभालें

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

चरण 8: कन्वर्जेंस साबित करें और संचालन करें

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

मॉडल उत्तर

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

सामान्य गलतियां

रूट भिन्न होने पर पूरा शार्ड भेजना

Merkle ट्री का उद्देश्य सबसे छोटी भिन्न रेंज को रिकर्सिव रूप से ढूंढना है। पूर्ण ट्रांसफर नेटवर्क और डिस्क लागत को कई गुना बढ़ा देता है और हॉट पार्टीशन्स को ब्लॉक कर सकता है।

हर कॉन्फ्लिक्ट को last-write-wins से हल करना

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

डिलीट्स और टॉम्बस्टोन्स को अनदेखा करना

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

फॉलो-अप प्रश्न और उत्तर

Merkle ट्रीज़ निरंतर राइट्स को कैसे संभालते हैं?

एक कंसिस्टेंट स्नैपशॉट या वर्शन वॉटरमार्क की तुलना करें जबकि नए राइट्स बाद के वर्शन्स में प्रवेश करते हैं; बैच पूरा होने के बाद रिपेयर वॉटरमार्क को आगे बढ़ाएं। बदलता हुआ रूट एक सिंगल स्नैपशॉट नहीं होता है।

क्या होगा यदि कोई एक रेंज अत्यधिक हॉट हो?

इसे और विभाजित करें, बैच और कॉनकरेंसी को सीमित करें, और सबसे बड़े स्टेलनेस विंडो वाली चाइल्ड रेंज को प्राथमिकता दें। आवश्यकता पड़ने पर अस्थायी रूप से रीड एम्प्लीफिकेशन कम करें या रेप्लिका को स्थानांतरित करें।

यदि रिपेयर के बीच में कोई नोड रीस्टार्ट हो जाए तो क्या होगा?

एक लीज़, बैच सीक्वेंस और परसिस्टेड प्रगति से फिर से शुरू करें। टारगेट-साइड वर्शन चेक डुप्लिकेट बैचेस को सुरक्षित बनाते हैं, और सोर्स स्नैपशॉट को फिर से मान्य करता है।

आप पुराने टॉम्बस्टोन्स को बहुत जल्दी हटाए जाने से कैसे रोकते हैं?

उन्हें केवल तभी साफ़ करें जब सभी प्रासंगिक रेप्लिका एक सुरक्षित वॉटरमार्क या पावती (acknowledgement) बिंदु को पार कर लें, और सबसे पुराने टॉम्बस्टोन की आयु की निगरानी करें। पुष्टि न होने पर उन्हें बनाए रखें।

रीड रिपेयर एंटी-एंट्रॉपी से किस प्रकार भिन्न है?

रीड रिपेयर बिज़नेस रीड पाथ पर खोजे गए अंतरों को ठीक करता है और हॉट कीज़ को कवर करता है। एंटी-एंट्रॉपी सक्रिय बैकग्राउंड स्कैनिंग है और कोल्ड डेटा को कवर करती है। दोनों वर्शन और रिपेयर सेमेंटिक्स साझा करते हैं।

स्वचालित रिपेयर कब रुकनी चाहिए?

जब कॉन्फ्लिक्ट्स को मर्ज नहीं किया जा सकता है, डेटा करप्ट है, ऑथराइजेशन असामान्य है, या संसाधन ओवरलोड रहते हैं, तो एक रेंज को रोकें और आइसोलेट करें। मानव रिकवरी के लिए साक्ष्य और स्नैपशॉट सुरक्षित रखें।

सार्वजनिक स्रोत

संबंधित प्रश्न

संबंधित इंटरव्यू टूल

सिस्टम डिज़ाइन उत्तर के लिए हल करें का उपयोग करें

पहले आवश्यकताओं को स्पष्ट करें, फिर स्केल, आर्किटेक्चर, कंपोनेंट चयन और ट्रेड-ऑफ की ओर बढ़ें।

टूल देखें