एक वितरित हैश टेबल (DHT) की सरल मूल व्याख्या


जवाबों:


237

ठीक है, वे मौलिक रूप से एक बहुत सरल विचार हैं। DHT आपको एक शब्दकोश जैसा इंटरफ़ेस देता है, लेकिन नोड्स पूरे नेटवर्क में वितरित किए जाते हैं। DHTs के साथ चाल यह है कि नोड जो किसी विशेष कुंजी को संग्रहीत करने के लिए हो जाता है, उस कुंजी को हैशिंग द्वारा पाया जाता है, इसलिए वास्तव में आपके हैश-टेबल बाल्टी नेटवर्क में स्वतंत्र नोड होते हैं।

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

एक उदाहरण DHT जो इन समस्याओं में से कुछ से निपटता है, n नोड्स की एक तार्किक रिंग है, प्रत्येक कीस्पेस के 1 / n के लिए जिम्मेदारी ले रहा है। एक बार जब आप नेटवर्क में एक नोड जोड़ते हैं, तो यह दो अन्य नोड्स के बीच बैठने के लिए रिंग पर एक जगह पाता है, और इसके सिबलिंग नोड्स में कुछ चाबियों की जिम्मेदारी लेता है। इस दृष्टिकोण की सुंदरता यह है कि रिंग में कोई भी अन्य नोड प्रभावित नहीं होता है; केवल दो सहोदर नोड्स को चाबियों का पुनर्वितरण करना होगा।

उदाहरण के लिए, तीन नोड वाले रिंग में कहें कि पहले नोड में चाबियाँ 0-10, दूसरी 11-20 और तीसरी 21-30 हैं। अगर एक चौथा नोड आता है और नोड्स 3 और 0 के बीच खुद को सम्मिलित करता है (याद रखें, वे एक रिंग में हैं), यह कहने के लिए ज़िम्मेदारी ले सकता है कि 3 के कीस्पेस का आधा हिस्सा है, इसलिए अब यह 26-30 और नोड 3 के साथ 21 से संबंधित है -25।

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

विकिपीडिया पृष्ठ पढ़ें, और यदि आप वास्तव में गहराई से जानना चाहते हैं, तो हार्वर्ड में इस पाठ्यक्रम पृष्ठ की जांच करें जिसमें एक बहुत व्यापक पढ़ने की सूची है।


23
+1 अच्छा जवाब। तीसरे पैराग्राफ में आपका क्या मतलब है ("एक उदाहरण डीएचटी जो इन समस्याओं में से कुछ से निपटता है, एन नोड्स की एक तार्किक अंगूठी है") सुसंगत हाशिंग है। यह एक बहुत ही दिलचस्प विषय है, जिसका उपयोग Apache Cassandra, एक डिस्ट्रीब्यूटेड डेटाबेस, जो कि Facebook द्वारा किया गया है, में किया जाता है। पेपर से लिंक करें (इसे पढ़ने के लिए): cs.cornell.edu/projects/ladis2009/papers/lakshman-ladis2009.pdf
santiagobasulto

5
एक रिंग-आधारित लुकअप प्रोटोकॉल जो समझने में बहुत आसान है, कॉर्ड है: pdos.csail.mit.edu/papers/chord:sigcomm01
ThomasWeiss

क्या आप बता सकते हैं कि नोड पर कुंजी-मूल्य कैसे संग्रहीत हैं? क्या यह हैश टेबल या DB का कुछ रूप होगा?
वैंड मेकर

@ हेनरी, क्या "नोड रिंग" केवल एक पेड़ की संरचना नहीं है?
पचेरियर

इलिनोइस के यूनी अपने वितरित सिस्टम वर्ग के हिस्से के रूप में हर सेमेस्टर को कॉर्ड प्रोटोकॉल सिखाता है अगर कोई और अधिक पठन सामग्री चाहता है - पाठ्यक्रम
सिद्धार्थ

11

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

http://en.wikipedia.org/wiki/Distributed_hash_table


7

मैं हेनरीआर के उपयोगी उत्तर पर जोड़ना चाहूंगा क्योंकि मेरे पास लगातार हैशिंग में एक अंतर्दृष्टि थी। एक सामान्य / भोली हैश लुकिंग दो चर का एक फ़ंक्शन है, जिसमें से एक बाल्टी की संख्या है। सुसंगत हैशिंग की सुंदरता यह है कि हम समीकरण से "बाल्टी" की संख्या को खत्म करते हैं।

भोले हैशिंग में, पहला चर तालिका में संग्रहीत की जाने वाली वस्तु की कुंजी है। हम कुंजी "x" को कॉल करेंगे। दूसरा चर बकेट की संख्या है, "एन"। इसलिए, यह निर्धारित करने के लिए कि किस बाल्टी / मशीन में ऑब्जेक्ट स्टोर किया गया है, आपको गणना करना होगा: हैश (x) मॉड (एन)। इसलिए, जब आप बाल्टी की संख्या बदलते हैं, तो आप उस पते को भी बदलते हैं जिस पर लगभग हर वस्तु संग्रहीत होती है।

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

http://michaelnielsen.org/blog/consistent-hashing/


1
वैसे भी आपको मॉड की आवश्यकता नहीं होगी? मान लीजिए कि आपको 3 सर्वर मिले हैं। hash(x)/Rआपको 34500 देता है। आपको अभी भी 34500% 3 करने की आवश्यकता है
पचेरियर

आपका ब्लॉगपोस्ट अस्पष्ट btw है, आपको चरण के चरण को एक कार्यशील उदाहरण के स्नैपशॉट द्वारा सूचीबद्ध करना चाहिए जहां नोड्स जोड़े और हटाए गए पंक्तियों के साथ हटाए जाते हैं।
पचेरियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.