Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

रेडिस वितरित ताले में महारत हासिल करना:सिद्ध पैटर्न, सामान्य नुकसान और व्यावहारिक अनुप्रयोग

<पी> रेडिस वितरित ताले में महारत हासिल करना:सिद्ध पैटर्न, सामान्य नुकसान और व्यावहारिक अनुप्रयोग

परिचय

<पी> वितरित ताले तब तक सरल लगते हैं जब तक आप वास्तव में उत्पादन में उन पर निर्भर नहीं होते।

<पी> एक प्रक्रिया को किसी संसाधन तक विशेष पहुंच की आवश्यकता होती है। एकाधिक सर्वर चल रहे हैं. रेडिस बीच में बैठता है. विचार सीधा लगता है:रेडिस में ताला लगाएं और आगे बढ़ें।

<पी> कुछ समय के लिए, यह दृष्टिकोण काम करता प्रतीत होता है। फिर एक प्रक्रिया क्रैश हो जाती है, नेटवर्क विलंब होता है, या विलंबता स्पाइक्स होती है। अचानक, दो प्रक्रियाएँ एक ही लॉक का दावा करती हैं, कोई प्रक्रिया इसका स्वामी नहीं होती, या लॉक कभी रिलीज़ नहीं होता।

<पी> अधिकांश रेडिस लॉकिंग समस्याएँ स्वयं रेडिस के कारण नहीं होती हैं। ऐसा इसलिए होता है क्योंकि वितरित ताले को अक्सर गलत समझा जाता है। रेडिस समन्वय के लिए एक उपकरण प्रदान करता है, न कि पूर्ण विशिष्टता की गारंटी।

एक वितरित ताला वास्तव में क्या है

<पी> एक वितरित लॉक इन-मेमोरी म्यूटेक्स के समान नहीं है। यह पूर्ण गारंटी प्रदान नहीं करता है, और यह विफलता को समाप्त नहीं कर सकता है।

<पी> वितरित ताले समन्वय तंत्र हैं जो अविश्वसनीय वातावरण में काम करते हैं। नेटवर्क विफल हो जाते हैं, प्रक्रियाएँ क्रैश हो जाती हैं, और घड़ियाँ ख़राब हो जाती हैं। कोई भी लॉकिंग रणनीति जो सही व्यवहार मानती है अंततः टूट जाएगी।

<पी> रेडिस ताले सर्वोत्तम प्रयास वाले ताले हैं। जब सही ढंग से डिज़ाइन किया जाता है, तो वे बेहद प्रभावी होते हैं। जब लापरवाही से लागू किया जाता है, तो वे सूक्ष्म नस्ल की स्थिति और डेटा भ्रष्टाचार का परिचय देते हैं।

<पी> रेडिस लॉक का सुरक्षित रूप से उपयोग करने में पहला कदम अपेक्षाओं को समायोजित करना है।

जब रेडिस लॉक्स समझ में आते हैं

<पी> Redis वितरित ताले तब उपयुक्त होते हैं जब:

  • <पी> आपको एक महत्वपूर्ण अनुभाग के समवर्ती निष्पादन को रोकने की आवश्यकता है

  • <पी> कार्य को अनेक सर्वरों पर समन्वित किया जाना चाहिए

  • <पी> ऑपरेशन अल्पकालिक है

  • <पी> पुनः प्रयास स्वीकार्य हैं

<पी> सामान्य उपयोग के मामलों में जॉब डिडुप्लीकेशन, निर्धारित कार्य समन्वय, कैश पुनर्निर्माण और डबल प्रोसेसिंग को रोकना शामिल है।

<पी> रेडिस लॉक लंबे समय तक चलने वाले व्यावसायिक लेनदेन, उपयोगकर्ता-सामना वाले महत्वपूर्ण वर्कफ़्लो या संचालन के लिए उपयुक्त नहीं हैं जिन्हें सुरक्षित रूप से पुनः प्रयास नहीं किया जा सकता है। यदि पुनः प्रयास स्वीकार्य नहीं हैं, तो रेडिस लॉक गलत उपकरण है।

