रेडिस शार्डिंग

Redisa Sardinga



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

अनुमापकता

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

मान लें कि आपके पास 100 जीबी रैम है और आपको 200 जीबी डेटा रखने की जरूरत है। इस मामले में, आपके पास दो विकल्प हैं:







  • सिस्टम में अधिक रैम जोड़कर स्केल अप करें
  • 100 जीबी रैम के साथ एक और सर्वर इंस्टेंस जोड़कर स्केल आउट करें

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





रेडिस शार्डिंग

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





स्केलिंग को ध्यान में रखते हुए कई सर्वरों के बीच डेटा को विभाजित करने या वितरित करने के इस दृष्टिकोण को कहा जाता है तेज करना . सभी सर्वर जो डेटा के भाग को स्टोर करते हैं, कहलाते हैं टुकड़े .



कैसे शार्डिंग की जाती है - एल्गोरिथम शार्डिंग

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

Redis key name और modulo का उपयोग करके हैश मान की गणना करना सबसे आम तरीका है। फिर, इसे सिस्टम में उपलब्ध रेडिस शार्ड्स से विभाजित करें।

HASH_SLOT = CRC16 (कुंजी) मॉड 16384

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

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

रेडिस शार्डिंग के लाभ

Redis शार्डिंग आपके डेटाबेस सिस्टम को न्यूनतम परिवर्तनों के साथ कई लाभ प्रदान करता है।

उच्च थ्रूपुट

चूंकि Redis सिंगल-थ्रेडेड है, इसलिए कई क्लाइंट अनुरोधों को संसाधित करने के लिए कई CPU कोर का उपयोग करके समानांतर प्रक्रिया नहीं की जा सकती है। इसलिए, नए शार्क या सर्वर इंस्टेंस को जोड़ने से यह गारंटी मिलती है कि आप समानांतर में रेडिस ऑपरेशन कर सकते हैं। यह आपके Redis डेटाबेस में प्रति सेकंड संचालन बढ़ाता है, जो अंततः आपको उच्च थ्रूपुट देता है।

उच्च उपलब्धता

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

प्रतिकृतियां पढ़ें

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

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

निष्कर्ष

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