जवाबों:
सामान्य तौर पर, बल्कहेड पैटर्न का लक्ष्य पूरे सिस्टम को नीचे ले जाने के लिए सिस्टम के एक हिस्से में दोषों से बचना है। यह शब्द उन जहाजों से आता है जहां पूरे जहाज को बाढ़ने के लिए एक पतवार ब्रीच से बचने के लिए एक जहाज को अलग-अलग वाटरटाइट डिब्बों में बांटा गया है; यह केवल एक बल्कहेड को बाढ़ देगा।
बल्कहेड पैटर्न का कार्यान्वयन इस बात पर निर्भर करता है कि आप सिस्टम को किस प्रकार के दोषों से बचाना चाहते हैं। मैं केवल इस जवाब में हिस्टिक्स हैंडल के दोषों के प्रकार पर चर्चा करूंगा।
मुझे लगता है कि किताब रिलीज इट द्वारा बल्कहेड पैटर्न को लोकप्रिय बनाया गया था ! माइकल टी। न्यगार्ड द्वारा।
Hystrix में बल्कहेड कार्यान्वयन एक घटक के समवर्ती कॉल की संख्या को सीमित करता है । इस तरह, घटक से उत्तर की प्रतीक्षा कर रहे संसाधनों (आमतौर पर थ्रेड्स) की संख्या सीमित है।
मान लें कि आपके पास एक अनुरोध आधारित, बहु थ्रेडेड एप्लिकेशन (उदाहरण के लिए एक विशिष्ट वेब एप्लिकेशन) है जो तीन अलग-अलग घटकों, ए , बी और सी का उपयोग करता है । यदि घटक C के अनुरोधों को लटका देना शुरू हो जाता है, तो आखिरकार धागे से निपटने के सभी अनुरोध C से जवाब के इंतजार में लटक जाएंगे । यह एप्लिकेशन को पूरी तरह से गैर-उत्तरदायी बना देगा। यदि C के अनुरोधों को धीरे-धीरे नियंत्रित किया जाता है तो हमें एक समान समस्या है यदि लोड पर्याप्त है।
बल्कहेड पैटर्न का हिस्टिक्स का कार्यान्वयन एक घटक के समवर्ती कॉल की संख्या को सीमित करता है और इस मामले में आवेदन को बचाया होगा। मान लें कि हमारे पास 30 थ्रेड्स को संभालने का अनुरोध है और सी के लिए 10 समवर्ती कॉल की सीमा है । तब सी को कॉल करते समय थ्रेड्स को अधिकतम 10 अनुरोधों पर लटका सकते हैं , अन्य 20 थ्रेड्स अभी भी अनुरोधों को संभाल सकते हैं और ए और बी घटकों का उपयोग कर सकते हैं ।
Hystrix 'में दो अलग-अलग दृष्टिकोण हैं बल्कहेड, थ्रेड आइसोलेशन और सेमाफोर आइसोलेशन।
मानक दृष्टिकोण घटक सी के सभी अनुरोधों को थ्रेड की एक निश्चित संख्या के साथ एक अलग थ्रेड पूल को सौंपना है और नहीं (या एक छोटा) अनुरोध कतार है।
अन्य दृष्टिकोण के लिए सभी कॉलर्स को सी के अनुरोध से पहले एक परमिट (0 टाइमआउट के साथ) प्राप्त करना है । यदि एक परमिट को सेमीफोर से अधिग्रहीत नहीं किया जा सकता है, तो C पर कॉल को पास नहीं किया जाता है।
थ्रेड पूल दृष्टिकोण का लाभ यह है कि सी को पारित किए जाने वाले अनुरोधों को समयबद्ध किया जा सकता है, कुछ ऐसा जो अर्ध-उपयोग करते समय संभव नहीं है।
यहाँ Resilience4j में बल्कहेड के लिए रनटाइम स्पष्टीकरण के साथ एक अच्छा उदाहरण है जो नेटफ्लिक्स हिस्ट्रिक्स से प्रेरित है।
उदाहरण के नीचे विन्यास उपयोग की कुछ स्पष्टता दे सकता है।
उदाहरण कॉन्फ़िगरेशन: किसी भी समय अधिकतम 5 समवर्ती कॉल की अनुमति दें। अन्य कॉल को प्रक्रिया के 5 समवर्ती खत्म होने तक या अधिकतम 2 सेकंड तक प्रतीक्षा करते रहें।
आइडिया किसी भी सिस्टम को लोड से अधिक बोझ नहीं देना है जितना वे उपभोग कर सकते हैं। यदि आवक लोड खपत से अधिक है, तो उचित समय की प्रतीक्षा करें या बस टाइमआउट करें और वैकल्पिक पथ के लिए जाएं।