CodeGym/Java Course/All lectures for HI purposes/अपाचे कैसेंड्रा: एक क्लस्टर में डेटा संग्रहीत करना

अपाचे कैसेंड्रा: एक क्लस्टर में डेटा संग्रहीत करना

उपलब्ध

5.1 डेटा वितरण

आइए विचार करें कि क्लस्टर नोड्स के बीच कुंजी के आधार पर डेटा कैसे वितरित किया जाता है। कैसंड्रा आपको डेटा वितरण रणनीति सेट करने की अनुमति देता है। इस तरह की पहली रणनीति md5 कुंजी मान - एक यादृच्छिक विभाजनकर्ता के आधार पर डेटा वितरित करती है। दूसरा स्वयं कुंजी के बिट प्रतिनिधित्व को ध्यान में रखता है - क्रमिक मार्कअप (बाइट-ऑर्डर पार्टीशनर)।

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

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

जैसा कि मैंने कहा, रैंडमपार्टिशनर प्रत्येक कुंजी के लिए 128-बिट md5 की गणना करता है। यह निर्धारित करने के लिए कि कौन से नोड में डेटा संग्रहीत किया जाएगा, यह बस नोड्स के सभी लेबल से सबसे छोटे से सबसे बड़े तक जाता है, और जब लेबल का मान md5 कुंजी के मान से अधिक हो जाता है, तो यह नोड, एक के साथ भंडारण के लिए बाद के नोड्स (लेबल के क्रम में) की संख्या का चयन किया जाता है। चयनित नोड्स की कुल संख्या प्रतिकृति कारक के बराबर होनी चाहिए। प्रतिकृति स्तर प्रत्येक कीस्पेस के लिए निर्धारित है और आपको डेटा की अतिरेक (डेटा अतिरेक) को समायोजित करने की अनुमति देता है।

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

यहां समान दूरी वाले लेबल वाले 6 नोड्स के क्लस्टर रिंग को प्रदर्शित करने के लिए बिल्ट-इन नोडेटूल यूटिलिटी का उपयोग करते हुए एक उदाहरण दिया गया है।

5.2 लिखते समय डेटा संगति

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

प्रत्येक अनुरोध के लिए, पढ़ने और लिखने दोनों के लिए, डेटा स्थिरता का स्तर निर्धारित करना संभव है।

एक लेखन के लिए, यह स्तर प्रतिकृति नोड्स की संख्या को प्रभावित करेगा जो उपयोगकर्ता को नियंत्रण वापस करने से पहले ऑपरेशन (डेटा लिखित) के सफल समापन की पुष्टि की प्रतीक्षा करेगा। एक रिकॉर्ड के लिए, ये स्थिरता स्तर हैं:

  • एक - समन्वयक सभी प्रतिकृति नोड्स को अनुरोध भेजता है, लेकिन पहले नोड से पुष्टि की प्रतीक्षा करने के बाद, उपयोगकर्ता को नियंत्रण लौटाता है;
  • दो - वही, लेकिन समन्वयक नियंत्रण वापस करने से पहले पहले दो नोड्स से पुष्टि की प्रतीक्षा करता है;
  • तीन - समान, लेकिन नियंत्रण वापस करने से पहले समन्वयक पहले तीन नोड्स से पुष्टि की प्रतीक्षा करता है;
  • कोरम - एक कोरम एकत्र किया जाता है: समन्वयक आधे से अधिक प्रतिकृति नोड्स से रिकॉर्ड की पुष्टि की प्रतीक्षा कर रहा है, अर्थात् गोल (एन / 2) + 1, जहां एन प्रतिकृति स्तर है;
  • LOCAL_QUORUM - समन्वयक उसी डेटा केंद्र में आधे से अधिक प्रतिकृति नोड्स से पुष्टि की प्रतीक्षा कर रहा है जहां समन्वयक स्थित है (प्रत्येक अनुरोध के लिए संभावित रूप से भिन्न)। इससे आप अन्य डेटा केंद्रों को डेटा भेजने में होने वाले विलंब से छुटकारा पा सकते हैं। इस लेख में कई डेटा केंद्रों के साथ काम करने के मुद्दों पर विचार किया गया है;
  • EACH_QUORUM - समन्वयक स्वतंत्र रूप से प्रत्येक डेटा केंद्र में आधे से अधिक प्रतिकृति नोड्स से पुष्टि की प्रतीक्षा कर रहा है;
  • सभी - समन्वयक सभी प्रतिकृति नोड्स से पुष्टि की प्रतीक्षा करता है;
  • कोई भी - डेटा लिखना संभव बनाता है, भले ही सभी प्रतिकृति नोड प्रतिक्रिया नहीं दे रहे हों। समन्वयक या तो प्रतिकृति नोड्स में से किसी एक से पहली प्रतिक्रिया के लिए प्रतीक्षा करता है, या समन्वयक पर संकेतित हैंडऑफ़ का उपयोग करके संग्रहीत किए जाने वाले डेटा के लिए।

