हिस्ट्रिक्स द्वारा उपयोग किया जाने वाला बल्कहेड पैटर्न क्या है?


104

हिस्टि्रक्स, जटिल वितरित प्रणालियों में विलंबता और दोष सहिष्णुता के लिए एक नेटफ्लिक्स एपीआई थ्रेड अलगाव के लिए बल्कहेड पैटर्न तकनीक का उपयोग करता है । क्या कोई इसके बारे में विस्तार से बता सकता है।

जवाबों:


193

सामान्य

सामान्य तौर पर, बल्कहेड पैटर्न का लक्ष्य पूरे सिस्टम को नीचे ले जाने के लिए सिस्टम के एक हिस्से में दोषों से बचना है। यह शब्द उन जहाजों से आता है जहां पूरे जहाज को बाढ़ने के लिए एक पतवार ब्रीच से बचने के लिए एक जहाज को अलग-अलग वाटरटाइट डिब्बों में बांटा गया है; यह केवल एक बल्कहेड को बाढ़ देगा।

बल्कहेड पैटर्न का कार्यान्वयन इस बात पर निर्भर करता है कि आप सिस्टम को किस प्रकार के दोषों से बचाना चाहते हैं। मैं केवल इस जवाब में हिस्टिक्स हैंडल के दोषों के प्रकार पर चर्चा करूंगा।

मुझे लगता है कि किताब रिलीज इट द्वारा बल्कहेड पैटर्न को लोकप्रिय बनाया गया था ! माइकल टी। न्यगार्ड द्वारा।

क्या हिस्ट्रिक्स हल करता है

Hystrix में बल्कहेड कार्यान्वयन एक घटक के समवर्ती कॉल की संख्या को सीमित करता है । इस तरह, घटक से उत्तर की प्रतीक्षा कर रहे संसाधनों (आमतौर पर थ्रेड्स) की संख्या सीमित है।

मान लें कि आपके पास एक अनुरोध आधारित, बहु थ्रेडेड एप्लिकेशन (उदाहरण के लिए एक विशिष्ट वेब एप्लिकेशन) है जो तीन अलग-अलग घटकों, , बी और सी का उपयोग करता है । यदि घटक C के अनुरोधों को लटका देना शुरू हो जाता है, तो आखिरकार धागे से निपटने के सभी अनुरोध C से जवाब के इंतजार में लटक जाएंगे । यह एप्लिकेशन को पूरी तरह से गैर-उत्तरदायी बना देगा। यदि C के अनुरोधों को धीरे-धीरे नियंत्रित किया जाता है तो हमें एक समान समस्या है यदि लोड पर्याप्त है।

बल्कहेड पैटर्न का हिस्टिक्स का कार्यान्वयन एक घटक के समवर्ती कॉल की संख्या को सीमित करता है और इस मामले में आवेदन को बचाया होगा। मान लें कि हमारे पास 30 थ्रेड्स को संभालने का अनुरोध है और सी के लिए 10 समवर्ती कॉल की सीमा है । तब सी को कॉल करते समय थ्रेड्स को अधिकतम 10 अनुरोधों पर लटका सकते हैं , अन्य 20 थ्रेड्स अभी भी अनुरोधों को संभाल सकते हैं और और बी घटकों का उपयोग कर सकते हैं ।

हिस्टरिक्स का दृष्टिकोण

Hystrix 'में दो अलग-अलग दृष्टिकोण हैं बल्कहेड, थ्रेड आइसोलेशन और सेमाफोर आइसोलेशन।

धागा अलगाव

मानक दृष्टिकोण घटक सी के सभी अनुरोधों को थ्रेड की एक निश्चित संख्या के साथ एक अलग थ्रेड पूल को सौंपना है और नहीं (या एक छोटा) अनुरोध कतार है।

सेमाफोर अलगाव

अन्य दृष्टिकोण के लिए सभी कॉलर्स को सी के अनुरोध से पहले एक परमिट (0 टाइमआउट के साथ) प्राप्त करना है । यदि एक परमिट को सेमीफोर से अधिग्रहीत नहीं किया जा सकता है, तो C पर कॉल को पास नहीं किया जाता है।

मतभेद

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


10
इसके अतिरिक्त, मूल हिस्टिक्स विकी में अब दोनों दृष्टिकोणों का विस्तृत वर्णन है: github.com/Netflix/Hystrix/wiki/How-it-Works
दिमित्री

1
सर्किट ब्रेकर और बल्कहेड में क्या अंतर है?
वॉयस

4
@voipp सर्किट ब्रेकर एक बहुत अलग बात है। वे पता लगाते हैं कि जब कोई सेवा अस्वास्थ्यकर स्थिति में होती है और कॉल करने वालों को "विफल फास्ट" स्थिति में ले जाती है, जहां वे अस्वस्थ सेवा को कॉल नहीं करते हैं, लेकिन सेवा ठीक होने तक इसके बजाय एक त्रुटि कोड लौटाते हैं। यह अस्वास्थ्यकर सेवा को ओवरलोड करने से बचाता है ताकि यह ठीक हो सके, और यह कैस्केडिंग विफलताओं को रोकता है क्योंकि कॉलर्स धीमा नहीं होते हैं।
के एरलैंडसन

1

यहाँ Resilience4j में बल्कहेड के लिए रनटाइम स्पष्टीकरण के साथ एक अच्छा उदाहरण है जो नेटफ्लिक्स हिस्ट्रिक्स से प्रेरित है।

उदाहरण के नीचे विन्यास उपयोग की कुछ स्पष्टता दे सकता है।

उदाहरण कॉन्फ़िगरेशन: किसी भी समय अधिकतम 5 समवर्ती कॉल की अनुमति दें। अन्य कॉल को प्रक्रिया के 5 समवर्ती खत्म होने तक या अधिकतम 2 सेकंड तक प्रतीक्षा करते रहें।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.