रेडिस में एकमात्र सुरक्षित लॉकिंग आदिम

<पी> सबसे सुरक्षित रेडिस लॉकिंग प्रिमिटिव एक एकल परमाणु कमांड है:

<पी> कुंजी मान NX EX ttl

सेट करें <पी> यह कमांड केवल तभी लॉक बनाता है जब यह पहले से मौजूद नहीं है, एक अद्वितीय स्वामी मान निर्दिष्ट करता है, और एक टीटीएल सेट करता है ताकि लॉक स्वचालित रूप से समाप्त हो जाए।

<पी> कोई भी वैकल्पिक दृष्टिकोण नस्ल की स्थितियों का परिचय देता है। टीटीएल के बिना SETNX का उपयोग करना या समाप्ति को एक अलग चरण में सेट करना विफलता के तहत टूट जाता है। टीटीएल अनिवार्य है और जब कोई प्रक्रिया अप्रत्याशित रूप से क्रैश हो जाती है तो यह सिस्टम की सुरक्षा करता है।

लॉक टीटीएल क्यों अनिवार्य है

<पी> टीटीएल के बिना, रेडिस लॉक हमेशा के लिए जीवित रह सकता है। यदि कोई प्रक्रिया लॉक पकड़ते समय क्रैश हो जाती है, तो सिस्टम चुपचाप रुक जाता है।

<पी> टीटीएल ताले को स्व-उपचारित बनाता है। जब कोई विफलता होती है, तो लॉक अंततः समाप्त हो जाता है और प्रगति को फिर से शुरू करने की अनुमति देता है। इसके परिणामस्वरूप संक्षिप्त ओवरलैप हो सकता है, लेकिन यह ट्रेडऑफ़ जानबूझकर किया गया है।

<पी> जो ताले कभी ख़त्म नहीं होते, वे ताले न होने से भी ज़्यादा ख़तरनाक होते हैं।

स्वामित्व को लॉक करें और सुरक्षित रिलीज

<पी> रेडिस लॉक को केवल उसी प्रक्रिया द्वारा जारी किया जाना चाहिए जिसने इसे हासिल किया है। यही कारण है कि लॉक मान विशिष्ट पहचानकर्ता होने चाहिए, स्थिर स्ट्रिंग नहीं।

<पी> लॉक जारी करने के लिए स्वामित्व की पुष्टि की आवश्यकता होती है। सुरक्षित तरीका लुआ स्क्रिप्ट का उपयोग करना है जो संग्रहीत मूल्य की जांच करता है और लॉक को केवल तभी हटाता है जब यह अपेक्षित मालिक से मेल खाता हो।

<पी> यह उस दौड़ की स्थिति को रोकता है जहां एक लॉक समाप्त हो जाता है, किसी अन्य प्रक्रिया द्वारा अधिग्रहित किया जाता है, और फिर मूल धारक द्वारा गलती से हटा दिया जाता है।

सुरक्षित लॉक अवधि चुनना

<पी> लॉक टीटीएल को संरक्षित ऑपरेशन के अधिकतम अपेक्षित निष्पादन समय से अधिक होना चाहिए। औसत निष्पादन समय का उपयोग करना पर्याप्त नहीं है।

<पी> यदि कोई लॉक तब समाप्त हो जाता है जब काम अभी भी चल रहा है, तो कोई अन्य प्रक्रिया उसे प्राप्त कर सकती है और उसी कार्य को समवर्ती रूप से निष्पादित कर सकती है। इससे नकल या भ्रष्टाचार हो सकता है।

<पी> साथ ही, कुछ गलत होने पर अत्यधिक लंबे टीटीएल पुनर्प्राप्ति में देरी करते हैं। लॉक अवधि एक संतुलन है जो सिस्टम में बदलाव के साथ विकसित होता है।

<पी> बंद किए गए काम को छोटा और सीमित रखना सबसे सुरक्षित तरीका है।

लॉक एक्सटेंशन और दिल की धड़कन

