उच्च स्केलेबिलिटी में झंडे का उल्लेख किया गया है:
स्केलेबिलिटी के लिए विषाक्त 5 चीजें , "5. फीचर फ्लैग्स की कमी"
क्या वास्तव में सुविधा झंडे हैं?
उच्च स्केलेबिलिटी में झंडे का उल्लेख किया गया है:
स्केलेबिलिटी के लिए विषाक्त 5 चीजें , "5. फीचर फ्लैग्स की कमी"
क्या वास्तव में सुविधा झंडे हैं?
जवाबों:
एक 'सुविधा ध्वज' (या फ़ीचर टॉगल ) आपके एप्लिकेशन की विशेषताओं (उप-वर्गों) को आसानी से चालू / बंद करने की क्षमता है:
मुझे लगता है कि उदाहरण यह था कि फीचर-सेट को कम करने के लिए नियंत्रण रखना आसान है यदि आपको ज़रूरत है, तो कहें, अगर लोड बहुत अधिक है, तो db प्रश्नों को कम करें।
ऐसे अन्य कारणों के ढेर हैं जिन्हें आप इसका उपयोग करना चाहते हैं - मुख्य में से एक सतत वितरण को सक्षम करना : उत्पादन में चीजों को धकेलना / लाइव करना अभी तक इस सुविधा को निष्क्रिय करना / निष्क्रिय होना जब तक यह पूरा नहीं हो जाता। हम अक्सर देव टीम के लिए अपूर्ण सुविधाओं को दिखाने के लिए 'देव कुकी' कहते हैं। इस तरह हम उत्पादन में आंशिक रूप से पूर्ण किए गए काम का परीक्षण कर सकते हैं (ओह यार! क्या बेहतर एकीकरण है?) इससे पहले कि हम इसे "पूरा" करें और इसे जनता के लिए दिखाई दे।
यहां एक सरल पैकेज है जो आपको ASP.NET MVC भूमि में ऐसा करने में मदद करता है: https://github.com/cottsak/DevCookie (पूर्ण प्रकटीकरण: मैं लेखक हूं)
Fowler भी एक बहुत अधिक विवरण के साथ ऊपर लिंक की तुलना में एक बहुत लंबा लेख है ।
यह पोस्ट (फाउलर की साइट पर भी) विभिन्न प्रकार की टॉगल रणनीतियों की व्याख्या करती है । DevCookie मेनलाइन / ट्रंक-आधारित रणनीति का समर्थन करता है और इसे लेख में " रिलीज़ टॉगल " कहा जाता है ।
आदिल के जवाब पर प्रकाश डाला गया है कि ऐसे कई नियम और कारण हैं जिनकी वजह से आप इस बुनियादी ढांचे में से कुछ चाहते हैं। ध्यान रखें आपको केवल इन चीजों में से कुछ की आवश्यकता हो सकती है। उदाहरण के लिए, मैं केवल एक सरल और चुस्त तैनाती / वितरण वर्कफ़्लो को सक्षम करना चाह सकता हूं और इसलिए एक सरल बुनियादी ढांचा पर्याप्त होगा। यदि आप तब चुनते हैं, तो आप ए / बी के साथ पूर्ण #lststartup प्रयोग में बढ़ना चाहते हैं , परीक्षण और नियंत्रित रोल-आउट जैसी चीजें, आपको एक एनालिटिक्स टूल (जैसे हीप ) पर विचार करना चाहिए जो उन डेटा-संचालित विकास विधियों को एक अलग समाधान के रूप में सुविधाजनक बनाता है। । एक टॉगल अवसंरचना जो उपरोक्त सभी को करती है, जिससे ब्लोट और अनावश्यक जटिलता हो जाएगी।
यदि आपने इसे अभी तक बनाया है, तो आप मेरे कुछ अन्य विचारों को मेनलाइन डेवलपमेंट, फ़ीचर टॉगलिंग और अन्य मूर्खतापूर्ण विचारों जैसे TEST, QA, SIT, STAND, CROUCH पर देख सकते हैं ।
फ़ीचर फ़्लैग एक ऐसी तकनीक है जो नए एप्लिकेशन को तैनात किए बिना, कॉन्फ़िगरेशन के माध्यम से आपके एप्लिकेशन की कुछ कार्यक्षमता को चालू करने के लिए है।
फ़ीचर फ़्लैग्स CI स्कीम में एक महत्वपूर्ण भूमिका निभाते हैं जहाँ सुविधाओं को लगातार तैनात किया जा रहा है, लेकिन जरूरी नहीं कि "उत्पादन में" जारी किया जाए।
अधिक जानकारी यहाँ:
- संपादित करें:
फ़ीचर फ्लैग, फ़ीचर टॉगल, प्रयोग और नियंत्रित रोलआउट एक सरल लेकिन शक्तिशाली विचार के लिए समानार्थक हैं: फ़ीचर रोलआउट से अलग कोड डिप्लॉय। सादा भाषण में, यह आपके ग्राहकों के बीच चयन करते समय आपकी सुविधा के कमिट को धकेलने की क्षमता है - यदि कोई भी हो तो - यह सुविधा देखने को मिलती है।
वे फेसबुक के गेटकीपर के हिस्से में लोकप्रिय थे । लिंक्डइन का LiX एक और अच्छा उदाहरण है।
इस सरल विचार को अपनाने से कई सर्वोत्तम प्रथाओं की नींव पड़ती है, जिनमें शामिल हैं:
निरंतर तैनाती / वितरण - एक दिन में कई कोड उत्पादन के लिए धक्का देते हैं।
ट्रंक / मेनलाइन डेवलपमेंट - फीचर शाखाएं केवल पुल अनुरोधों के लिए बनाई जानी चाहिए, न कि लंबे समय तक रहने वाले विकास के लिए।
कोई और अधिक रिलीज गाड़ियों नीचे चीजों को काटने के लिए।
उत्पादन में क्यूए / पूर्ण परीक्षण - वास्तविक क्यूए और प्रदर्शन परीक्षण उत्पादन यातायात के साथ उत्पादन बुनियादी ढांचे पर है। व्यापक प्रदर्शन प्रयोगशालाओं और मंचन के वातावरण के निर्माण में समय बर्बाद न करें।
प्रयोग - पता है कि कैसे एक नई सुविधा आपके KPI पर सुई को स्थानांतरित करती है।
समस्या उत्पन्न होने पर हॉटफ़िक्स या कोड रोलबैक से बचना - दोनों हॉटफ़िक्स और कोड रोलबैक तनावपूर्ण हैं, एक लंबा समय लेते हैं, और आवश्यकता से अधिक समस्याओं को जन्म देते हैं। इसके बजाय, सुविधा को बंद करें या इसे नीचे रैंप करें।
अन्य लोगों ने खुले स्रोत पुस्तकालयों का उल्लेख किया है। पूर्ण समाधान का एक अच्छा उदाहरण - जैसे गेटकीपर और LiX - स्प्लिट है । मैं स्प्लिट के लिए काम करता हूं।
यहां बहुत सारे शानदार जवाब हैं, सभी मार्टिन फावलर पोस्ट में लोकप्रिय, मूल परिभाषा पर ड्राइविंग करते हैं :
वे कोड के बिट्स हैं जो "[अनुमति] टीमों को कोड को बदले बिना सिस्टम व्यवहार को संशोधित करने के लिए।"
इसलिए हमने ऐतिहासिक रूप से उनके बारे में सोचा है जैसा कि छद्म संहिता द्वारा दर्शाया गया है:
if(app_settings["beta-mode"] == "true")
showAwesomeNewGui();
else
sameOldSnoozeFeset();
यह सोचने के लिए एक पूरी तरह से सटीक तरीका है, और मैट और आदिल दोनों इस पर विस्तृत रूप से फीचर ध्वज के लिए कई प्रकार के सामरिक उपयोग के मामलों के साथ विस्तार करते हैं।
लेकिन मैं एक संशोधित परिभाषा देना चाहता हूं जो यह दर्शाती है कि छह साल में वास्तविकता कैसे विकसित हुई और डॉटनेटदेव ने मूल प्रश्न पूछा। मैं Rollout.io के लिए काम करता हूं , जो एक फीचर फ्लैग प्लेटफॉर्म है, इसलिए मैंने इस इवोल्यूशन के लिए फ्रंट-रो सीट ली है।
सीधे शब्दों में कहें, सुविधा झंडे अब किसी भी तरह से कार्यक्षमता के बिट्स को चालू करने और बंद करने का तरीका नहीं है। यह "यह एक विवरण और मुद्रा की एक राशि है" कहकर "क्या एक इनवॉइस लाइन आइटम है" का जवाब देने जैसा है। सही है, लेकिन यह चालान के व्यापक बिंदु पर ड्राइव नहीं करता है।
फ़ीचर फ़्लैग आधुनिक सॉफ़्टवेयर में एक अतिव्यापी रणनीतिक समाधान के सामरिक बिट्स हैं। वे साधन हैं जिनके द्वारा आप अपने कोड में महत्वपूर्ण निर्णय तर्क को चलाते हैं जब तक कि आपके पास अधिक जानकारी न हो। और, शायद सबसे महत्वपूर्ण बात, वे अभी किसी भी अलगाव में उत्पन्न नहीं होते हैं, यह देखने के लिए एकल जांच के साथ कि संस्करण संख्या 2.7 से अधिक है या नहीं; संगठन जो उनका उपयोग करते हैं वे आम तौर पर एक व्यापक, सिस्टम-वाइड उत्पाद दृष्टिकोण के भाग के रूप में शामिल होते हैं।
जैसा कि दूसरों ने उल्लेख किया है, फेसबुक और लिंक्डइन ने इसका नेतृत्व किया, लेकिन 2018 में, बहुत सारे संगठन इसे कर रहे हैं। वे विकास रणनीति, संचालन रणनीति (या यदि आप चाहते हैं तो DevOps रणनीति, और उत्पाद रणनीति) के भाग के रूप में रनटाइम के लिए निर्णय तर्क प्रश्नों को टाल रहे हैं। यहां ऐसे सवालों के उदाहरण दिए गए हैं।
ऐसे एप्लिकेशन के लिए, जो रनटाइम तक इस तरह के निर्णयों की एक महत्वपूर्ण संख्या को समाप्त कर देता है, आप अपने आवेदन में फीचर झंडे को तदर्थ फैशन में नहीं फेंक सकते हैं या आप खुद को तकनीकी ऋण में दफन कर लेंगे। आपको इन दिनों, एक व्यापक सुविधा ध्वज प्रबंधन रणनीति की आवश्यकता है, जिसमें कुछ अलग घटक शामिल हैं।
तो, अंत में, सुविधा झंडे क्या हैं?
खैर, वे एक व्यापक रणनीति का एक महत्वपूर्ण हिस्सा हैं जो एक ऐसा अनुप्रयोग है जो तकनीकी और बाजार दोनों जरूरतों के अनुकूल है।
एक फीचर फ्लैग (जिसे फीचर फ़्लिपिंग या फ़ीचर टॉगल के रूप में भी जाना जाता है ) एक स्विच है, जो ज़रूरत के मुताबिक संभावित महंगी फ़ीचर को सक्षम या अक्षम करने के लिए एक स्विच है (जैसे, कहते हैं, जब किसी साइट को अनपेक्षित ट्रैफ़िक से जोड़ा जा रहा है)। जब तक आप बड़े पैमाने पर या जब तक लोड स्पाइक चला नहीं जाता है तब तक यह आपको थोड़ा समय देगा।
यहाँ SWIG प्रलेखन से एक उदाहरण है ।
मेरी कंपनी में हम उस के लिए एक समाधान किया करते थे। हमने .json
प्रत्येक एप्लिकेशन के लिए एक डाउनलोड करने योग्य कॉन्फ़िगरेशन ( ) फ़ाइल प्रदान करने वाली सेवा बनाई । उस कॉन्फ़िगरेशन में हमने सुविधाओं के लिए झंडे संग्रहीत किए। उस कॉन्फिग के आधार पर ऐप वर्तमान फीचर को दिखा या छिपा सकता है। (उदाहरण के लिए साइडबार पर मेनू आइटम दिखाना या छिपाना)।
हमने एक आंतरिक व्यवस्थापक पृष्ठ भी बनाया है जहाँ हम सुविधा-झंडे को कॉन्फ़िगर कर सकते हैं। इसने कुछ समय के लिए काफी अच्छा काम किया, लेकिन इसके बाद हम उपयोगकर्ता को लक्षित करना और ए / बी परीक्षण करना पसंद करते थे। खुद के विकास के लिए यह बहुत अधिक प्रयास लग रहा था, इसलिए हमने एक तृतीय-पक्ष समाधान चुना। जैसा कि पहले ही यहां बताया जा चुका है कि इसके कई समाधान हैं।
हमने कॉन्फ़िगरकैट को चुना क्योंकि यह एक ही बार में अनुकूलित लक्ष्य समूहों और प्रतिशत-आधारित रोलआउट का समर्थन करता है। आप github पर समर्थित ओपन-सोर्स sdks की जाँच कर सकते हैं ।
फ़ीचर फ़्लैग (या फ़ीचर टॉगल) आपको एप्लिकेशन को फिर से बनाने / पुन: लागू करने की आवश्यकता के बिना किसी एप्लिकेशन पर दूरस्थ रूप से सुविधाओं को सक्षम करने की अनुमति देते हैं। यह आपको उत्पादन के लिए कोड को तैनात करने की अनुमति देता है लेकिन जब तक आप तैयार नहीं होते तब तक सुविधा को जारी न करें। आप विशिष्ट उपयोगकर्ताओं को लक्षित करने में सक्षम हैं, इसलिए आप अपने बीटा उपयोगकर्ताओं को परीक्षण करने के लिए एक नई सुविधा सक्षम कर सकते हैं।
हमारी कंपनी में हमने पहले से LaunchDarkly और अन्य सुझाव FeatureFlags.io का उपयोग किया है । हमने यह प्रयास करने और इस काम को करने के लिए फायरबेस के रिमोट कॉन्फ़िगरेशन का उपयोग करने का भी प्रयास किया है, लेकिन हमने पाया कि यह वास्तव में इस उद्देश्य के लिए फिट नहीं था।
हमने बुलेट ट्रेन नामक अपना स्वयं का संस्करण विकसित किया है , जिसे हमने खोला है। यह फीचर फ्लैग / टॉगल और रिमोट कॉन्फिगर दोनों को जोड़ती है।
फ़ीचर फ्लैग्स का उपयोग कई उद्देश्यों के लिए किया जाता है। सामान्य विचार यह है कि उपयोगकर्ता जिस पर नियंत्रण रखता है, वह देखता है कि कुछ रिमोट डैशबोर्ड या किसी प्रकार के बैक-ऑफ़िस में क्या सुविधा है।
एक बार एक सुविधा को कोड में फ़्लैग करने के बाद, आप अब यह निर्धारित करने के लिए कई तरीकों का उपयोग कर सकते हैं कि कौन सा उपयोगकर्ता आपके एप्लिकेशन में इसे देखता है: 1. ऑन / ऑफ़ - अपने सभी उपयोगकर्ताओं को या किसी को भी यह सुविधा दिखाएं। 2. क्रमिक रिलीज - अपने उपयोगकर्ताओं के केवल कुछ प्रतिशत के लिए सुविधा दिखाएं, फिर धीरे-धीरे इसे सभी उपयोगकर्ताओं को दिखाएं। 3. लक्ष्यीकरण - उस उपयोगकर्ता के गुणों या विशेषताओं के आधार पर विशिष्ट उपयोगकर्ताओं को सुविधा दिखाएं।
फ़ीचर फ़्लैग (बूलियन्स) और फ़ीचर कॉन्फ़िगरेशन (स्ट्रिंग्स, नंबर, आदि) को नियंत्रित करने में मदद करने वाले उपकरण आमतौर पर फ़ीचर मैनेजमेंट प्लेटफ़ॉर्म कहलाते हैं। फ़ीचर मैनेजमेंट के लिए एक बढ़िया सेवा है, जिसे कॉन्फ़िगरेशन कहा जाता है ।
कोडिंग के दृष्टिकोण से एक सुविधा ध्वज एक if
बयान के रूप में सरल हो सकता है जो कोड के एक नए टुकड़े के चारों ओर लपेटता है जो आप लिख रहे हैं। जब if
कथन सत्य का मूल्यांकन करता है (सुविधा ध्वज चालू है) तो नया कोड निष्पादित किया जाएगा।
सॉफ्टवेयर पहुंचाने की एक वास्तविक दुनिया के उदाहरण में, if
ऊपर वर्णित कथन पर्यावरण के आधार पर अलग-अलग मूल्यांकन करेगा कि सॉफ्टवेयर किसमें चल रहा है। उदाहरण के लिए यदि आपके QA सर्वर पर एप्लिकेशन निष्पादित हो रहा है तो फीचर फ्लैग सही वापस आ जाएगा और नई सुविधा होगी देखा। यदि इसे आपके उत्पादन सर्वर पर निष्पादित किया जा रहा है, तो सुविधा ध्वज गलत वापस आ जाएगा और सुविधा छिप जाएगी।
अपने करियर के दौरान अपने व्यक्तिगत अनुभव से मैंने निम्नलिखित तरीकों से फीचर झंडे का इस्तेमाल किया है:
ग्राहकों को सुविधाओं को जारी करने से कोड तैनाती को कम करना। यह हमारी विकास प्रक्रिया में फीचर झंडे का मेरा पहला प्रारंभिक उपयोग था। हमने इसका उपयोग अपनी मार्केटिंग और उत्पाद टीम और इंजीनियरिंग टीम के बीच निर्भरता को दूर करने के लिए किया जो विकास और रिलीज़ कर रहा था। फीचर फ्लैग ने हमें एक लॉन्च से पहले हमारे कोड हफ्तों को तैनात करने की अनुमति दी, जबकि पहले हम रिलीज से पहले रात को कोड तैनात कर रहे थे!
उत्पादन में परीक्षण। इससे पहले कि हम अपने झंडे का उपयोग करते हैं जब हमने अपना कोड जारी किया था यह एक या कुछ भी नहीं घटना थी, या तो हमारे सभी ग्राहकों को सुविधा मिली या उनमें से किसी ने भी नहीं किया। हमने एक समय में उपयोगकर्ताओं के एक छोटे प्रतिशत के लिए एक नई सुविधा को रोल आउट करने की अनुमति देने के लिए सुविधा ध्वज का उपयोग किया। इसने हमें संपूर्ण ग्राहक आधार पर किसी भी संभावित मुद्दों को जोखिम में डाले बिना एक नई सुविधा के बारे में मूल्यवान प्रतिक्रिया और डेटा एकत्र करने की अनुमति दी।
विकास जीवन-चक्र में प्रति वातावरण में एक सुविधा को सक्षम / अक्षम करना। हमने विकास में इस का भरपूर उपयोग किया ताकि एक बहुत ही धीमी तैनाती प्रक्रिया की अनुमति दी जा सके - हमारे पास एक CI / CD पाइपलाइन है जिसमें फीचर फ्लैग का उपयोग महत्वपूर्ण है।
एक किल स्विच बनाना। हमने अपने एप्लिकेशन की कुछ विशेषताओं को एक सुविधा ध्वज के साथ लपेटा है, जो हमें उस समय किसी भी समस्या की स्थिति में उस सुविधा को 'मारने' की अनुमति देता है, जो हमारे पास मौजूद है। उदाहरण के लिए यदि हम खुद को भारी बोझ के नीचे पाते हैं तो हम इस मुद्दे की मदद करने के लिए वेबसाइट की कुछ गैर-जरूरी सुविधाओं को बंद करने में सक्षम हैं।
आप यहां फीचर फ्लैग के बारे में अधिक पढ़ सकते हैं ।
आप कई तरीकों से अपने कोड में सुविधा फ़्लैग जोड़ सकते हैं।
अपनी खुद की लाइब्रेरी लिखना पहले एक अच्छा विचार हो सकता है और आमतौर पर यह इस तरह से शुरू हो सकता है। हालाँकि आप जल्द ही उन मुद्दों में भाग सकते हैं, जब आप फ़ीचर फ़्लैग के अधिक उन्नत उपयोग मामलों को लागू करना चाहते हैं, जैसे कुछ प्रतिशत उपयोगकर्ताओं या विशिष्ट समूह समूहों को लक्षित करना। अपना स्वयं का सुविधा ध्वज कार्यान्वयन बनाने के साथ एक और समस्या यह है कि यदि आप कई भाषाओं का उपयोग कर रहे हैं तो आपको कई बार अपने कोड को लागू करने की आवश्यकता होगी।
फीचर फ्लैग का उपयोग करने का सबसे अच्छा और आसान तरीका फ्लडगेट जैसी ऑनलाइन सुविधा ध्वज प्रबंधन सेवा का उपयोग करना है । इस तरह से आप प्लेटफ़ॉर्म पर सभी भारी उठाने का लाभ उठा सकते हैं जो तब आपको अपने एप्लिकेशन के लिए सुविधा बनाने पर ध्यान केंद्रित करने की अनुमति देता है।
.NET एसडीके का उपयोग करके एप्लिकेशन में फ्लडगेट सुविधा ध्वज जोड़ने का एक उदाहरण यहां दिया गया है।
using FloodGate.SDK;
var floodgateClient = new FloodGateClient("API-KEY");
var flag = floodgateClient.GetValue("a-new-feature", false);
if (flag)
{
// Execute the code for my new feature here...
}
यदि आप एक विकास टीम में काम कर रहे हैं और आप फीचर झंडे का उपयोग नहीं कर रहे हैं और आप टीम के भीतर तैनाती और कोड प्रबंधन में समस्याओं का सामना कर रहे हैं। फीचर झंडे का उपयोग इन मुद्दों को हल करने का एक शानदार तरीका हो सकता है। आपकी टीम के विकास वेग को तेज़ करने वाले फ़ीचर फ़्लैग का एक अच्छा साइड इफेक्ट भी है।
मार्टिन फाउलर यहाँ फीचर झंडे का एक बहुत ही गहराई से लिखने के लिए देता है जिसे मैं आपको पढ़ने की सलाह देता हूं।
मेरी समझ यह है कि फीचर फ़्लैग्स आपको यह तय करने में मदद करते हैं कि उपयोगकर्ता किन विशेषताओं को प्राप्त करते हैं।
उदाहरण के लिए, मान लें कि आप केवल अपने बीटा उपयोगकर्ताओं को एक नई सुविधा देखना चाहते हैं। आप बीटा उपयोगकर्ताओं के लिए उस सुविधा को "टॉगल" करेंगे और आपके बाकी उपयोगकर्ता इसे नहीं देखेंगे।
LDUser user = new LDUser("user@test.com");
boolean showFeature = ldClient.toggle("your.feature.key", user, false);
if (showFeature) {
// application code to show the feature
}
else {
// the code to run if the feature is off
}
मैं कुछ फ्रंट-एंड JS A / B टेस्ट के लिए LaunchDarkly के फीचर फ्लैग का परीक्षण कर रहा हूं - लगता है कि यह अच्छी तरह से काम कर रहा है। आप इस साइट को फ़ीचर टॉगल और फ़ीचर लाइब्रेरी के लिए देख सकते हैं ।
फ़ीचर फ्लैग्स मूल रूप से आपको कोड पर कोई बदलाव किए बिना या नए संस्करण को जारी किए बिना एक सुविधा को चालू और बंद करने की सुविधा देता है। यह विशेष रूप से मोबाइल एप्लिकेशन डेवलपर्स के लिए एक महत्वपूर्ण समाधान है क्योंकि उनके पास नए संस्करण के लिए अपने एप्लिकेशन को अपडेट करने के लिए उपयोगकर्ताओं पर कोई नियंत्रण नहीं है।
मोबाइल एप्लिकेशन डेवलपर्स के लिए यह सेवा देने वाली कई कंपनियां हैं।
मेरी कंपनी में हम अपने सास ऐप में पेश हर नई सुविधा के लिए सुविधा झंडे का उपयोग करते हैं। प्रदर्शन के लाभों के अलावा, यह हमें धीरे-धीरे नई सुविधाओं को रोल करने की भी अनुमति देता है - पहले पावर उपयोगकर्ताओं के लिए नई सुविधाओं को पेश करना, उनसे प्रतिक्रिया प्राप्त करना और सभी उपयोगकर्ताओं को इसे रोल आउट करने से पहले इसे सुधारना।
यह हमें व्यक्तिगत उपयोगकर्ताओं के लिए ऑफ़र को अनुकूलित करने की भी अनुमति देता है - बिजली उपयोगकर्ता सभी सुविधाएँ चाहते हैं; साधारण उपयोगकर्ता बस मूल सामान चाहते हैं और सभी शक्तिशाली जटिल सुविधाओं से भ्रमित हो सकते हैं। यह हमारी बिक्री टीम को अप-सेल करने की भी अनुमति देता है।
और निश्चित रूप से अन्य लोगों ने बताया है, अगर हम पाते हैं कि एक सुविधा प्रदर्शन में गिरावट का कारण बन रही है, तो हम बस उस एक सुविधा को बंद कर सकते हैं (या तो सभी ग्राहकों के लिए या एक ग्राहक जो एक समस्या पैदा कर रहा है)।