रेडिस प्रतिकृति और उच्च उपलब्धता में महारत हासिल करना:उत्पादन वातावरण के लिए एक व्यावहारिक मार्गदर्शिका
<पी>
परिचय
<पी> जब सब कुछ स्वस्थ होता है तो रेडिस बहुत ठोस महसूस करता है। असली परीक्षा तब शुरू होती है जब कोई चीज़ टूटती है। एक नोड क्रैश हो जाता है, एक वर्चुअल मशीन रीबूट हो जाती है, एक कंटेनर गायब हो जाता है, या एक नेटवर्क समस्या सिस्टम के हिस्से को अलग कर देती है। <पी> आगे क्या होता है यह पूरी तरह से इस बात पर निर्भर करता है कि प्रतिकृति और उच्च उपलब्धता को कैसे डिज़ाइन किया गया था। कई टीमें मानती हैं कि रेडिस स्वचालित रूप से विफलताओं को संभाल लेता है, लेकिन ऐसा नहीं है। रेडिस बिल्डिंग ब्लॉक प्रदान करता है, तैयार समाधान नहीं। <पी> प्रतिकृति और उच्च उपलब्धता विभिन्न समस्याओं का समाधान करती है। रेडिस दोनों का समर्थन करता है, लेकिन लचीली उत्पादन प्रणालियों के निर्माण के लिए अंतर को समझना महत्वपूर्ण है। रेडिस प्रतिकृति वास्तव में क्या करती है
<पी> इसके मूल में, रेडिस प्रतिकृति एक नोड से दूसरे नोड में डेटा कॉपी करने के बारे में है। एक प्राथमिक नोड, जिसे आमतौर पर मास्टर कहा जाता है, सभी लेखन कार्यों को संभालता है। एक या अधिक प्रतिकृति नोड्स परिवर्तनों की एक सतत धारा प्राप्त करते हैं और अपने डेटा को सिंक में रखते हैं। <पी> प्रतिकृति तीन मुख्य कारणों से मौजूद है:रीड स्केलिंग, फेलओवर तत्परता और डेटा अतिरेक। हालाँकि, अकेले प्रतिकृति उच्च उपलब्धता की गारंटी नहीं देती है। यह केवल इसे बनाने के लिए आवश्यक सामग्री प्रदान करता है। प्रतिकृति हुड के तहत कैसे काम करती है
<पी> जब कोई प्रतिकृति मास्टर से जुड़ती है, तो यह प्रारंभिक सिंक्रनाइज़ेशन प्रक्रिया से शुरू होती है। मास्टर अपने वर्तमान डेटा का एक स्नैपशॉट बनाता है और उसे प्रतिकृति पर भेजता है। प्रतिकृति इस स्नैपशॉट को मेमोरी में लोड करती है। <पी> प्रारंभिक सिंक के बाद, मास्टर बाद के सभी राइट कमांड को प्रतिकृति पर स्ट्रीम करता है। सुसंगत बने रहने के लिए प्रतिकृति इन आदेशों को उसी क्रम में लागू करती है। <पी> यह दृष्टिकोण कुशल और सरल है, लेकिन यह महत्वपूर्ण ट्रेडऑफ़ पेश करता है। प्रतिकृति डिफ़ॉल्ट रूप से अतुल्यकालिक है, जिसका अर्थ है कि हमेशा एक छोटी विंडो होती है जहां डेटा मास्टर पर मौजूद होता है लेकिन अभी तक प्रतिकृतियों पर नहीं। अतुल्यकालिक प्रतिकृति और डेटा हानि जोखिम
<पी> अतुल्यकालिक प्रतिकृति रेडिस को तेज़ और प्रतिक्रियाशील रहने की अनुमति देती है, लेकिन इसका यह भी अर्थ है कि मास्टर विफल होने पर कुछ डेटा हानि संभव है। <पी> यदि प्रतिकृतियों को नवीनतम राइट्स प्राप्त होने से पहले मास्टर क्रैश हो जाता है, तो वे राइट्स खो जाते हैं। रेडिस इस वास्तविकता को छिपाने का प्रयास नहीं करता है। कैश डेटा के लिए, यह आमतौर पर स्वीकार्य है। गंभीर स्थिति के लिए, यह नहीं हो सकता है। <पी> रेडिस प्रतिकृति को सख्त बनाने के लिए विकल्प प्रदान करता है, लेकिन सख्त गारंटी विलंबता को बढ़ाती है और उपलब्धता को कम करती है। यह तय करना कि कितना डेटा हानि स्वीकार्य है, एक महत्वपूर्ण वास्तुशिल्प निर्णय है। रीड को स्केल करने के लिए प्रतिकृतियों का उपयोग करना
<पी> रेडिस प्रतिकृति का उपयोग करने का एक सामान्य कारण रीड ट्रैफ़िक को मापना है। एप्लिकेशन मास्टर को लिखने के संचालन को निर्देशित कर सकते हैं और प्रतिकृतियों में पढ़ने के संचालन को वितरित कर सकते हैं। <पी> इससे मास्टर पर भार कम हो जाता है और समग्र थ्रूपुट में सुधार होता है। हालाँकि, क्योंकि प्रतिकृति अतुल्यकालिक है, प्रतिकृतियाँ थोड़ा पुराना डेटा लौटा सकती हैं। <पी> कैशिंग प्रोफ़ाइल या कॉन्फ़िगरेशन जैसे उपयोग के मामलों के लिए, यह आमतौर पर ठीक है। ऐसे परिदृश्यों के लिए जिनमें मजबूत निरंतरता की आवश्यकता होती है, यह स्वीकार्य नहीं हो सकता है। टीमों को जानबूझकर यह समझौता करना चाहिए। क्या होता है जब मास्टर विफल हो जाता है
<पी> केवल प्रतिकृति ही मास्टर विफलता को नहीं संभालती। जब मास्टर नीचे चला जाता है, तो प्रतिकृतियां सिंक में रहती हैं लेकिन बाहरी विफलता तंत्र के बिना स्वचालित रूप से प्रचारित नहीं होती हैं। <पी> उच्च उपलब्धता के लिए विफलताओं का पता लगाने, निर्णयों का समन्वय करने और एक नए मास्टर को बढ़ावा देने के लिए कुछ की आवश्यकता होती है। यहीं पर फेलओवर सिस्टम चलन में आते हैं। रेडिस सेंटिनल और उच्च उपलब्धता
<पी> रेडिस सेंटिनल रेडिस में उच्च उपलब्धता जोड़ने का पारंपरिक समाधान है। सेंटिनल प्रक्रियाएं रेडिस उदाहरणों की निगरानी करती हैं, विफलताओं का पता लगाती हैं, और आम सहमति तक पहुंचने के लिए एक दूसरे के साथ संवाद करती हैं। <पी> जब प्रहरी सहमत होते हैं कि एक मास्टर नीचे है, तो प्रतिकृतियों में से एक को नए मास्टर बनने के लिए पदोन्नत किया जाता है। प्रहरी ग्राहकों को भी सूचित करते हैं ताकि वे सही नोड से पुनः जुड़ सकें। <पी> सेंटिनल अतिरिक्त घटकों और जटिलता का परिचय देता है। प्रभावी होने के लिए, एकाधिक सेंटिनल नोड्स चलने चाहिए। सच्ची उच्च उपलब्धता के लिए एक अकेला प्रहरी पर्याप्त नहीं है। सेंटिनल कैसे असफल होने का निर्णय लेता है
<पी> झूठे फेलओवर से बचने के लिए सेंटिनल टाइमआउट और कोरम का उपयोग करता है। एकाधिक प्रहरी को इस बात से सहमत होना चाहिए कि पदोन्नति होने से पहले मास्टर पहुंच योग्य नहीं है। <पी> यह डिज़ाइन विश्वसनीयता में सुधार करता है लेकिन इसका मतलब है कि विफलता तात्कालिक नहीं है। हमेशा एक छोटी अवधि होती है जब मास्टर अनुपलब्ध होता है और कोई प्रतिस्थापन सक्रिय नहीं होता है। <पी> एप्लिकेशन को इस विंडो को खूबसूरती से संभालने के लिए डिज़ाइन किया जाना चाहिए। पुनः प्रयास, टाइमआउट और फ़ॉलबैक व्यवहार आवश्यक हैं। रेडिस क्लस्टर और अंतर्निहित उच्च उपलब्धता
<पी> रेडिस क्लस्टर प्रतिकृति और फेलओवर को सीधे सिस्टम में एकीकृत करता है। प्रत्येक शार्ड में एक मास्टर और प्रतिकृतियां होती हैं, और मास्टर विफल होने पर विफलता स्वचालित रूप से होती है। <पी> यह सेंटिनल की आवश्यकता को हटा देता है लेकिन अन्य बाधाओं का परिचय देता है। कुंजी वितरण, ग्राहक व्यवहार और क्रॉस-शार्क संचालन के लिए सावधानीपूर्वक डिज़ाइन की आवश्यकता होती है। <पी> रेडिस क्लस्टर कठोर वास्तुशिल्प सीमाओं को लागू करते हुए उच्च उपलब्धता को सरल बनाता है। फ़ेलओवर का मतलब शून्य डाउनटाइम नहीं है
<पी> एक आम ग़लतफ़हमी यह है कि रेडिस फ़ेलओवर शून्य डाउनटाइम की गारंटी देता है। वास्तव में, फेलओवर तेज़ है लेकिन तात्कालिक नहीं। <पी> फ़ेलओवर के दौरान, कुछ अनुरोध विफल हो जाएंगे या पुनः प्रयास की आवश्यकता होगी। अच्छी तरह से डिज़ाइन किए गए सिस्टम इस व्यवहार की अपेक्षा करते हैं और शालीनता से ठीक हो जाते हैं। खराब डिज़ाइन वाले सिस्टम क्रैश हो सकते हैं या कैस्केडिंग विफलताओं को ट्रिगर कर सकते हैं। <पी> उच्च उपलब्धता लचीलेपन में सुधार करती है, पूर्णता में नहीं। विभाजित मस्तिष्क और इसके जोखिम
<पी> विभाजित मस्तिष्क तब होता है जब एक से अधिक नोड मानते हैं कि यह स्वामी है। रेडिस और सेंटिनल को इसे रोकने के लिए डिज़ाइन किया गया है, लेकिन नेटवर्क विभाजन और गलत कॉन्फ़िगरेशन अभी भी इसका कारण बन सकते हैं। <पी> विभाजित मस्तिष्क के परिणामस्वरूप परस्पर विरोधी लेखन और डेटा भ्रष्टाचार हो सकता है। इस जोखिम को कम करने के लिए उचित सेंटिनल कोरम, सही नेटवर्क सेटअप और समझदार टाइमआउट की आवश्यकता होती है। <पी> इन विवरणों को नज़रअंदाज करना दुर्लभ लेकिन गंभीर घटनाओं का एक सामान्य कारण है। प्रतिकृति अंतराल और प्रदर्शन प्रभाव
<पी> प्रतिकृति अंतराल आमतौर पर छोटा होता है लेकिन कभी शून्य नहीं होता। भारी लेखन भार के तहत, प्रतिकृतियाँ मास्टर के पीछे पड़ सकती हैं। <पी> यदि उच्च अंतराल की अवधि के दौरान विफलता होती है, तो डेटा हानि बढ़ जाती है। उन प्रणालियों के लिए प्रतिकृति अंतराल की निगरानी करना आवश्यक है जहां डेटा अखंडता मायने रखती है। <पी> अंतराल में अचानक वृद्धि अक्सर अंतर्निहित प्रदर्शन या संसाधन समस्याओं का संकेत देती है। प्रतिकृति बैकअप क्यों नहीं है
<पी> प्रतिकृति को बैकअप के साथ भ्रमित नहीं किया जाना चाहिए। यदि मास्टर पर डेटा हटा दिया जाता है, तो उस विलोपन को तुरंत दोहराया जाता है। <पी> बैकअप मानवीय त्रुटि और तार्किक भ्रष्टाचार से बचाता है। प्रतिकृति हार्डवेयर या प्रक्रिया विफलता से बचाती है। यदि रेडिस मूल्यवान डेटा संग्रहीत करता है तो दोनों की आवश्यकता होती है। सामान्य रेडिस HA गलतियाँ
<पी> Redis की उच्च उपलब्धता को डिज़ाइन करते समय टीमें अक्सर वही गलतियाँ करती हैं। इनमें प्रतिकृति को उच्च उपलब्धता के बराबर मानना, केवल एक सेंटिनल चलाना, प्रतिकृति अंतराल को अनदेखा करना, फेलओवर का परीक्षण करने में विफल होना और रेडिस त्रुटियों पर एप्लिकेशन को क्रैश होने की अनुमति देना शामिल है। <पी> वास्तविक दुनिया की आउटेज रिपोर्ट में ये गलतियाँ बार-बार दिखाई देती हैं। डिज़ाइन के भाग के रूप में परीक्षण विफलता
<पी> उच्च उपलब्धता जिसका कभी परीक्षण नहीं किया जाता वह केवल कागजों पर मौजूद है। टीमों को नियमित रूप से नियंत्रित वातावरण में मास्टर को रोककर विफलताओं का अनुकरण करना चाहिए। <पी> फ़ेलओवर व्यवहार का अवलोकन करना, पुनर्प्राप्ति समय को मापना, और एप्लिकेशन प्रतिक्रिया को समझना अमूल्य अंतर्दृष्टि प्रदान करता है जिसे कोई भी दस्तावेज़ प्रतिस्थापित नहीं कर सकता है। रेडिस HA के लिए एक व्यावहारिक मानसिक मॉडल
<पी> रेडिस की उच्च उपलब्धता सुशोभित गिरावट के बारे में है। जब रेडिस स्वस्थ होता है, तो सिस्टम अच्छा प्रदर्शन करता है। जब रेडिस अस्वस्थ हो जाता है, तो प्रदर्शन ख़राब हो सकता है। जब रेडिस अनुपलब्ध हो, तब भी सिस्टम जीवित रहना चाहिए। <पी> यदि रेडिस के डाउन होने से संपूर्ण सिस्टम आउटेज हो जाता है, तो उच्च उपलब्धता अधूरी है। सारांश
<पी> रेडिस प्रतिकृति और उच्च उपलब्धता यह निर्धारित करती है कि सिस्टम तनाव में कैसे व्यवहार करता है। प्रतिकृति डेटा की प्रतियां प्रदान करती है, जबकि उच्च उपलब्धता सेवा की निरंतरता प्रदान करती है। <पी> दोनों को सावधानीपूर्वक डिजाइन, यथार्थवादी अपेक्षाओं और निरंतर परीक्षण की आवश्यकता होती है। जब सही ढंग से कार्यान्वित किया जाता है, तो रेडिस विफलताएँ बड़ी घटनाओं के बजाय नियमित घटनाएँ बन जाती हैं। यही रेडिस की उच्च उपलब्धता का लक्ष्य है।