5.3 पढ़ते समय डेटा संगति

पढ़ने के लिए, स्थिरता स्तर उन प्रतिकृति नोड्स की संख्या को प्रभावित करेगा जिन्हें पढ़ा जाएगा। पढ़ने के लिए, ये स्थिरता स्तर हैं:

  • एक - समन्वयक निकटतम प्रतिकृति नोड को अनुरोध भेजता है। कैसेंड्रा कॉन्फ़िगरेशन में निर्दिष्ट संभावना के साथ बाकी प्रतिकृतियां भी रीड रिपेयर के लिए पढ़ी जाती हैं;
  • दो समान हैं, लेकिन समन्वयक निकटतम दो नोड्स को अनुरोध भेजता है। सबसे बड़े टाइमस्टैम्प वाला मान चुना गया है;
  • तीन - पिछले विकल्प के समान, लेकिन तीन नोड्स के साथ;
  • कोरम - एक कोरम एकत्र किया जाता है, अर्थात, समन्वयक आधे से अधिक प्रतिकृति नोड्स के लिए अनुरोध भेजता है, अर्थात् गोल (N / 2) + 1, जहां N प्रतिकृति स्तर है;
  • LOCAL_QUORUM - डेटा केंद्र में एक कोरम एकत्र किया जाता है जिसमें समन्वय होता है, और नवीनतम टाइमस्टैम्प वाला डेटा लौटाया जाता है;
  • EACH_QUORUM - प्रत्येक डेटा केंद्र में कोरम की बैठक के बाद समन्वयक डेटा लौटाता है;
  • सभी - समन्वयक सभी प्रतिकृति नोड्स से पढ़ने के बाद डेटा लौटाता है।

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

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

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

इस प्रकार, एक कोरम पढ़ने और लिखने की निरंतरता के स्तर के साथ, मजबूत स्थिरता हमेशा बनी रहेगी, और यह पढ़ने और लिखने की विलंबता के बीच एक संतुलन होगा। सभी लिखने और एक पढ़ने के साथ मजबूत स्थिरता होगी और पढ़ना तेज और अधिक उपलब्ध होगा, यानी असफल नोड्स की संख्या जिस पर एक पठन अभी भी पूरा हो जाएगा, कोरम से अधिक हो सकता है।

लेखन कार्यों के लिए, सभी प्रतिकृति वर्कर नोड्स की आवश्यकता होगी। वन लिखते समय, सभी को पढ़ते हुए, सख्त स्थिरता भी होगी, और लिखने का कार्य तेज होगा और लिखने की उपलब्धता बड़ी होगी, क्योंकि यह केवल पुष्टि करने के लिए पर्याप्त होगा कि कम से कम एक सर्वर पर लेखन कार्य हुआ, जबकि पढ़ना धीमा है और सभी प्रतिकृति नोड्स की आवश्यकता है। यदि किसी एप्लिकेशन में सख्त स्थिरता की आवश्यकता नहीं है, तो पढ़ना और लिखना दोनों कार्यों को गति देना संभव है, साथ ही कम स्थिरता स्तर सेट करके उपलब्धता में सुधार करना संभव है।

टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं