इरेज़र कोडिंग वितरित भंडारण प्रणालियों के लिए एक प्रमुख डेटा सुरक्षा विधि है। यह ब्लॉग पोस्ट बताता है कि कैसे इरेज़र कोडिंग डेटा सुरक्षा के लिए एंटरप्राइज़ आवश्यकताओं को पूरा करती है और इसे मिनिओ में कैसे लागू किया जाता है।
किसी भी उद्यम परिवेश में डेटा सुरक्षा आवश्यक है क्योंकि हार्डवेयर विफलता, विशेष रूप से ड्राइव विफलता, आम है।
परंपरागत रूप से, हार्डवेयर दोष सहनशीलता प्रदान करने के लिए विभिन्न प्रकार की RAID तकनीकों या मिररिंग/प्रतिकृति का उपयोग किया जाता था। मिररिंग और प्रतिकृति डेटा की एक या अधिक पूर्ण अनावश्यक प्रतियों पर निर्भर करती है - यह भंडारण का उपभोग करने का एक महंगा तरीका है। RAID5 और RAID6 जैसी अधिक जटिल प्रौद्योगिकियाँ भंडारण ओवरहेड को कम करते हुए समान दोष सहनशीलता प्रदान करती हैं। RAID एकल नोड पर डेटा सुरक्षा के लिए एक अच्छा समाधान है, लेकिन विफल ड्राइव को ऑनलाइन वापस लाने के लिए आवश्यक पुनर्निर्माण कार्यों में समय लगने के कारण स्केल करने में विफल रहता है।
कई वितरित सिस्टम डेटा सुरक्षा के लिए 3-तरफा प्रतिकृति का उपयोग करते हैं, जहां मूल डेटा 3 अलग-अलग ड्राइव में पूर्ण रूप से लिखा जाता है और कोई भी एक ड्राइव मूल डेटा की मरम्मत या पढ़ने में सक्षम है। प्रतिकृति न केवल भंडारण उपयोग के मामले में अक्षम है, बल्कि विफलता से उबरने पर यह परिचालन रूप से भी अक्षम है। जब कोई ड्राइव विफल हो जाती है, तो सिस्टम स्वयं को कम प्रदर्शन पर रीड-ओनली मोड में रख देगा, जबकि यह विफल ड्राइव को बदलने के लिए एक अक्षुण्ण ड्राइव को एक नई ड्राइव पर पूरी तरह से कॉपी कर देता है।
वितरित भंडारण के लिए डेटा सुरक्षा के लिए इरेज़र कोडिंग लागू की जाती है क्योंकि यह लचीला और कुशल है। यह डेटा फ़ाइलों को डेटा और समता ब्लॉकों में विभाजित करता है और इसे एन्कोड करता है ताकि एन्कोडेड डेटा का हिस्सा उपलब्ध न होने पर भी प्राथमिक डेटा पुनर्प्राप्त किया जा सके। क्षैतिज रूप से स्केलेबल वितरित स्टोरेज सिस्टम कई ड्राइव और नोड्स में एन्कोडेड डेटा को सहेजकर डेटा सुरक्षा प्रदान करने के लिए इरेज़र कोडिंग पर निर्भर करते हैं। यदि कोई ड्राइव या नोड विफल हो जाता है या डेटा दूषित हो जाता है, तो मूल डेटा को अन्य ड्राइव और नोड्स पर सहेजे गए ब्लॉक से पुनर्निर्माण किया जा सकता है।
इरेज़र कोडिंग नोड्स और ड्राइव में डेटा को अलग करके बेहतर दक्षता के साथ अन्य तकनीकों की तरह ही ड्राइव विफलताओं की समान संख्या को सहन करने में सक्षम है। कई अलग-अलग इरेज़र कोडिंग एल्गोरिदम हैं, और रीड-सोलोमन जैसे अधिकतम दूरी सेपरेबल (एमडीएस) कोड सबसे बड़ी भंडारण दक्षता प्राप्त करते हैं।
ऑब्जेक्ट स्टोरेज में, संरक्षित किए जाने वाले डेटा की इकाई एक ऑब्जेक्ट है। किसी ऑब्जेक्ट को n ड्राइव पर संग्रहीत किया जा सकता है। यदि k संभावित विफलता को इंगित करता है, तो k < n, और MDS कोड के साथ सिस्टम n - k ड्राइव विफलताओं को सहन करने की गारंटी दे सकता है, जिसका अर्थ है कि k ड्राइव किसी भी ऑब्जेक्ट तक पहुंचने के लिए पर्याप्त हैं।
किसी ऑब्जेक्ट को ध्यान में रखते हुए जिसका आकार M बाइट्स है, प्रत्येक कोडित ऑब्जेक्ट का आकार M/k है (मेटाडेटा के आकार को अनदेखा करते हुए)। ऊपर दिखाए गए एन-वे प्रतिकृति की तुलना में, एन = 5 और के = 3 के लिए कॉन्फ़िगर किए गए इरेज़र कोडिंग के साथ, एक वितरित स्टोरेज सिस्टम 2 ड्राइव के नुकसान को सहन कर सकता है, जबकि स्टोरेज दक्षता में 80% सुधार होता है। उदाहरण के लिए, 10 पीबी डेटा प्रतिकृति के लिए 30 पीबी से अधिक स्टोरेज की आवश्यकता होगी, जबकि ऑब्जेक्ट स्टोरेज को इरेज़र कोडिंग का उपयोग करके उसी डेटा को सुरक्षित रूप से संग्रहीत और संरक्षित करने के लिए 15-20 पीबी की आवश्यकता होगी। इरेज़र कोडिंग को डेटा के समता ब्लॉकों के विभिन्न अनुपातों के लिए कॉन्फ़िगर किया जा सकता है, जिसके परिणामस्वरूप भंडारण दक्षता की एक श्रृंखला होती है। मिनिआईओ आपके वातावरण में आवश्यकताओं को निर्धारित करने में सहायता के लिए एक सहायक इरेज़र कोड कैलकुलेटर रखता है।
मिनिओ प्रति-ऑब्जेक्ट, इनलाइन इरेज़र कोडिंग ( संदर्भ के लिए आधिकारिक मिनिओ दस्तावेज) के साथ डेटा की सुरक्षा करता है जो उच्चतम संभव प्रदर्शन प्रदान करने के लिए असेंबली कोड में लिखा जाता है। मिनिओ तेज इरेज़र कोडिंग के लिए कई नोड्स में होस्ट सीपीयू संसाधनों का पूरी तरह से लाभ उठाने के लिए इंटेल AVX512 निर्देशों का उपयोग करता है। एक मानक सीपीयू, तेज एनवीएमई ड्राइव और 100 जीबीपीएस नेटवर्क निकट तार गति पर इरेज़र कोडित वस्तुओं को लिखने का समर्थन करता है।
मिनिओ ऑब्जेक्ट को डेटा और समता ब्लॉकों में विभाजित करने के लिए रीड-सोलोमन कोड का उपयोग करता है जिसे किसी भी वांछित अतिरेक स्तर पर कॉन्फ़िगर किया जा सकता है। इसका मतलब यह है कि 8 पैरिटी कॉन्फ़िगरेशन के साथ 16 ड्राइव सेटअप में, एक ऑब्जेक्ट को 8 डेटा और 8 पैरिटी ब्लॉक के रूप में धारीदार किया जाता है। भले ही आप 7 ((एन/2)-1) ड्राइव खो देते हैं, चाहे वह समता हो या डेटा, आप अभी भी शेष ड्राइव से डेटा को विश्वसनीय रूप से पुनर्निर्माण कर सकते हैं। मिनिओ का कार्यान्वयन यह सुनिश्चित करता है कि वस्तुओं को पढ़ा जा सकता है या नई वस्तुएं लिखी जा सकती हैं, भले ही कई डिवाइस खो जाएं या अनुपलब्ध हों।
मिनिओ ऑब्जेक्ट को इरेज़र सेट के आकार के आधार पर डेटा और समता ब्लॉकों में विभाजित करता है, फिर बेतरतीब ढंग से और समान रूप से एक सेट में ड्राइव में डेटा और समता ब्लॉक वितरित करता है ताकि प्रत्येक ड्राइव में प्रति ऑब्जेक्ट एक से अधिक ब्लॉक न हो। जबकि एक ड्राइव में एकाधिक ऑब्जेक्ट के लिए डेटा और समता ब्लॉक दोनों हो सकते हैं, एक एकल ऑब्जेक्ट में प्रति ड्राइव एक से अधिक ब्लॉक नहीं होता है, जब तक कि सिस्टम में पर्याप्त संख्या में ड्राइव मौजूद हैं। संस्करणित ऑब्जेक्ट के लिए, मिनिओ किसी एक ड्राइव पर शून्य ओवरलैप बनाए रखते हुए डेटा और समता भंडारण के लिए समान ड्राइव का चयन करता है।
नीचे दी गई तालिका कॉन्फ़िगर करने योग्य डेटा और समता विकल्पों और साथ में भंडारण उपयोग अनुपात के साथ मिनिओ में इरेज़र कोडिंग के उदाहरण प्रदान करती है।
कुल ड्राइव (एन) | डेटा ड्राइव (डी) | समता ड्राइव (पी) | भंडारण उपयोग अनुपात |
---|---|---|---|
16 | 8 | 8 | 2.00 |
16 | 9 | 7 | 1.79 |
16 | 10 | 6 | 1.60 |
16 | 11 | 5 | 1.45 |
16 | 12 | 4 | 1.34 |
16 | 13 | 3 | 1.23 |
16 | 14 | 2 | 1.14 |
मिनिओ का बैक एंड लेआउट वास्तव में काफी सरल है। आने वाली प्रत्येक वस्तु को एक इरेज़र सेट सौंपा गया है। एक इरेज़र सेट मूल रूप से ड्राइव का एक सेट होता है, और एक क्लस्टर में एक या अधिक इरेज़र सेट होते हैं, जो कुल डिस्क की मात्रा से निर्धारित होते हैं।
आइए MiniIO में प्रयुक्त प्रारूप और लेआउट को समझने के लिए एक सरल उदाहरण देखें।
यह ध्यान रखना महत्वपूर्ण है कि प्रारूप डेटा और समता ड्राइव के अनुपात के बारे में है - चाहे हमारे पास एक एकल ड्राइव के साथ चार नोड हों या प्रत्येक 100 ड्राइव के साथ चार नोड हों (मिनियो को अक्सर घने जेबीओडी कॉन्फ़िगरेशन में तैनात किया जाता है)।
हम अपने चार नोड्स को 100 ड्राइव के साथ कॉन्फ़िगर कर सकते हैं ताकि डिफ़ॉल्ट 16 के इरेज़र सेट आकार का उपयोग किया जा सके। यह तार्किक लेआउट है, और यह इरेज़र कोडिंग गणना की परिभाषाओं का हिस्सा है। प्रत्येक 16 ड्राइव में 8 डेटा और 8 पैरिटी ड्राइव से बना एक इरेज़र सेट होता है। इस मामले में, इरेज़र सेट 400 भौतिक ड्राइव पर आधारित है, जो समान रूप से डेटा और समता ड्राइव में विभाजित है, और 175 ड्राइव तक के नुकसान को सहन कर सकता है।
ऑब्जेक्ट के साथ परमाणु रूप से लिखे गए मिनिओ के एक्सएल मेटाडेटा में उस ऑब्जेक्ट से संबंधित सभी जानकारी शामिल होती है। मिनिओ में कोई अन्य मेटाडेटा नहीं है। निहितार्थ नाटकीय हैं - सब कुछ वस्तु के साथ स्व-निहित है, यह सब सरल और आत्म-वर्णनात्मक है। एक्सएल मेटाडेटा इरेज़र कोड एल्गोरिदम को इंगित करता है, उदाहरण के लिए दो समता वाले दो डेटा, ब्लॉक आकार और चेकसम। डेटा के साथ चेकसम लिखे जाने से मिनियो को स्ट्रीमिंग डेटा का समर्थन करते हुए मेमोरी को अनुकूलित करने की अनुमति मिलती है, जिससे उन सिस्टमों पर स्पष्ट लाभ मिलता है जो स्ट्रीमिंग डेटा को मेमोरी में रखते हैं, फिर इसे डिस्क पर लिखते हैं और अंत में सीआरसी -32 चेकसम उत्पन्न करते हैं।
जब कोई बड़ी वस्तु, यानी. 10 एमबी से अधिक, मिनिओ को लिखा जाता है, एस3 एपीआई इसे मल्टीपार्ट अपलोड में तोड़ देता है। अपलोड करते समय पार्ट का आकार क्लाइंट द्वारा निर्धारित किया जाता है। S3 के लिए आवश्यक है कि प्रत्येक भाग कम से कम 5 एमबी (अंतिम भाग को छोड़कर) और 5 जीबी से अधिक न हो। S3 विनिर्देशन के आधार पर किसी वस्तु में 10,000 तक भाग हो सकते हैं। एक ऐसी वस्तु की कल्पना करें जो 320 एमबी की है। यदि यह ऑब्जेक्ट 64 भागों में टूटा हुआ है, तो मिनिओ ड्राइव में भागों को भाग.1, भाग.2,...से लेकर भाग.64 तक लिख देगा। भाग लगभग समान आकार के हैं, उदाहरण के लिए, मल्टीपार्ट के रूप में अपलोड किया गया 320 एमबी ऑब्जेक्ट 64 5 एमबी भागों में विभाजित किया जाएगा।
अपलोड किया गया प्रत्येक भाग पट्टी पर इरेज़र कोडित है। भाग.1 उस ऑब्जेक्ट का पहला भाग है जिसे अपलोड किया गया था और सभी भाग ड्राइव पर क्षैतिज रूप से धारीदार हैं। प्रत्येक भाग अपने डेटा ब्लॉक, पैरिटी ब्लॉक और एक्सएल मेटाडेटा से बना है। मिनिओ राइट्स को घुमाता है इसलिए सिस्टम हमेशा एक ही ड्राइव पर डेटा नहीं लिखेगा और एक ही ड्राइव पर समानता नहीं रखेगा। प्रत्येक ऑब्जेक्ट को स्वतंत्र रूप से घुमाया जाता है, जिससे क्लस्टर में सभी ड्राइव का एक समान और कुशल उपयोग संभव हो जाता है, साथ ही डेटा सुरक्षा भी बढ़ती है।
किसी ऑब्जेक्ट को पुनः प्राप्त करने के लिए, मिनिओ यह निर्धारित करने के लिए हैश गणना करता है कि ऑब्जेक्ट कहाँ सहेजा गया था, हैश को पढ़ता है और आवश्यक इरेज़र सेट और ड्राइव तक पहुँचता है। जब ऑब्जेक्ट को पढ़ा जाता है, तो एक्सएल मेटाडेटा में वर्णित डेटा और समता ब्लॉक होते हैं। मिनिओ में डिफ़ॉल्ट इरेज़र सेट 12 डेटा और 4 समता है, जिसका अर्थ है कि जब तक मिनिओ किसी भी 12 ड्राइव को पढ़ सकता है तब तक ऑब्जेक्ट परोसा जा सकता है।
वितरित सिस्टम में डेटा सुरक्षा के लिए उपयोग की जाने वाली अन्य तकनीकों की तुलना में इरेज़र कोडिंग के कई प्रमुख फायदे हैं।
ऐसे कई कारण हैं जिनकी वजह से इरेज़र कोडिंग RAID की तुलना में ऑब्जेक्ट स्टोरेज के लिए बेहतर अनुकूल है। मिनिओ इरेज़र कोडिंग न केवल कई ड्राइव और नोड्स के विफल होने की स्थिति में वस्तुओं को डेटा हानि से बचाता है, बल्कि मिनिओ ऑब्जेक्ट स्तर पर सुरक्षा और उपचार भी करता है। एक समय में एक वस्तु को ठीक करने की क्षमता RAID की तुलना में एक नाटकीय लाभ है जो वॉल्यूम स्तर पर ठीक होती है। RAID में एक भ्रष्ट वस्तु को MinIO में सेकंड बनाम घंटों में पुनर्स्थापित किया जा सकता है। यदि कोई ड्राइव खराब हो जाती है और उसे बदल दिया जाता है, तो मिनिओ नई ड्राइव को पहचानता है, इसे इरेज़र सेट में जोड़ता है, और फिर सभी ड्राइव में ऑब्जेक्ट को सत्यापित करता है। इससे भी महत्वपूर्ण बात यह है कि पढ़ना और लिखना एक दूसरे को प्रभावित नहीं करते हैं, जिससे बड़े पैमाने पर प्रदर्शन संभव हो जाता है। पेटाबाइट भंडारण में सैकड़ों अरब वस्तुओं के साथ वहां मिनिओ की तैनाती है।
मिनिओ में इरेज़र कोड कार्यान्वयन से डेटासेंटर में परिचालन दक्षता में सुधार होता है। प्रतिकृति के विपरीत, ड्राइव और नोड्स में डेटा का कोई लंबा पुनर्निर्माण या पुन: सिंक्रनाइज़ेशन नहीं होता है। यह मामूली लग सकता है, लेकिन वस्तुओं को स्थानांतरित करना/कॉपी करना बहुत महंगा हो सकता है, और 16TB ड्राइव के विफल होने और डेटासेंटर नेटवर्क से किसी अन्य ड्राइव पर कॉपी होने पर स्टोरेज सिस्टम और नेटवर्क पर भारी कर लगता है।
यदि इस ब्लॉग पोस्ट ने आपकी जिज्ञासा जगाई है, तो हमारे पास एक लंबा इरेज़र कोडिंग प्राइमर उपलब्ध है। मिनिओ डाउनलोड करें और आज ही इरेज़र कोडिंग के साथ डेटा की सुरक्षा शुरू करें।
यहाँ भी प्रकाशित किया गया है.