डिप्लॉयमेंट वेरिफ़िकेशन टेस्टिंग
डिप्लॉयमेंट वेरिफ़िकेशन वह टेस्टिंग है जो किसी एनवायरनमेंट में नया वर्ज़न डिप्लॉय होने के तुरंत बाद की जाती है, ताकि पुष्टि हो कि डिप्लॉयमेंट सफल रहा और नया वर्ज़न असली कॉन्फ़िगरेशन, असली इन्फ़्रास्ट्रक्चर और — प्रोडक्शन में — असली ट्रैफ़िक के साथ अपेक्षा के अनुसार व्यवहार करता है। Pre-release टेस्टिंग साबित करती है कि build अच्छा है; डिप्लॉयमेंट वेरिफ़िकेशन साबित करता है कि उसका यह डिप्लॉयमेंट अच्छा है। दोनों अलग कारणों से फ़ेल होते हैं — ग़ायब environment variable, लागू न हुई migration, ग़लत certificate, पुराने वर्ज़न की ओर इशारा करता load balancer — और इनमें से कोई भी staging के टेस्ट run में नहीं दिखता।
यह गाइड काम को उसी क्रम में ले चलती है जिसमें वह होता है: डिप्लॉय से पहले वेरिफ़िकेशन प्लान और rollback मानदंड लिखना, डिप्लॉयमेंट के बाद smoke टेस्ट चलाना, उसके बाद synthetic checks चालू रखना, canary रिलीज़ और feature flags जैसे क्रमिक rollouts वेरिफ़ाई करना, monitoring सिग्नल पढ़ना, और rollback को वैलिडेट करना — उन डेटाबेस migrations समेत जो rollback को कठिन बना सकती हैं।
डिप्लॉयमेंट वेरिफ़िकेशन में क्या आता है
डिप्लॉयमेंट सिर्फ़ कोड नहीं बदलता। यह container images, कॉन्फ़िगरेशन, secrets, डेटाबेस schema, इन्फ़्रास्ट्रक्चर और routing बदलता है, अक्सर एक ही क़दम में। डिप्लॉयमेंट वेरिफ़िकेशन इन सबके नतीजे को एक साथ, लक्षित एनवायरनमेंट में, इस सवाल के साथ जाँचता है: क्या नया वर्ज़न चल रहा है, सही कॉन्फ़िगर है, पहुँच में है, और कम से कम पिछले वर्ज़न जितना अच्छा व्यवहार कर रहा है?
डिप्लॉय करने और रिलीज़ करने को अलग समझना मदद करता है। डिप्लॉय करना नया कोड सर्वर पर रखना है; रिलीज़ करना नया व्यवहार यूज़र के सामने लाना है। Canary रिलीज़, blue-green switching और feature flags जैसी तकनीकें इन दोनों को अलग करने के लिए ही हैं, ताकि टीम रिलीज़ से पहले बहुत कम या बिना यूज़र एक्सपोज़र के डिप्लॉयमेंट वेरिफ़ाई कर सके। Smoke सूट वही है जो smoke, sanity और regression टेस्टिंग गाइड में बताया गया है, अब अभी-अभी डिप्लॉय हुए एनवायरनमेंट की ओर।
- वर्ज़न जाँच — एनवायरनमेंट हर instance पर वही वर्ज़न दे रहा है जो डिप्लॉय होना था।
- Health और निर्भरताएँ — सर्विसें चालू हैं और अपने डेटाबेस, queues, caches और third parties तक पहुँच सकती हैं।
- अहम रास्ते — लॉगिन, मुख्य बिज़नेस ट्रांज़ैक्शन और उसका API सही जवाब देते हैं।
- कॉन्फ़िगरेशन और सुरक्षा — सही URLs, certificates, redirects और security headers; कोई debug mode नहीं।
- असली ट्रैफ़िक में व्यवहार — errors, latency और बिज़नेस मेट्रिक्स पिछले वर्ज़न के बराबर।
डिप्लॉय से पहले सफलता और rollback मानदंड तय करें
डिप्लॉयमेंट वेरिफ़िकेशन का सबसे अहम हिस्सा डिप्लॉयमेंट से पहले होता है: यह लिखना कि "अच्छा" कैसा दिखता है और क्या rollback को ट्रिगर करेगा। इंसिडेंट के दौरान तय मानदंड दबाव में तय होते हैं, जो भी जागा हो उसके द्वारा, "पाँच मिनट और देते हैं" की ओर गहरे झुकाव के साथ। पहले से तय मानदंड rollback को बहस के बजाय एक रूटीन क़दम बना देते हैं।
प्लान एक पेज में आ जाता है। इसमें rollout के क़दम, on-call लोग, सफलता परिभाषित करने वाले सिग्नल और thresholds, वे शर्तें जिन पर टीम बिना चर्चा rollback करती है, rollback कैसे होगा और उसे कैसे वेरिफ़ाई किया जाएगा — ये सब होते हैं। नीचे का उदाहरण canary के रूप में डिप्लॉय होने वाली सर्विस का है; thresholds उदाहरण के लिए हैं, आपके अपने thresholds सर्विस की सामान्य बेसलाइन से आने चाहिए।
- Rollout और तैयारी: canary 5%, फिर 25%, फिर 100%, हर क़दम 15 मिनट; डिप्लॉय के समय flag new_checkout बंद; release engineer और on-call टेस्टर के नाम release ticket में; डिप्लॉय से पहले backup की पुष्टि और migration 0042 सिर्फ़ additive (expand क़दम)। Post-deploy smoke पहले canary पर, फिर production URL पर चलता है।
- सफलता के सिग्नल, हर क़दम पर बेसलाइन की तुलना में: HTTP 5xx rate बेसलाइन से 0.5 percentage points से ज़्यादा नहीं; p95 latency बेसलाइन के 1.2 गुने से ज़्यादा नहीं; checkout conversion उसी समय-खिड़की की बेसलाइन के 10% के भीतर; लॉग में कोई नया error signature नहीं।
- Rollback मानदंड — इनमें से कोई एक भी हो तो बिना बहस rollback: canary या production पर smoke फ़ेलियर; लगातार 5 मिनट तक 5xx rate 2% से ऊपर; payment failures बेसलाइन के दोगुने से ज़्यादा; data integrity alert (duplicate या ग़ायब ऑर्डर)।
- Rollback और पूर्णता: image 5.8.3 फिर से डिप्लॉय, new_checkout बंद ही रहे, और migration 0042 रखी जाए क्योंकि वह additive है; rollback तब वेरिफ़ाई माना जाए जब smoke.sh पास हो और /version हर instance पर 5.8.3 बताए। Rollout तभी पूरा है जब 100% ट्रैफ़िक पर एक घंटे तक सभी सिग्नल हरे रहें।
Release verification plan: orders-service 5.9.0 (example)
Deployment: canary 5% -> 25% -> 100%, 15 min per step; flag new_checkout OFF at deploy
People: release engineer + tester on call (named in the release ticket)
Before: backup confirmed; migration 0042 is additive only (expand step)
Post-deploy smoke: smoke.sh against the canary, then against the production URL
Success signals, canary compared with baseline, at every step:
- HTTP 5xx rate <= baseline + 0.5 percentage points
- p95 latency <= baseline x 1.2
- checkout conversion within 10% of baseline (same window)
- no new error signatures in the logs
Rollback criteria (any one => roll back, no debate):
- smoke failure on canary or production
- 5xx rate above 2% for 5 consecutive minutes
- payment failures above baseline x 2
- data integrity alert (duplicate or missing orders)
Rollback method: redeploy image 5.8.3; new_checkout stays OFF; migration 0042 is kept (additive)
Rollback verified: smoke.sh passes and /version reports 5.8.3 on every instance
Done when: 100% of traffic for 1 hour with all signals green- 1डिप्लॉय से पहले लिखा गया प्लानसफलता के सिग्नल, rollback मानदंड, release engineer और on-call टेस्टर; backup की पुष्टि; migration 0042 सिर्फ़ additiveपहले
- 25.9.0 डिप्लॉयडिप्लॉय के समय flag
new_checkoutबंद - 3Post-deploy smoke
smoke.shपहले canary पर, फिर production URL परशाखा: कहीं भी smoke फ़ेल → rollbackफ़ेल
- 4Canary 5%15 मिनट
शाखा: एक भी मानदंड टूटे → rollbackफ़ेल
गेट: बेसलाइन की तुलना में सभी सफलता सिग्नल हरे
- 525% ट्रैफ़िक15 मिनट
शाखा: एक भी मानदंड टूटे → rollbackफ़ेल
गेट: बेसलाइन की तुलना में सभी सफलता सिग्नल हरे
- 6100% ट्रैफ़िकउन्हीं सिग्नलों पर एक घंटे तक निगरानी
शाखा: एक भी मानदंड टूटे → rollbackफ़ेल
चरण 4–6 के दौरान सफलता के सिग्नल: 5xx बेसलाइन + 0.5 percentage points तक, p95 बेसलाइन × 1.2 तक, checkout conversion उसी समय-खिड़की की बेसलाइन के 10% के भीतर, कोई नया error signature नहीं
इसके बाद:पूरा: 100% ट्रैफ़िक पर एक घंटे तक सभी सिग्नल हरे
- Rollback मानदंड: कोई एक भी → बिना बहस rollbacksmoke फ़ेलियर; लगातार 5 मिनट तक 5xx rate 2% से ऊपर; payment failures बेसलाइन के दोगुने से ज़्यादा; data integrity alert (duplicate या ग़ायब ऑर्डर)
- Rollback: image 5.8.3 फिर से डिप्लॉय
new_checkoutबंद ही रहे, migration 0042 रखी जाए; वेरिफ़ाई तब जबsmoke.shपास हो और/versionहर instance पर 5.8.3 बताए
orders-service 5.9.0 का उदाहरण प्लान: thresholds उदाहरण के लिए हैं; आपके अपने thresholds सर्विस की सामान्य बेसलाइन से आने चाहिए।
Post-deployment smoke टेस्ट
Smoke सूट को डिप्लॉयमेंट job के आख़िरी क़दम के रूप में, अभी-अभी डिप्लॉय हुए एनवायरनमेंट पर चलाएँ, और उसके फ़ेल होने पर pipeline फ़ेल करें। इसे छोटा (कुछ मिनट), ऐसे टेस्ट डेटा से स्वतंत्र जो प्रोडक्शन में शायद न हो, और प्रोडक्शन पर चलाने के लिए सुरक्षित रखें: read-only calls, या ऐसे समर्पित test account से writes जिसका डेटा रिपोर्ट और billing से बाहर रखा जाता हो। नकारात्मक व्यवहार भी जाँचें — जो protected endpoint अचानक token के बिना 200 लौटाए, वह डिप्लॉयमेंट दोष है।
नीचे की स्क्रिप्ट सबसे सरल उपयोगी रूप का उदाहरण है: स्पष्ट अपेक्षित status codes के साथ HTTP जाँचें और एक वर्ज़न जाँच। ज़्यादातर टीमें बाद में यही जाँचें अपने API या UI टेस्ट framework में ले जाती हैं ताकि नतीजे बाक़ी टेस्ट के समान रिपोर्ट फ़ॉर्मेट में प्रकाशित हों।
- हो सके तो हर instance या region को hit करें, सिर्फ़ load balancer को नहीं — एक पुराना instance partial-deployment का क्लासिक दोष है।
- कम से कम एक जाँच में caches को bypass करें; CDN स्वस्थ दिखने वाला cached पेज दे सकता है जबकि origin errors लौटा रहा हो।
- Health endpoint को अर्थपूर्ण बनाएँ: यह निर्भरताओं की स्थिति बताए, सिर्फ़ इसलिए 200 न लौटाए कि process ज़िंदा है।
- इन्फ़्रास्ट्रक्चर बदलावों के बाद security headers, TLS और redirects जाँचें; ये कोड के बाहर कॉन्फ़िगर होते हैं और आसानी से छूट जाते हैं।
#!/usr/bin/env bash
# Example post-deployment smoke script. Usage: ./smoke.sh https://staging.example.com
set -euo pipefail
BASE_URL="$1"
EXPECTED_VERSION="${EXPECTED_VERSION:-}"
check() { # name, path, expected HTTP status
local name="$1" path="$2" expected="$3" status
status=$(curl -s -o /dev/null -w '%{http_code}' --max-time 10 "$BASE_URL$path" || true)
if [ "$status" != "$expected" ]; then
echo "FAIL $name: $path returned $status, expected $expected"
exit 1
fi
echo "ok $name ($status)"
}
check "health" "/health" 200
check "home page" "/" 200
check "product API" "/api/v1/products/1001" 200
check "auth still needed" "/api/v1/orders" 401
# Only if the service exposes its version
if [ -n "$EXPECTED_VERSION" ]; then
deployed=$(curl -s --max-time 10 "$BASE_URL/version" || true)
if [ "$deployed" != "$EXPECTED_VERSION" ]; then
echo "FAIL version: got $deployed, expected $EXPECTED_VERSION"
exit 1
fi
echo "ok version ($deployed)"
fiआज़माएँ: API हेल्थ चेकर आज़माएँ: API एंडपॉइंट टेस्टर आज़माएँ: सिक्योरिटी हेडर एनालाइज़र आज़माएँ: रीडायरेक्ट चेकर
डिप्लॉयमेंट के बाद synthetic checks
Smoke टेस्ट एक बार चलता है; synthetic monitoring चलती रहती है। Synthetic checks scripted ट्रांज़ैक्शन हैं — होम पेज लोड करना, monitoring account से लॉगिन, सर्च, कार्ट में जोड़ना, कोई मुख्य API कॉल करना — जो सिस्टम के बाहर से शेड्यूल पर, हर कुछ मिनट में चलते हैं, और फ़ेलियर या धीमेपन पर alert देते हैं। ये वे समस्याएँ पकड़ते हैं जो डिप्लॉयमेंट के कुछ समय बाद दिखती हैं: memory leak, expire होता certificate, cache तोड़ने वाला scheduled job, या अपना व्यवहार बदल चुका third party।
Synthetic checks को टेस्ट की तरह मानें: उन्हें version control में रखें, हर फ़ीचर बदलाव के साथ उनकी समीक्षा करें, उन्हें समर्पित test accounts और डेटा दें, और सुनिश्चित करें कि फ़ेलियर किसी व्यक्ति तक पहुँचे। हफ़्ते भर से चुपचाप फ़ेल होता synthetic check न होने से बुरा है, क्योंकि यह कवरेज का भ्रम पैदा करता है। शेड्यूल को cron expression में लिखें तो उस पर भरोसा करने से पहले उसे और उसके अगले run times को जाँच लें।
आज़माएँ: Cron एक्सप्रेशन जनरेटर आज़माएँ: Cron एक्सप्रेशन एक्सप्लेनर आज़माएँ: रिस्पॉन्स टाइम एनालाइज़र
Canary रिलीज़, blue-green और feature flags
Progressive delivery बदलाव को ट्रैफ़िक के बढ़ते हिस्से के सामने लाती है, हर क़दम पर एक जाँच के साथ। Canary रिलीज़ में नया वर्ज़न पहले ट्रैफ़िक का छोटा हिस्सा पाता है — कुछ प्रतिशत, या आंतरिक यूज़र — और हिस्सा बढ़ाने से पहले उसके व्यवहार की तुलना पुराना वर्ज़न चला रही बेसलाइन से की जाती है। Google की SRE workbook canarying को canary आबादी की control आबादी से तुलना के रूप में बताती है, और टेस्टर के लिए यही मुख्य बात है: समान की तुलना समान से करें, उसी समय-खिड़की में, canary की तुलना कल के पूरे fleet से नहीं।
Blue-green डिप्लॉयमेंट दो एक जैसे एनवायरनमेंट रखता है; नया वर्ज़न ख़ाली वाले में डिप्लॉय होता है, वहाँ smoke सूट से वेरिफ़ाई होता है, और ट्रैफ़िक उस पर switch किया जाता है, जबकि पुराना एनवायरनमेंट तुरंत वापस switch के लिए तैयार रहता है। Feature flags कोड के भीतर रिलीज़ को डिप्लॉयमेंट से अलग करते हैं: नया व्यवहार बंद अवस्था में ship होता है, आंतरिक यूज़र के लिए चालू होता है, फिर ग्राहकों के एक प्रतिशत के लिए, और बिना redeploy के बंद किया जा सकता है।
- Flag की दोनों अवस्थाएँ टेस्ट करें, और किसी flow के बीच में मौजूद यूज़र के लिए उनके बीच का बदलाव भी (flag बंद रहते बना कार्ट, flag चालू होने पर checkout)।
- Targeting वेरिफ़ाई करें: flag ठीक उन्हीं यूज़र, regions या प्रतिशत के लिए चालू है जिनके लिए इरादा था, और बाक़ी सबके लिए बंद।
- कोई असली ट्रैफ़िक पहुँचने से पहले smoke सूट सीधे canary या ख़ाली एनवायरनमेंट पर चलाएँ।
- Rollout के दौरान दोनों वर्ज़न compatible रखें: APIs, message formats और डेटाबेस schema को पुराने और नए कोड दोनों के साथ एक साथ काम करना चाहिए।
- पूरी रिलीज़ के बाद flags हटाएँ; लंबे समय तक रहने वाले flags टेस्ट करने लायक combinations को कई गुना कर देते हैं।
देखने लायक monitoring सिग्नल
Rollout के दौरान और बाद में वेरिफ़िकेशन टेस्ट नतीजों के बजाय प्रोडक्शन सिग्नलों पर टिकता है। Google SRE book के चार golden signals एक समझदार न्यूनतम हैं: latency, traffic, errors और saturation। बिज़नेस सिग्नल भी जोड़ें, क्योंकि कई डिप्लॉयमेंट दोष कोई error पैदा ही नहीं करते — ऑर्डर बस रुक जाते हैं, या totals ग़लत होते हैं। हर सिग्नल की तुलना उसी अवधि की बेसलाइन से करें और डिप्लॉयमेंट के समय से मेल खाते अचानक बदलाव खोजें।
- Errors — HTTP 5xx rate, फ़ेल jobs, client-side JavaScript errors, ऐसे नए error messages जो डिप्लॉयमेंट से पहले नहीं थे।
- Latency — मुख्य endpoints का p95 और p99, सिर्फ़ औसत नहीं; धीमे सफल requests भी regression हैं।
- Traffic — अचानक गिरावट का मतलब हो सकता है कि यूज़र किसी फ़ीचर तक नहीं पहुँच पा रहे; अचानक उछाल retry storms का संकेत हो सकता है।
- Saturation — CPU, memory, connection pools, queue depth; धीमा leak साफ़ smoke टेस्ट के घंटों बाद यहीं दिखता है।
- बिज़नेस — sign-ups, logins, checkouts, payments, भेजे गए messages, पिछले दिनों के उसी घंटे की तुलना में।
- समय के साथ delivery की सेहत — change fail rate और failed deployment recovery time, जो DORA मेट्रिक्स में से दो हैं, दिखाते हैं कि कई रिलीज़ में डिप्लॉयमेंट वेरिफ़िकेशन और rollback काम कर रहे हैं या नहीं।
Rollback और रिलीज़ वैलिडेशन
Rollback ख़ुद एक डिप्लॉयमेंट है और उसे भी उसी तरह वेरिफ़ाई करना चाहिए: smoke सूट फिर चलाएँ और पुष्टि करें कि version endpoint हर instance पर पिछला वर्ज़न बता रहा है। इन्फ़्रास्ट्रक्चर या डेटा बदलने वाली किसी भी रिलीज़ के लिए staging पर rollback का अभ्यास करें, और उसका समय मापें — एक घंटे का rollback उस दोष के लिए सुरक्षा-जाल नहीं है जो हर मिनट पैसे का नुक़सान करता है। कभी-कभी forward fix rollback से तेज़ और सुरक्षित होता है; कौन-सा लागू होगा यह प्लान में तय करें, इंसिडेंट के दौरान नहीं।
डेटाबेस migrations ही सबसे ज़्यादा rollback को कठिन बनाती हैं। जैसे ही कोई migration कॉलम हटाती है, टेबल का नाम बदलती है या डेटा दोबारा लिखती है, कोड का पिछला वर्ज़न नए schema पर शायद चल न सके, और migration उलटने से डिप्लॉयमेंट के बाद लिखा डेटा खो सकता है। आम बचाव expand-and-contract तरीक़ा है: पहले नई संरचनाएँ backward-compatible ढंग से जोड़ें, ऐसा कोड डिप्लॉय करें जो दोनों के साथ काम करे, डेटा migrate करें, और पुरानी संरचनाएँ सिर्फ़ किसी बाद की रिलीज़ में हटाएँ। Migrations की टेस्टिंग — प्रोडक्शन आकार की कॉपी पर, नए schema पर पुराने कोड के साथ, locks और अवधि मापते हुए — डेटाबेस transactions और migrations टेस्टिंग गाइड में कवर है।
- डिप्लॉयमेंट से पहले लिखे rollback मानदंड, संख्यात्मक thresholds और नामित निर्णय-मालिक के साथ।
- Rollback प्रक्रिया का अभ्यास और समय-माप; पिछले वर्ज़न का artifact अब भी उपलब्ध।
- रिलीज़ के साथ migration जाने पर हर बार नए schema पर पुराना कोड टेस्ट।
- विनाशकारी migration क़दम (drop, rename, type change) उस कोड के बाद की रिलीज़ में ship हों जिसने उनका इस्तेमाल बंद किया।
- Rollback को उसी smoke सूट और version जाँच से वेरिफ़ाई करें जो डिप्लॉयमेंट के लिए थी।
आम डिप्लॉयमेंट दोष
- 5.9.0 डिप्लॉय करने के बाद छह में से दो instances पर प्रोडक्शन 5.8.3 लौटाता है (partial rollout)।
- डेटाबेस connection pool ख़त्म होने पर भी health endpoint 200 लौटाता है।
- Origin के 502 लौटाते हुए भी smoke टेस्ट cached CDN पेज पर पास हो जाता है।
- Gateway कॉन्फ़िगरेशन बदलाव के बाद GET /api/v1/orders बिना token के 200 लौटाता है।
- नए load balancer पर Strict-Transport-Security header ग़ायब है।
- Saved cards वाले यूज़र के लिए POST /orders पर canary बेसलाइन से तीन गुना 5xx rate दिखाता है।
- 5% के लिए चालू flag new_checkout लॉग-आउट विज़िटर्स को भी नया flow दिखाता है।
- 5.8.3 पर rollback फ़ेल: पुराना कोड नए status PENDING_REVIEW वाले ऑर्डर नहीं पढ़ पाता।
- Synthetic login check छह दिन से फ़ेल क्योंकि उसके test account का पासवर्ड expire हो गया।
डिप्लॉयमेंट वेरिफ़िकेशन चेकलिस्ट
- वेरिफ़िकेशन प्लान लिखा हुआ: rollout क़दम, सफलता सिग्नल, rollback मानदंड, owners।
- Migrations की backward compatibility के लिए समीक्षा; नए schema पर पुराना कोड टेस्ट।
- Post-deployment smoke सूट अपने-आप चलता है और फ़ेल होने पर pipeline फ़ेल करता है।
- हर instance या region पर वर्ज़न की पुष्टि।
- इन्फ़्रास्ट्रक्चर बदलावों के बाद security headers, TLS और redirects की जाँच।
- असली ट्रैफ़िक से पहले canary या ख़ाली एनवायरनमेंट वेरिफ़ाई; हर क़दम पर बेसलाइन से तुलना।
- Feature flags दोनों अवस्थाओं में और सही targeting के लिए टेस्ट।
- Golden signals और बिज़नेस सिग्नल तय अवधि तक देखे गए।
- Rollback का अभ्यास, समय-माप और उसी smoke सूट से वेरिफ़िकेशन।
- Synthetic checks नए व्यवहार के लिए अपडेट और किसी असली व्यक्ति को alert करते हुए।
अक्सर पूछे जाने वाले सवाल
डिप्लॉयमेंट वेरिफ़िकेशन और रिलीज़ टेस्टिंग में क्या फ़र्क़ है?
रिलीज़ टेस्टिंग, जैसे release candidate पर regression सूट, दिखाती है कि build अच्छा है। डिप्लॉयमेंट वेरिफ़िकेशन दिखाता है कि build का यह ख़ास डिप्लॉयमेंट अपने लक्षित एनवायरनमेंट में, उसके असली कॉन्फ़िगरेशन, इन्फ़्रास्ट्रक्चर और ट्रैफ़िक के साथ काम करता है। दोनों ज़रूरी हैं, और ये अलग-अलग दोष पकड़ते हैं।
क्या प्रोडक्शन में smoke टेस्ट चलाना सुरक्षित है?
हाँ, अगर वे इसी के लिए डिज़ाइन किए गए हों: जहाँ संभव हो read-only जाँचें, और writes सिर्फ़ समर्पित test accounts से जिनका डेटा reporting, billing और संचार से बाहर हो। कभी असली ग्राहक accounts इस्तेमाल न करें और असली payments या messages ट्रिगर न करें।
Canary रिलीज़ क्या है?
ऐसा डिप्लॉयमेंट जिसमें नया वर्ज़न पहले ट्रैफ़िक का छोटा हिस्सा पाता है, और उसके errors, latency और बिज़नेस सिग्नलों की तुलना साथ चल रहे पुराने वर्ज़न से की जाती है। Canary स्वस्थ हो तो हिस्सा क़दम-दर-क़दम बढ़ता है; वरना सीमित यूज़र प्रभाव के साथ rollback होता है।
Forward fix के बजाय rollback कब करें?
जब डिप्लॉयमेंट से पहले तय rollback मानदंड पूरे हों और rollback सुरक्षित व तेज़ होना ज्ञात हो। Forward fix तब बेहतर हो सकता है जब rollback रुका हुआ हो, जैसे किसी डेटा migration के कारण, या जब fix छोटा हो और rollback से तेज़ डिप्लॉय हो सके। कौन-सा लागू होगा यह प्लान में तय करें।
डेटाबेस migrations rollback को कठिन क्यों बनाती हैं?
क्योंकि पिछला कोड बदले हुए schema के साथ शायद काम न करे, और migration उलटने से डिप्लॉयमेंट के बाद लिखा डेटा खो सकता है। Expand-and-contract तरीक़ा हर schema बदलाव को backward compatible बनाकर और पुरानी संरचनाएँ सिर्फ़ बाद की रिलीज़ में हटाकर इससे बचाता है।
क्या synthetic checks असली monitoring की जगह ले सकते हैं?
नहीं। Synthetic checks बताते हैं कि scripted यात्राएँ बाहर से काम करती हैं या नहीं; real-user monitoring, logs और metrics बताते हैं कि असली ट्रैफ़िक के साथ क्या हो रहा है। दोनों इस्तेमाल करें: synthetic checks कम ट्रैफ़िक वाले रास्तों पर outage पकड़ते हैं, असली monitoring वे समस्याएँ पकड़ती है जिन्हें आपकी scripts कवर नहीं करतीं।
संदर्भ
- Canarying Releases — The Site Reliability Workbookबदलाव को पहले ट्रैफ़िक के छोटे हिस्से पर रिलीज़ करना और पूरी तरह फैलाने से पहले baseline से तुलना करना — SRE में deployment verification।
- Site Reliability Engineering: How Google Runs Production Systemsसर्विस लेवल ऑब्जेक्टिव, एरर बजट, "चार गोल्डन सिग्नल" की निगरानी और ओवरलोड संभालना — लचीलेपन का परिचालन पक्ष।
- DORA's software delivery performance metricsDORA के डिलीवरी मेट्रिक्स — change lead time, deployment frequency, failed deployment recovery time, change fail rate आदि — throughput और instability में समूहित।
- Release It! Second Edition: Design and Deploy Production-Ready Software (Michael T. Nygard)स्थिरता पैटर्न — टाइमआउट, सर्किट ब्रेकर, बल्कहेड, बैक-प्रेशर — और वे विफलता के तरीके जिन्हें लोड टेस्टिंग खोजने के लिए है।
- Continuous Integration (Martin Fowler)continuous integration का व्यापक रूप से संदर्भित विवरण: बार-बार integrate करें, build को self-testing और तेज़ रखें, टूटा build तुरंत ठीक करें।
- GitHub Actions documentationGitHub Actions में workflows, jobs, runners और artifacts कैसे परिभाषित होते हैं — जहाँ हर push या pull request पर ऑटोमेटेड टेस्ट चलते हैं।
अभ्यास
वेरिफ़िकेशन प्लान की समीक्षा करें, फिर canary पढ़ें
आप एक online bus-ticket booking platform (काल्पनिक) के on-call टेस्टर हैं। Bookings service की release 7.4.0 गुरुवार को canary के रूप में प्रोडक्शन में जा रही है। यह feature flag के पीछे seat selection जोड़ती है, दो डेटाबेस migrations ले जाती है और सर्विस को नए load balancer पर ले जाती है। Release engineer ने एक पेज का वेरिफ़िकेशन प्लान लिखा है और डिप्लॉयमेंट से पहले आपसे उसकी समीक्षा करने को कहा है। नीचे के material में बदलावों की सूची, सर्विस की बेसलाइन, प्लान का draft और, उसके नीचे, पहले canary क़दम की readout है।
काग़ज़ पर दो दौर में काम करें। पहले गाइड के plan, smoke और rollback सेक्शन के साथ डिप्लॉयमेंट से पहले प्लान ठीक करें: बेसलाइन से निकले संख्यात्मक मानदंड, इस release के लिए सही smoke सूट, और ऐसा rollback जो सच में काम करे। फिर 10:25 की readout को अपने मानदंडों से मिलाकर पढ़ें और तय करें कि आगे क्या होगा। Thresholds निकालने में percentage calculator काम आएगा। इसके लिए 20–30 मिनट रखें।
Online bus-ticket booking platform (काल्पनिक) - bookings-service
Release 7.4.0, 7.3.2 की जगह लेती है। डिप्लॉयमेंट: गुरुवार 15 अक्टूबर 2026, 10:00।
Topology: load balancer के पीछे 6 instances; web pages के आगे एक CDN।
Canary: 2 अतिरिक्त instances 7.4.0 चलाते हैं और ट्रैफ़िक का weighted हिस्सा पाते हैं।
लोग: release engineer और rollback निर्णय-मालिक: तारिक़ | on-call टेस्टर: आप
support lead: लमा
7.4.0 में क्या बदलता है
- Booking पेज पर seat selection, feature flag seat_map के पीछे।
डिप्लॉय के समय OFF; बाद में: staff accounts -> 10% ग्राहक -> 100%।
- Migration 0131: nullable कॉलम bookings.seat_number जोड़ना।
- Migration 0132: कॉलम bookings.status का नाम bookings.state करना
(7.4.0 state पढ़ता-लिखता है; 7.3.2 status पढ़ता-लिखता है)।
- नए TLS certificate के साथ नया load balancer; HTTP -> HTTPS redirect फिर कॉन्फ़िगर।
बेसलाइन: पिछले 14 दिन, वही weekday और वही घंटा, dashboards से
HTTP 5xx rate 0.2%
p95 latency, POST /api/v2/bookings 480 ms
booking completion rate (started -> paid) 62%
payment failure rate 1.0%
Draft वेरिफ़िकेशन प्लान (तारिक़ ने लिखा, आपकी समीक्षा के लिए)
Rollout: canary 5% -> 25% -> 100%, हर क़दम 20 मिनट
Smoke: deploy job के बाद smoke.sh हाथ से चलाना
(health, home page, trips API, auth 401, version)
Success: कोई गंभीर error नहीं, साइट तेज़ लगे
Rollback: बुरा लगे तो 7.3.2 फिर डिप्लॉय करो और migrations उलट दो
Done when: deployment job हरा हो
10:25 की readout - canary 20 मिनट से 5% पर; migration 0131 लागू
प्लान समीक्षा में तय: 0132 रोकी गई; 7.4.0 का यह build अब भी status इस्तेमाल करता है।
Signal Canary 7.4.0 Control 7.3.2
HTTP 5xx rate 0.2% 0.2%
p95 latency, POST /api/v2/bookings 610 ms 470 ms
average latency, POST /api/v2/bookings 210 ms 200 ms
booking completion rate 41% 61%
payment failure rate 1.0% 0.9%
logs में नए error signatures कोई नहीं -
canary instances पर smoke.sh सब ok, version 7.4.0
10:18, लमा का ticket: एक ग्राहक जो logged in नहीं है, booking पेज पर seat map
देखता है और payment तक आगे नहीं बढ़ पाता।- Draft के success signals और rollback मानदंडों को बेसलाइन से निकले संख्यात्मक thresholds के रूप में फिर लिखें, तुलना की विधि (canary बनाम control, उसी समय-खिड़की में) और rollback के निर्णय-मालिक के साथ।
- Smoke वाली लाइन ठीक करें: post-deployment smoke सूट कहाँ और कब चलेगा, ख़ास इस release के लिए उसमें कौन-सी जाँचें होनी चाहिए, और वह pipeline को कैसे फ़ेल करेगा।
- दोनों migrations को rollback लाइन के सामने रखकर देखें: 0132 चल जाने के बाद क्या 7.3.2 फिर डिप्लॉय हो सकता है? Release में या rollback की विधि में आप क्या बदलेंगे? फिर "Rollback" और "Done when" लाइनें फिर लिखें।
- 10:25 की readout को अपने मानदंडों से पढ़ें: हर signal के लिए कहें कि वह पास है या नहीं, और बताएँ कि average latency और बराबर 5xx rate क्या बताते हैं और क्या नहीं। Support ticket flag के बारे में क्या कहता है?
- तय करें: 25% तक बढ़ाना, रोकना, या rollback — और लिखें कि आगे क्या होगा: rollback के क़दम और उनका वेरिफ़िकेशन, क्या दर्ज होगा, और कौन-से defects खोले जाएँगे।
मॉडल उत्तर दिखाएँ
प्लान समीक्षा: मानदंड। "कोई गंभीर error नहीं" और "साइट तेज़ लगे" को 10:25 पर कोई जाँच नहीं सकता, इसलिए उनकी जगह बेसलाइन से निकले नंबर रखें और बताएँ कि तुलना कैसे होगी: canary बनाम 7.3.2 चला रही control, उसी 20 मिनट की खिड़की में, हर क़दम पर — कल के पूरे fleet से नहीं। Success signals: HTTP 5xx rate ज़्यादा से ज़्यादा control + 0.5 percentage points (इस बेसलाइन पर 0.7%); POST /api/v2/bookings की p95 latency ज़्यादा से ज़्यादा control का 1.2 गुना (480 ms की बेसलाइन पर 576 ms); booking completion rate control की दर का कम से कम 90% (62% की बेसलाइन पर लगभग 56%); payment failure rate ज़्यादा से ज़्यादा control का 1.5 गुना; logs में कोई नया error signature नहीं। Rollback मानदंड, जिनमें से कोई एक भी पूरा हो तो बिना चर्चा rollback: canary या प्रोडक्शन पर smoke फ़ेलियर; लगातार 5 मिनट 5xx rate 2% से ऊपर; पूरे एक क़दम तक booking completion rate control से 10% से ज़्यादा नीचे; payment failure rate control के दोगुने से ऊपर; data integrity alert (ग़ायब या duplicate bookings, एक सीट दो बार बिकना)। लोगों के नाम लिखें: rollback का फ़ैसला तारिक़ का है, smoke सूट आप चलाते हैं और हर क़दम पर signals आप पढ़ते हैं, और thresholds 10:00 से पहले release ticket में लिखे हों। सटीक नंबर एक judgement हैं; जिस पर मोलभाव नहीं, वह यह कि वे मौजूद हों, इसी सर्विस की बेसलाइन से आएँ और डिप्लॉयमेंट से पहले तय हों।
प्लान समीक्षा: smoke। Job के बाद smoke.sh हाथ से चलाने का मतलब है कि वह दबाव में भूला जा सकता है, ट्रैफ़िक आ जाने के बाद चलता है, और pipeline को फ़ेल नहीं कर सकता। Smoke सूट को deployment job का आख़िरी automated क़दम बनाएँ, जो पहले सीधे canary instances पर चले (5% पर load balancer से गुज़रती जाँच ज़्यादातर 7.3.2 तक पहुँचती है), फिर हर क़दम के बाद प्रोडक्शन पर, और कोई भी जाँच फ़ेल हो तो job फ़ेल करे। इस release के लिए उसमें होना चाहिए: GET /health 200 लौटाए और health endpoint अपनी निर्भरताएँ (डेटाबेस, payment provider) रिपोर्ट करे; cache bypass के साथ home page, ताकि origin जाँचा जाए, CDN की कॉपी नहीं; trips API (GET /api/v2/trips, ऐसे route के लिए जो रोज़ चलता है) 200 और ख़ाली न होने वाली list लौटाए, किसी fixed trip id के बजाय जिसकी बस शायद निकल चुकी हो; token के बिना GET /api/v2/bookings 401 लौटाए — वह negative जाँच जो authentication लागू करना बंद कर चुके gateway को पकड़ती है; /version हर canary instance पर, और 100% पर छहों instances में से हर एक पर, 7.4.0 लौटाए — load balancer से एक call नहीं; और क्योंकि load balancer और certificate बदले हैं: TLS certificate domain के लिए valid हो, http:// उसी path पर 301 या 308 के साथ https:// पर redirect हो, और पुराने load balancer पर मौजूद security headers, Strict-Transport-Security समेत, नए पर भी मौजूद हों। एक flag-state जाँच जोड़ें: seat_map OFF रहते booking पेज में कोई seat map न हो, चाहे वह बिना session के माँगा जाए या test account से। Writes, अगर हों, सिर्फ़ उस समर्पित test account से जिसकी bookings reports और payments से बाहर रखी जाती हैं।
प्लान समीक्षा: migrations और rollback। Migration 0131 एक nullable कॉलम जोड़ती है: additive, 7.3.2 उसे अनदेखा करता है, इसलिए rollback पर वह जहाँ है वहीं रहती है और किसी ख़ास handling की ज़रूरत नहीं। Migration 0132 bookings.status का नाम bookings.state करती है, और यह प्लान को दो बार तोड़ती है। पहला, इसके साथ कोई canary काम ही नहीं कर सकता: canary के दौरान control अब भी 7.3.2 चलाता है और status पढ़ता है, इसलिए जिस पल 0132 चलेगी, 95% ट्रैफ़िक फ़ेल होगा; और अगर 0132 न चले, तो 7.4.0 एक ऐसा state कॉलम पढ़ेगा जो है ही नहीं। दूसरा, "7.3.2 फिर डिप्लॉय करो और migrations उलट दो" rollback की विधि नहीं है: इंसिडेंट के बीच, load के नीचे, कॉलम का नाम वापस बदलना जो भी वर्ज़न अभी चल रहा है उसे तोड़ देता है, और यह एक ऐसी down-migration है जिसे कभी किसी ने नहीं चलाया, जो सबसे बुरे वक़्त पर चलेगी। इलाज expand-and-contract है: 7.4.0 को बदला जाए ताकि वह status ही इस्तेमाल करती रहे, और वह बिना 0132 जाए; अगर नया नाम सच में ज़रूरी है, तो कोई बाद की release state को नए कॉलम के रूप में जोड़े, दोनों में लिखे और status पढ़ती रहे, एक backfill मौजूदा values कॉपी करे, अगली release state पढ़े, और status को सिर्फ़ वह release drop करे जो कोड के उसका इस्तेमाल बंद कर देने के बाद आए। Migration ले जाने वाली हर release से पहले staging पर पुराना कोड नए schema के साथ टेस्ट हो। लाइनें फिर लिखें। Rollback: जब तक canary 100% से नीचे है, उसका traffic weight 0 करें; 100% पर छहों instances पर image 7.3.2 फिर डिप्लॉय करें; 0131 रखी जाए; seat_map OFF ही रहे; staging पर अभ्यास और समय-माप, लक्ष्य 10 मिनट से कम; तब वेरिफ़ाई माना जाए जब smoke सूट पास हो और /version ट्रैफ़िक पाने वाले हर instance पर 7.3.2 बताए। Done when: 100% ट्रैफ़िक पर 1 घंटा, हर success signal हरा और flag अब भी OFF; हरा deployment job सिर्फ़ यह साबित करता है कि job पूरा हुआ। Flag का rollout (staff, 10%, 100%) एक अलग release फ़ैसला है, अपने मानदंडों और अपनी readouts के साथ।
Readout पढ़ना। पहले control को बेसलाइन से जाँचें: 0.2%, 470 ms, 61% और 0.9% इस घंटे के लिए सामान्य हैं, इसलिए तुलना वैध है। 5xx rate 0.2% बनाम 0.2%: पास। p95 610 ms बनाम 470 ms: control का 1.30 गुना, 1.2 गुने की सीमा यानी 564 ms से ऊपर; success signal फ़ेल। Average latency 210 बनाम 200 ms पास हो जाती, और यही वजह है कि average कोई मानदंड नहीं: 5% धीमे requests mean को मुश्किल से हिलाते हैं जबकि उनमें से हर ग्राहक इंतज़ार करता है। Booking completion rate 41% बनाम 61%: एक-तिहाई bookings कम, 10% की सीमा यानी 54.9% से बहुत नीचे; एक rollback मानदंड पूरा हुआ। Payment failure rate 1.0% बनाम 0.9%: control के 1.5 गुने के भीतर, पास। कोई नया error signature नहीं: पास। बराबर 5xx rate और साफ़ logs बिज़नेस सिग्नलों का मतलब दिखाते हैं: यह defect कोई error पैदा ही नहीं करता; ग्राहक बस payment से पहले रुक जाते हैं। सिर्फ़ errors देखते तो canary 25% पर promote हो गया होता।
Ticket। प्लान कहता है कि डिप्लॉय के समय seat_map सबके लिए OFF है। एक ग्राहक जो logged in नहीं है, seat map देखता है, यानी कम से कम बिना user वाले sessions के लिए flag ON के रूप में evaluate हो रहा है — उसी तरह का targeting defect जो गाइड की सूची में है — और नया व्यवहार canary पर असली ग्राहकों तक पहुँच रहा है जबकि release कहती है कि वह release ही नहीं हुआ। यह completion में गिरावट समझाता है: seat map payment का रास्ता रोकता है। अगर seat map का code path उन requests में चलता है, तो यह POST /api/v2/bookings की p95 बढ़ने के पीछे भी हो सकता है, लेकिन यह root-cause analysis के लिए एक hypothesis है, नतीजा नहीं। Smoke सूट ने इसे नहीं देखा क्योंकि उसकी कोई जाँच booking पेज को logged-out session के रूप में load नहीं करती; क़दम 2 की flag-state जाँच इसे किसी भी ट्रैफ़िक से पहले पकड़ लेती।
फ़ैसला: अभी rollback, रोकना नहीं। पहले क़दम के अंत में एक rollback मानदंड पूरा हुआ है, इसलिए तय जवाब बिना चर्चा rollback है: आप निर्णय-मालिक तारिक़ को पूरा हुआ मानदंड और readout देते हैं, और वे rollback का फ़ैसला करते हैं; 10:00 से पहले तय मानदंड ही इसे बहस के बजाय एक रूटीन फ़ैसला बनाते हैं। क़दम: canary का weight 0 करें ताकि सारा ट्रैफ़िक 7.3.2 चला रहे छह instances पर लौटे, फिर दोनों canary instances को service से बाहर करें; migration 0131 रखें; seat_map OFF ही रहे; छहों instances में से हर एक पर smoke सूट चलाएँ और पुष्टि करें कि /version सब पर 7.3.2 बताता है और कोई ट्रैफ़िक 7.4.0 तक नहीं पहुँचता; अगले 20 मिनट वही signals देखें और पुष्टि करें कि completion rate लगभग 61% पर वापस है। फ़ैसले का समय, पूरा हुआ मानदंड, किसने तय किया, और rollback में कितना समय लगा — यह सब दर्ज करें, क्योंकि यही वह नंबर है जिसका प्लान ने वादा किया था। Forward fix पर चर्चा rollback के बाद, root cause जानकर होती है, उसकी जगह नहीं।
Defects और follow-up। Ticket को staging पर 7.4.0 और flag OFF के साथ, logged out और logged in दोनों तरह reproduce करें, ताकि title ठीक-ठीक बताए कि कौन प्रभावित है। फिर canary के सबूत जोड़कर दो defects खोलें: flag seat_map logged-out sessions के लिए (या reproduction जिन भी sessions को दिखाए उनके लिए) ON evaluate होता है, Critical, क्योंकि यह मुख्य booking रास्ता रोकता है, ticket, समय-खिड़की और canary instance ids के साथ; और 7.4.0 पर POST /api/v2/bookings की p95 control का 1.3 गुना, पहले से linked, जब तक root cause न दिखाए कि यह वही defect है या नहीं। अगली कोशिश से पहले: fix staging पर confirmation testing पास करे, flag-state जाँच और load balancer की जाँचें smoke सूट में जुड़ें, booking रास्ते का एक synthetic check जाँचे कि flag OFF रहते कोई seat map नहीं दिखता, और उसका alert किसी व्यक्ति तक पहुँचे, और canary उन्हीं मानदंडों के साथ 5% से फिर चले। जो सही हुआ उसे भी नोट करें: प्लान के thresholds ने 20 मिनट के canary को एक रूटीन rollback बना दिया, जिसमें सभी ग्राहकों के बजाय 5% प्रभावित हुए।
अगर आपके नंबर अलग हैं, तो नंबरों के बजाय नियम जाँचें: हर मानदंड संख्यात्मक है, इसी सर्विस की बेसलाइन से आता है, उसी खिड़की में canary की तुलना control से करता है, और नामित निर्णय-मालिक के साथ 10:00 से पहले तय है; smoke सूट अपने-आप, सीधे instances पर चलता है, version जाँच, एक negative जाँच और उन जाँचों के साथ जो इस release का इन्फ़्रास्ट्रक्चर बदलाव ज़रूरी बनाता है; विनाशकारी migrations कभी उस कोड के साथ ship नहीं होतीं जो उनका इस्तेमाल बंद करता है; और rollback को डिप्लॉयमेंट की तरह वेरिफ़ाई किया जाता है। कारण के साथ कड़ी latency सीमा या अलग completion floor ठीक है; "बुरा लगे" ठीक नहीं।
इस topic में आपकी प्रगति
प्रगति ट्रैक करने के लिए साइन इन करें
Topics पूर्ण चिह्नित करें, जहाँ छोड़ा था वहीं से जारी रखें और specialisation परीक्षाएँ खोलें।
QA रोडमैप का हिस्सा
इस गाइड में बताए गए टूल्स
एक साथ कई API health endpoint जाँचें और स्टेटस, latency तथा pass/fail सारांश पाएँ।
तुरंत जाँचें कि कोई API endpoint पहुँच में है या नहीं: स्टेटस, रिस्पॉन्स टाइम, साइज़, content type और TLS।
किसी endpoint का रिस्पॉन्स टाइम कई सैंपल पर मापें: न्यूनतम, अधिकतम, औसत, माध्यिका और p95।
दो API रिस्पॉन्स (जैसे staging बनाम production) की तुलना करें और हर संरचनात्मक तथा वैल्यू का अंतर देखें।
पेस्ट किए गए हेडर या किसी सार्वजनिक URL से HTTP सुरक्षा हेडर (CSP, HSTS, X-Frame-Options, Referrer-Policy, Permissions-Policy, COOP/CORP) को ग्रेड दें।
रीडायरेक्ट चेन (301/302/307/308) ट्रेस करें और हर हॉप, स्टेटस तथा अंतिम URL देखें।
cron एक्सप्रेशन विज़ुअल तरीक़े से बनाएँ और अगली रन टाइम पहले से देखें।
किसी भी cron एक्सप्रेशन को आसान भाषा में समझें और आने वाली रन टाइम देखें।