Circuit breaker design pattern
सर्किट ब्रेकर एक डिजाइन पैटर्न है जिसका उपयोग सॉफ्टवेयर विकास में किया जाता है। इसका उपयोग विफलताओं का पता लगाने के लिए किया जाता है और रखरखाव, अस्थायी बाहरी प्रणाली विफलता या अप्रत्याशित प्रणाली कठिनाइयों के दौरान विफलता को लगातार बार-बार होने से रोकने के तर्क को समाहित करता है। मान लीजिए कि एक अनुप्रयोग प्रति सेकंड 100 बार डेटाबेस से जुड़ता है और डेटाबेस विफल हो जाता है। एप्लिकेशन डिजाइनर नहीं चाहता कि एक ही त्रुटि लगातार फिर से हो। वे टीसीपी कनेक्शन टाइमआउट की प्रतीक्षा किए बिना त्रुटि को जल्दी और शालीनता से संभालना चाहते हैं। आम तौर पर सर्किट ब्रेकर का उपयोग बाहरी सेवा की उपलब्धता की जांच करने के लिए किया जा सकता है। एक बाहरी सेवा एक डेटाबेस सर्वर या अनुप्रयोग द्वारा उपयोग की जाने वाली वेब सेवा हो सकती है। सर्किट ब्रेकर विफलताओं का पता लगाता है और अनुप्रयोग को उस कार्रवाई को करने की कोशिश करने से रोकता है जो विफल होने के लिए अभिशप्त है (जब तक कि इसे फिर से प्रयास करना सुरक्षित न हो)। सर्किट ब्रेकर डिजाइन पैटर्न के कार्यान्वयन कार्यान्वयन के लिए अनुरोधों की एक श्रृंखला पर कनेक्शन की स्थिति को बनाए रखने की आवश्यकता होती है। वास्तविक अनुरोधों से विफलताओं का पता लगाने के लिए इसे तर्क को बंद करना होगा। इसलिए, सर्किट ब्रेकर के भीतर राज्य मशीन को कुछ अर्थों में इसके माध्यम से गुजरने वाले अनुरोधों के साथ समवर्ती रूप से काम करने की आवश्यकता होती है। इसे प्राप्त करने का एक तरीका अतुल्यकालिक है। मल्टी-नोड (क्लस्टर) सर्वर में, अपस्ट्रीम सेवा की स्थिति को क्लस्टर के सभी नोड्स में प्रतिबिंबित करने की आवश्यकता होगी। इसलिए, कार्यान्वयन के लिए एक स्थायी भंडारण परत का उपयोग करने की आवश्यकता हो सकती है, जैसे। एक नेटवर्क कैश जैसे मेमकचेड या रेडिस, या स्थानीय कैश (डिस्क या मेमोरी आधारित) एप्लिकेशन के लिए, एक बाहरी सेवा की उपलब्धता को रिकॉर्ड करने के लिए। सर्किट ब्रेकर एक दिए गए अंतराल पर बाहरी सेवा की स्थिति को दर्ज करता है। एप्लिकेशन से बाहरी सेवा का उपयोग करने से पहले, वर्तमान स्थिति को पुनः प्राप्त करने के लिए भंडारण परत से पूछताछ की जाती है। हालांकि यह कहना सुरक्षित है कि लाभ परिणामों से अधिक हैं, सर्किट ब्रेकर को लागू करने से निष्पादन अनुप्रयोग के लिए भंडारण स्थान, अनुप्रयोग जटिलता और कम्प्यूटेशनल लागत पर नकारात्मक प्रभाव पड़ेगा। ऐसा इसलिए है क्योंकि यह परिपथ की स्थिति की जांच करने के लिए निष्पादन पथ में अतिरिक्त कोड जोड़ता है। यह नीचे दिए गए पी. एच. पी. उदाहरण में देखा जा सकता है, जहाँ डेटाबेस स्थिति के लिए ए. पी. सी. की जाँच करने में कुछ अतिरिक्त चक्र खर्च होते हैं। इसके अलावा, सर्किट ब्रेकर कोड को चलाने से स्वयं उस प्रणाली पर संसाधनों की खपत होती है जहां यह चल रहा है, इस प्रकार "वास्तविक" अनुप्रयोगों के लिए कम निष्पादन शक्ति छोड़ता है। उपयोग की जाने वाली भंडारण परत और आम तौर पर उपलब्ध संसाधनों पर कितना निर्भर करता है। इस संबंध में सबसे बड़े कारक कैश के प्रकार हैं, उदाहरण के लिए, डिस्क-आधारित बनाम स्मृति-आधारित और स्थानीय बनाम नेटवर्क। सर्किट ब्रेकर की विभिन्न अवस्थाएँ बंद खुला आधा खुला बंद अवस्था जब सब कुछ सामान्य होता है, तो सर्किट ब्रेकर बंद रहते हैं, और सभी अनुरोध नीचे दिखाए गए अनुसार सेवाओं तक पहुँच जाते हैं। यदि विफलताओं की संख्या सीमा से आगे बढ़ जाती है, तो सर्किट ब्रेकर चक्कर लगाता है और एक खुली स्थिति में चला जाता है। ओपन स्टेट इस स्थिति में सर्किट ब्रेकर सेवाओं को बुलाए बिना तुरंत एक त्रुटि देता है। सर्किट ब्रेकर एक समय समाप्ति अवधि बीतने के बाद आधी खुली स्थिति में चले जाते हैं। आमतौर पर, इसमें एक निगरानी प्रणाली होगी जहां समय सीमा निर्दिष्ट की जाएगी। अर्ध-खुली स्थिति इस स्थिति में, सर्किट ब्रेकर माइक्रोसर्विस से सीमित संख्या में अनुरोधों को पासथ्रू करने और ऑपरेशन का आह्वान करने की अनुमति देता है। यदि अनुरोध सफल होते हैं, तो सर्किट ब्रेकर बंद स्थिति में चला जाएगा। हालाँकि, यदि अनुरोध विफल होते रहते हैं, तो यह ओपन स्टेट में वापस चला जाता है। उदाहरण कार्यान्वयन पी. एच. पी. निम्नलिखित पी. एच. पी. में एक नमूना कार्यान्वयन है। अवधारणा का प्रमाण एक साझा स्मृति कैश (एपीसी) में एक माईएसक्यूएल सर्वर की स्थिति को संग्रहीत करता है। निम्नलिखित स्क्रिप्ट को क्रोंटैब के माध्यम से एक निर्धारित अंतराल पर चलाया जा सकता है। $माइसकली = नया माइसकली ("लोकलहोस्ट", "उपयोगकर्ता नाम", "पासवर्ड"); यदि ($माइसकली-> कनेक्ट _ एरर) {ए. पी. सी. _ स्टोर ("डी. बी. स्टेटस", "डाउन");} अन्यथा {ए. पी. सी. _ स्टोर ("डी. बी. स्टेटस", "अप"); $माइसकली-> क्लोज ();} एक अनुप्रयोग में उपयोग यदि (ए. पी. सी. _ फेच ("डी. बी. स्टेटस") = = = "डाउन") {इको "डेटाबेस सर्वर वर्तमान में उपलब्ध नहीं है। कृपया एक मिनट में फिर से प्रयास करें। "; बाहर निकलें;} $माइस्कली = नया माइस्कली (" लोकलहोस्ट "," उपयोगकर्ता नाम "," पासवर्ड "," डेटाबेस "); $परिणाम = $माइस्कली-> क्वेरी (" सेलेक्ट * फ्रॉम टेबल "); बाहरी लिंक आरेखों के साथ पी. एच. पी. कार्यान्वयन का उदाहरण सी #का उपयोग करके पॉली के साथ रीट्री पैटर्न का उदाहरण पॉली पॉली नूगेट पैकेज का उपयोग करके एंडर्स लाइबेकर्स से सी #कार्यान्वयन का उदाहरण अलेक्जेंडर निकितिन से सी #कार्यान्वयन का उदाहरण आर. ई. एस. टी. फुल आर्किटेक्चर मार्टिन फाउलर ब्लिकी सॉफ्टवेयर डिजाइन पैटर्न में लागू किए गए पायथन स्थिरता पैटर्न में कार्यान्वयन उदाहरण पी. एच. पी. कोड के साथ लेख