<पी> कुछ ऑपरेशनों में अपेक्षा से अधिक समय लगता है। टीटीएल को समय-समय पर ताज़ा करके ताले का विस्तार करना संभव है, लेकिन यह जटिलता और नए विफलता मोड जोड़ता है।

<पी> केवल ताला मालिक को टीटीएल का विस्तार करने की अनुमति दी जानी चाहिए, और स्वामित्व खो जाने पर विस्तार तुरंत रुक जाना चाहिए।

<पी> कई मामलों में, लॉक एक्सटेंशन लॉजिक को लागू करने की तुलना में काम को छोटे टुकड़ों में फिर से डिज़ाइन करना अधिक सुरक्षित है।

रेडलॉक डिबेट

<पी> रेडलॉक एक एल्गोरिदम है जो लॉक सुरक्षा में सुधार के लिए कई रेडिस इंस्टेंस का उपयोग करता है। यह विवादास्पद और परिचालन रूप से जटिल भी है।

<पी> अधिकांश प्रणालियों के लिए, रेडलॉक लाभ की तुलना में अधिक जटिलता का परिचय देता है। यह समय संबंधी धारणाओं पर निर्भर करता है जिनकी वास्तविक दुनिया के वातावरण में गारंटी देना मुश्किल है।

<पी> यदि रेडलॉक-स्तरीय गारंटी की आवश्यकता है, तो रेडिस उपयुक्त उपकरण नहीं हो सकता है। ट्रांजेक्शनल लॉकिंग या विशेष समन्वय प्रणाली वाले डेटाबेस बेहतर फिट हो सकते हैं।

<पी> अधिकांश रेडिस उपयोग मामलों के लिए, उचित टीटीएल-आधारित लॉकिंग वाला एक एकल रेडिस उदाहरण पर्याप्त है।

ताले लेनदेन नहीं हैं

<पी> रेडिस लॉक परिचालन को लेन-देन संबंधी नहीं बनाते हैं। जब ऑपरेशन के बीच में विफलता होती है तो वे स्वचालित रोलबैक प्रदान नहीं करते हैं या निरंतरता की गारंटी नहीं देते हैं।

<पी> ताले समवर्तीता को कम करते हैं; वे असफलता को ख़त्म नहीं करते. महत्वपूर्ण अनुभागों को निष्क्रिय करने के लिए डिज़ाइन किया जाना चाहिए ताकि बार-बार निष्पादन से नुकसान न हो।

<पी> यह डिज़ाइन सिद्धांत लॉकिंग-संबंधित बग के जोखिम को काफी कम कर देता है।

क्या होता है जब रेडिस डाउन हो जाता है

<पी> जब रेडिस बंद हो जाता है या पुनः आरंभ होता है, तो सभी लॉक गायब हो जाते हैं। यह अपेक्षित व्यवहार है.

<पी> जब रेडिस ऑनलाइन वापस आता है, तो कई प्रक्रियाएं एक साथ ताले प्राप्त कर सकती हैं और काम शुरू कर सकती हैं। सिस्टम को इस संभावना को सहन करना चाहिए।

<पी> यदि रेडिस पुनरारंभ के दौरान लॉक खोने से भ्रष्टाचार होता है, तो लॉकिंग डिज़ाइन असुरक्षित है और इस पर पुनर्विचार करने की आवश्यकता है।

उत्पादन में ताले की निगरानी

<पी> रेडिस ताले कभी भी अदृश्य नहीं होने चाहिए। टीमों को निगरानी करनी चाहिए कि कितने ताले मौजूद हैं, वे कितने समय तक जीवित रहते हैं, और कितनी बार ताला अधिग्रहण विफल रहता है।

<पी> असामान्य रूप से लंबे समय तक चलने वाले ताले रुकी हुई प्रक्रियाओं का संकेत देते हैं। बार-बार अधिग्रहण विफलताएं विवाद या गलत लॉक डिज़ाइन का सुझाव देती हैं।

<पी> सुरक्षित संचालन के लिए दृश्यता आवश्यक है।

