
हर बदलाव पर प्रोड में डिप्लॉय करना डरावना हो सकता है, लेकिन सीधे प्रोड में डिप्लॉय न करना उससे भी ज़्यादा डरावना है।
यह वह प्रक्रिया है जो मैंने Amazon में चलाई थी, एक ऐसी टीम का नेतृत्व करते हुए जो करोड़ों ग्राहकों तक डिप्लॉयमेंट करती थी। अपनी कंसल्टिंग के ज़रिए, मैंने इंजीनियरिंग टीमों को हर दो हफ़्ते होने वाली शेड्यूल्ड रिलीज़ से आगे बढ़ाकर हर मर्ज पर शिप करने तक पहुँचाया है।
चलिए सबसे स्पष्ट बात से शुरू करते हैं:
आप आउटेज पैदा करेंगे। यह सवाल 'अगर' का नहीं, बल्कि 'कब' का है।
यूनिट टेस्टिंग, इंटीग्रेशन टेस्टिंग, डॉगफूडिंग, एंड-टू-एंड जो भी हो, या डिप्लॉय देवताओं को बलि चढ़ाना — इनमें से कोई भी चीज़ हर बग को नहीं पकड़ सकती।
एक हफ़्ते पहले आपके फीचर पर जो टेस्टिंग की गई थी, वह आपके टीममेट के नवीनतम बदलावों के साथ नहीं की गई थी।
आपकी टेस्टिंग आपके टीममेट की सर्विस के प्री-प्रोड वर्ज़न के खिलाफ की गई थी, जो अब बदल चुका है और उसमें एक बैकवर्ड्स इनकम्पैटिबल बदलाव शामिल है।
जितनी देर आप इंतज़ार करते हैं, उतने ज़्यादा बदलाव एक रिलीज़ पर जमा होते जाते हैं। अगर आपको रोलबैक करना पड़े, तो आपको 1-2 घंटे के बदलावों के बजाय दो हफ़्तों के बदलावों को रोलबैक करना होगा।
अगर हम इस आधार को स्वीकार कर लें कि आउटेज अपरिहार्य है, तो किसी रिलीज़ की QA करने में भारी संसाधन लगाने का कोई खास मतलब नहीं रह जाता। इसके बजाय हमें अपने संसाधनों को रिलीज़ की मॉनिटरिंग और ऑब्ज़र्वेशन पर केंद्रित करना चाहिए, और आउटेज होने पर उसे संभालने के लिए तैयार रहना चाहिए।
अब, हम वहाँ तक कैसे पहुँचते हैं:
पूर्वापेक्षाएँ:
CI/CD
टेस्टिंग का महत्व आपके विचार से कहीं कम है। टेस्ट यह साबित नहीं कर सकते कि आपका बदलाव प्रोडक्शन में सुरक्षित है। कुछ भी नहीं कर सकता। टेस्ट जो करते हैं, वह है फेलियर को सस्ता बनाना। CI में पकड़ा गया बग मिनटों का खर्च होता है। प्रोडक्शन में पकड़ा गया बग आपकी शाम रोलबैक करने में ले जाता है।
इसलिए हर मर्ज पर पूरा सूट चलाएँ, या कम से कम पाइपलाइन के हिस्से के रूप में: यूनिट, इंटीग्रेशन, एंड-टू-एंड टेस्ट। पाइपलाइन में जितना आगे बग यात्रा करता है, उसे ठीक करने की लागत उतनी ही अधिक होती है।
मॉनिटरिंग/ऑब्ज़र्वेबिलिटी
यहाँ असली खेल रिग्रेशन को जल्द से जल्द पकड़ने का है। इसे हासिल करने के लिए, आपके पास बेहतरीन मॉनिटरिंग होनी चाहिए। यह कुछ इस रूप में होती है:
- मेट्रिक्स: एरर, लेटेंसी, अवेलेबिलिटी
- कॉरिलेशन आईडी के साथ लॉग्स
- उपरोक्त दोनों पर जुड़े sev-3 और sev-2 (पेजिंग) के लिए अलार्म
अलार्म थ्रेशोल्ड को ट्यून करने में थोड़ी कला और विज्ञान दोनों होते हैं। यह संवेदनशीलता और वास्तविक इंसिडेंट पर आपकी प्रतिक्रिया की गति के बीच संतुलन है। आपका लक्षित sev-2 अलर्ट समय 5-10 मिनट होना चाहिए।
शुरुआत में, आप संभवतः गलत होंगे और संभवतः बहुत अधिक संवेदनशील होंगे। दुर्भाग्य से, यह ज़्यादातर ट्रायल एंड एरर से सीखा जाता है, इसलिए शुरुआत में आपको कुछ रात 2 बजे उठना पड़ सकता है।
फीचर फ्लैग्स
किसी भी जोखिम भरे बदलाव के लिए, आपको उसे फीचर फ्लैग / रिमोट कॉन्फिग के पीछे शिप करना चाहिए। फीचर फ्लैग आपको पूरे डिप्लॉयमेंट को रोलबैक करने की ज़रूरत के बिना, कुछ ही मिनटों में किसी भी बदलाव को रोलबैक या बंद करने की सुविधा देता है। इसके अलावा, अगर आपकी फीचर फ्लैग सर्विस अनुमति देती है (और उसे देनी चाहिए), तो आप फीचर को प्रतिशत या कोहोर्ट आधार पर चरणबद्ध तरीके से रोल आउट कर सकते हैं, जिससे किसी खराब बदलाव का प्रभाव और कम हो जाता है।
यह हमें कोड के डिप्लॉयमेंट और कोड के एक्टिवेशन को अलग करने की सुविधा देता है। यह सूक्ष्म है, लेकिन जोखिम कम करने के लिए गेम-चेंजर है।
नोट: इन्हें साफ करने के लिए आपको एक प्रोसेस की आवश्यकता होगी। आदर्श रूप से, आप बनाए गए प्रत्येक फ्लैग के लिए एक रिमूवल टिकट बनाएँ। अन्यथा, जब आपकी फीचर फ्लैग सर्विस डाउन होगी (और वह होगी), तो आपके सामने एक गंभीर रिग्रेशन होगा। मुझसे पूछिए कि मुझे कैसे पता है।
ऑटोमैटिक रोलबैक (डिप्लॉय टाइम सर्किट ब्रेकर)
डिप्लॉय टाइम सर्किट ब्रेकर एक ऐसी कार्यक्षमता है जो आपको डिप्लॉयमेंट को रोलबैक करने की सुविधा देती है, यदि आप इसे पूरे फ्लीट में रोल आउट करते समय एरर की संख्या या प्रतिशत देखते हैं। अधिकांश क्लाउड प्रोवाइडर्स के पास अब यह एक साधारण चेकबॉक्स के साथ उपलब्ध है।
बैकवर्ड्स कम्पैटिबल बदलाव
आपको यह पहले से ही करना चाहिए, लेकिन हर कमिट पर डिप्लॉय करना इस अभ्यास को मजबूर करता है। रोलिंग डिप्लॉयमेंट के दौरान, आपके पास पुराना वर्ज़न और नया वर्ज़न एक साथ चल रहे होंगे। हर बदलाव को पिछले वर्ज़न के साथ काम करना होगा। इससे बचने के लिए आधी रात को डिप्लॉय करने की आपकी तरकीब अब काम नहीं करेगी।
डिप्लॉयमेंट स्ट्रैटेजीज़
अब, जब ये सब तैयार हैं, तो हम कुछ अलग डिप्लॉयमेंट स्ट्रैटेजीज़ पर चर्चा कर सकते हैं जो आपके बदलावों को रोल आउट करते समय जोखिम कम करने में मदद कर सकती हैं।
वन बॉक्स (कैनरी)
वन बॉक्स डिप्लॉयमेंट आपके बदलावों को बड़े फ्लीट के एक बॉक्स पर डिप्लॉय करता है। यह आपको किसी भी खराब बदलाव के प्रभाव को केवल एक होस्ट तक सीमित करने की सुविधा देता है।
आप डिप्लॉय करते हैं और इसे कुछ समय के लिए ऐसे ही छोड़ देते हैं, ताकि यह बड़े ट्रैफिक का एक छोटा सा हिस्सा प्राप्त करे। आपके पास इस बॉक्स पर मॉनिटरिंग और अलर्टिंग कॉन्फिगर होती है जो कुछ भी टूटने पर अलर्ट करेगी।
रोलिंग डिप्लॉयमेंट्स
रोलिंग डिप्लॉयमेंट आपको समय के साथ प्रतिशत आधार पर रोल आउट करने की सुविधा देता है, ताकि यदि कोई भयावह एरर हो, तो आप उसे सभी मशीनों को प्रभावित करने से पहले पकड़ लें और फिर उन्हें रोलबैक करना शुरू कर सकें।
रीजनल रोलआउट
जैसे-जैसे आपकी कंपनी बढ़ती है, आपके पास मल्टी-रीजन डिप्लॉयमेंट होंगे। इन सभी रीजन में एक साथ डिप्लॉय करने के बजाय, आप पहले एक विशिष्ट रीजन में डिप्लॉय कर सकते हैं (आमतौर पर सबसे कम ट्रैफिक वाला)।
ऐसे मामले जहाँ यह लागू नहीं होता
ऐप स्टोर
मोबाइल ऐप शिप करना इस गाइडेंस के साथ पूरी तरह संगत नहीं है। ऐप स्टोर की रिव्यू कतार आपकी डिप्लॉयमेंट कैडेंस को थ्रॉटल करती है और एक अलग रणनीति की आवश्यकता होती है।
सर्टिफाइड एनवायरनमेंट्स
मेडिकल डिवाइस, एवियोनिक्स, इंडस्ट्रियल कंट्रोल आदि। यदि आपको बिल्ड सर्टिफाई करने के लिए किसी रेगुलेटर की आवश्यकता है, तो आप कंटीन्यूअस डिप्लॉयमेंट नहीं कर सकते।
ऑन-प्रिम / सेल्फ-होस्टेड
आपको अपग्रेड को नियंत्रित करने का अधिकार नहीं मिलता। आप अपने द्वारा संचालित हर चीज़ पर कंटीन्यूअस डिप्लॉयमेंट कर सकते हैं, हालाँकि आपको अभी भी प्रत्येक बदलाव को वर्ज़न करना होगा और आपका ग्राहक तय करता है कि इसे कब अपनाया जाए।
कहाँ से शुरू करें
यह सब एक साथ मत करें। क्रम मायने रखता है:
- CI को ग्रीन और तेज़ बनाएँ। आदर्श रूप से 15 मिनट से कम
- एरर रेट, लेटेंसी और अवेलेबिलिटी पर मेट्रिक्स और अलार्म प्राप्त करें। यह इस अभ्यास का सबसे महत्वपूर्ण हिस्सा है
- किसी भी जोखिम भरे बदलाव को फ्लैग के पीछे रखें
- वन-बॉक्स + ऑटोमेटेड रोलबैक जोड़ें
- रिलीज़ कैलेंडर हटा दें
- अब जब आप रिलीज़ शेड्यूल नहीं कर रहे हैं, तो अपने सारे अतिरिक्त समय का नया उपयोग खोजें
मैंने जिन अधिकांश टीमों के साथ काम किया है, वे इसे पूरा करने में लगभग तीन महीने लेती हैं। टूलिंग आसान हिस्सा है। ऑर्ग प्रोसेस और शेड्यूल्ड रिलीज़ को सुरक्षित मानने का भ्रम तोड़ना कठिन हिस्सा है।
अगर आपकी टीम रिलीज़ कैलेंडर पर है और उससे हटना चाहती है, तो मैं यही काम करता हूँ। मुझे DM करें।