सामान्य रेडिस लॉक एंटी-पैटर्न

<पी> सामान्य गलतियों में टीटीएल के बिना SETNX का उपयोग करना, लॉक स्वामित्व के लिए स्थिर मानों का उपयोग करना, लॉक को आँख बंद करके हटाना, लंबे समय तक चलने वाले कार्यों के लिए लॉक को पकड़ना और यह मान लेना कि लॉक सही होने की गारंटी देता है।

<पी> ये विरोधी पैटर्न वास्तविक दुनिया में उत्पादन की रुकावटों में अक्सर दिखाई देते हैं।

एक प्रैक्टिकल लॉकिंग चेकलिस्ट

<पी> एक सुरक्षित रेडिस लॉकिंग कार्यान्वयन में शामिल हैं:

  • <पी> TTLs

    से चाबियाँ लॉक करें
  • <पी> अद्वितीय लॉक स्वामित्व मान

  • <पी> रिलीज़ पर स्वामित्व सत्यापन

  • <पी> अल्पकालिक महत्वपूर्ण अनुभाग

  • <पी> निष्प्रभावी संचालन

  • <पी> परीक्षण किए गए विफलता पथ

<पी> यदि इनमें से कोई भी गायब है, तो लॉकिंग डिज़ाइन पर पुनर्विचार किया जाना चाहिए।

रेडिस लॉक्स के लिए एक स्वस्थ मानसिक मॉडल

<पी> रेडिस लॉक सीटबेल्ट हैं, एयरबैग नहीं। वे क्षति को कम करते हैं लेकिन दुर्घटनाओं को पूरी तरह से नहीं रोकते हैं।

<पी> सावधानी से उपयोग किए जाने पर, वे वितरित प्रणालियों में समन्वय को सरल बनाते हैं। आकस्मिक रूप से उपयोग किए जाने पर, वे सूक्ष्म और लगातार बग पेश करते हैं।

सारांश

<पी> वितरित लॉकिंग कठिन है क्योंकि विफलता अपरिहार्य है। रेडिस एक तेज़, सरल और व्यावहारिक लॉकिंग तंत्र प्रदान करता है, पूर्ण नहीं।

<पी> विफलता के लिए डिज़ाइन करें, ताले छोटे रखें, टीटीएल का लगातार उपयोग करें, और सुनिश्चित करें कि संचालन पुनः प्रयास करने के लिए सुरक्षित हैं। जब सही ढंग से उपयोग किया जाता है, तो Redis वितरित ताले उत्पादन प्रणालियों में विश्वसनीय और प्रभावी उपकरण होते हैं।


  1. सी भाषा में सरणी के अलग-अलग तत्वों को प्रिंट करें सी भाषा में सरणी के अलग-अलग तत्वों को प्रिंट करें

    पूर्णांक तत्वों की एक सरणी के साथ, कार्य डुप्लिकेट मानों को हटाना और अलग-अलग तत्वों को क्रमबद्ध तरीके से प्रिंट करना है। नीचे दी गई एक सरणी है जो फैशन 4, 6, 5, 3, 4, 5, 2, 8, 7 और 0 में पूर्णांक प्रकार के मानों को संग्रहीत करती है, परिणाम क्रमबद्ध तत्वों को 0, 2, 3, 4 के रूप में प्रिंट करेगा। 4, 5,

  1. 2 वस्तुओं की तुलना करते समय समूहबद्ध सरणी नेस्टेड मान - जावास्क्रिप्ट 2 वस्तुओं की तुलना करते समय समूहबद्ध सरणी नेस्टेड मान - जावास्क्रिप्ट

    मान लीजिए, हमारे पास निम्नलिखित JSON ऑब्जेक्ट है - const input = {    "before": {      "device": [        {          "id": "1234",          "price": "

  1. किसी संख्या का सबसे बड़ा अभाज्य गुणनखंड खोजने के लिए पायथन कार्यक्रम किसी संख्या का सबसे बड़ा अभाज्य गुणनखंड खोजने के लिए पायथन कार्यक्रम

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