रिलीज की रणनीतियाँ: नीला-हरा और कैनरी
(धारा: प्रौद्योगिकी और बुनियादी ढांचा)
संक्षिप्त सारांश
ब्लू-ग्रीन सबसे सरल रोलबैक के साथ दो पूर्ण स्टैक (ब्लू/ग्रीन) के बीच एक त्वरित स्विच देता है। कैनरी धीरे-धीरे एसएलओ गेट्स (विलंबता, त्रुटि-दर, व्यवसाय मैट्रिक्स) के नियंत्रण में नए संस्करण में यातायात का हिस्सा बढ़ा रहा है। IGaming के लिए, यह एक स्थिर p99 और गुणवत्ता बनाए रखते हुए टूर्नामेंट और पदोन्नति के चरम पर डाउनटाइम के बिना जारी करने का एक तरीका है।
1) कब चुनना है
ब्लू-ग्रीन - तेज रिलीज, न्यूनतम जटिलता, आपको "डबल" क्लस्टर/संसाधन बजट की आवश्यकता है। जटिल राज्य प्रवास के बिना एपीआई/सामने के लिए अच्छा।
कैनरी - उच्च जोखिम वाली रिलीज़ (नए प्रवाह, महत्वपूर्ण परिवर्तन), आपको यातायात के 1-5% तक गिरावट को "पकड़ने" की अनुमति देता है। टेलीमेट्री और स्वचालित गेट की आवश्यकता है।
2) वास्तुशिल्प सिद्धांत
1. L7 स्तर रूटिंग: बैलेंसर/इंग्रेस/सर्विस-मेश (भारित ट्रैफिक मॉड्यूल, कुकीज ़/फ्लैग-रूटिंग)।
2. पृथक निर्भरता: विन्यास, phicheflags, रहस्य, कैश - संशोधन के लिए अलग से।
3. डेटा संगतता: फॉरवर्ड-संगत (expand→migrate→contract) डेटाबेस माइग्रेशन।
4. अवलोकन: व्यक्तिगत लेबल/संस्करण लेबल मेट्रिक्स/लॉग/ट्रैक में।
5. ऑटोगेट्स: p95/p99 तुलना, त्रुटि-दर, व्यवसाय केपीआई; स्वचालित रोलबैक।
3) नीला-हरा: मूल पैटर्न
स्ट्रीम
1. विस्तार ग्रीन (ब्लू की एक प्रति) → कैश/कनेक्शन को गर्म करें।
2. स्वास्थ्य-/धूम्रपान-परीक्षण चलाएं
3. ट्रैफिक (DNS/LB/Ingress) को ग्रीन पर स्विच करें।
4. हम खिड़की के अंत तक ब्लू को "गर्म" स्थिति में रखते हैं।
उदाहरण: इंग्रेस स्तर स्विचिंग (विचार)
yaml
Annotated/Backend Option - In Prod, it is usually controlled by the spec operator/rollout:
rules:
- host: api. example. com http:
paths:
- path: /
backend:
service:
name: api-green # used to be api-blue port:
number: 80
पेशेवर/विपक्ष
सरल रोलबैक (वापस नीला)।
अनुमानित रिलीज का समय।
संसाधनों के दोहराव की आवश्यकता है।
कैनरी माप के बिना "बड़ेधमाके" का जोखिम।
4) कैनरी: क्रमिक निर्माण
स्ट्रीम
1. छाया यातायात (वैकल्पिक) → 1% वास्तविक यातायात → 5% → 25% → 50% → 100%।
2. प्रत्येक चरण में - एसएलओ/व्यापार मैट्रिक्स द्वारा द्वार।
3. गिरावट के दौरान - ऑटो-रोलबैक और नैदानिक कलाकृतियों का संरक्षण।
उदाहरण: आर्गो रोलआउट्स (स्निपेट)
yaml apiVersion: argoproj. io/v1alpha1 kind: Rollout metadata: { name: payments-api }
spec:
strategy:
canary:
canaryService: payments-canary stableService: payments-stable steps:
- setWeight: 5
- pause: { duration: 5m }
- analysis:
templates:
- templateName: slo-latency
- setWeight: 25
- pause: { duration: 10m }
- analysis:
templates:
- templateName: error-rate
- setWeight: 50
- pause: { duration: 20m }
- setWeight: 100
उदाहरण: फ्लैगर + इस्तियो/NGINX (विचार)
yaml apiVersion: flagger. app/v1beta1 kind: Canary metadata: { name: games-api }
spec:
targetRef:
apiVersion: apps/v1 kind: Deployment name: games-api service:
port: 80 analysis:
interval: 1m threshold: 5 metrics:
- name: request-success-rate thresholdRange: { min: 99 }
- name: request-duration thresholdRange: { max: 300 }
webhooks:
- name: smoke url: http://tester/smoke
5) वार्म-अप और शर्त प्रबंधन
कैश/स्रोत: रेडिस/एचटीटीपी कैश/सीडीएन को गर्म करें, डेटाबेस/पीएसपी के लिए वार्म-पूल कनेक्शन तैयार करें।
एमएल/एलएलएम/मॉडल: वजन/सूचकांक/एम्बेडिंग, केवी कैश, "वार्मिंग अप" के लिए प्राथमिक अनुरोध लोड करना।
फ़ाइलें/कलाकृतियाँ: स्थिर सामग्री, टेम्पलेट, कॉन्फ़िग - स्थानीय वॉल्यूम/साइडकार को अग्रिम में जमा करें।
Ficheflags: दर्शकों/खंड के 1-5% पर रोलआउट, आपातकालीन-किल अवसर।
6) डेटाबेस: "विस्तार → माइग्रेट → अनुबंध" रणनीति
1. विस्तार: शून्य/नया स्तंभ/सूचकांक जोड़ें, दोनों संस्करणों का समर्थन करें।
2. माइग्रेट: कोड एक नई योजना का उपयोग करता है; पुराने रास्ते वैध हैं।
3. संविदा: पुराने क्षेत्रों/सूचकांकों को पूरी तरह से खोलने के बाद हटा दें।
लॉग में, स्कीमा और क्लाइंट संस्करण को ठीक करें; सभी परिवर्तन अज्ञात हैं।
भारी प्रवासन के लिए - पृष्ठभूमि जैब्स, थ्रॉटलिंग और "स्टॉप-द-वर्ल्ड" खिड़कियों पर सहमत हुए।
7) अवलोकन और द्वार (एसएलओ/एसएलए)
SRE मेट्रिक्स: p50/p95/p99, त्रुटि-दर, संतृप्ति (CPU/GPU/IO), कतार-गहराई, ठंडी शुरुआत का समय।
बिजनेस मैट्रिक्स: भुगतान रूपांतरण, बोली सफलता, निकासी समय (TTW), प्रोमो प्रतिक्रियाएं।
सामग्री की गुणवत्ता/एलएलएम: टोकन/एस, प्रतिक्रिया लंबाई, विषाक्तता, आरएजी-स्कोर।
गेट्स: थ्रेसहोल्ड से परे जाने पर ऑटो-प्रमोशन/रोलबैक और/या जब "उपयोगी मीट्रिक" गिरता है।
"नीति" (छद्म) का उदाहरण:
gate:
p95_latency_ms <= 250 error_rate % <= 1. 0 payment_conv >= baseline - 0. 3%
action:
promote rollback
8) सीआई/सीडी के साथ ऑर्केस्ट्रेशन और एकीकरण जारी करें
GitOps: संस्करण/वजन परिवर्तन - पीआर के माध्यम से प्रकट भंडार के लिए।
ट्रैफिक शुरू होने से पहले ऑटो-चेक स्मोक/ई 2 ई।
रिलीज़ प्लान: कैनरी स्टेप शेड्यूल, जिम्मेदार, चैटोप्स चैनल, रोलबैक विंडो।
संग्रह कलाकृतियाँ: रूटिंग कॉन्फ़िग, डैशबोर्ड स्नैपशॉट, मीट्रिक तुलना लॉग।
9) बहु-क्षेत्र और किनारे
आदेश: पहले "कम से कम महत्वपूर्ण" क्षेत्र/आरओआर, फिर मुख्य।
विलंबता-आधारित मार्ग: स्थानीय एसएलओ की निगरानी करें; बिना किसी कारण के यातायात का मिश्रण न करें।
डीआर-विज़न: क्षेत्र-ए में नीला क्षेत्र-बी में ग्रीन के लिए डीआर-साइट हो सकता है।
10) सुरक्षा और अनुपालन जारी
हस्ताक्षरित लुक/चार्ट, SBOM; प्रवेश नीतियों में हस्ताक्षर की जाँच कर र
रहस्य: केवल बाहरी प्रबंधक; ब्लू/ग्रीन के लिए स्वतंत्र संस्करण।
पीआईआई/क्षेत्रीयता: एक विदेशी क्षेत्र के माध्यम से पीआईआई से यातायात को मोड़ ना; तुलना करते समय लॉग मास्क।
ऑडिट: किसने प्रचार किया, कौन से गेट्स ने काम किया, जहां रोलबैक था।
11) कॉन्फ़िगरेशन उदाहरण
NGINX: कुकी/हेडर द्वारा कैनरी शाखा (विचार)
nginx map $http_x_canary $canary {
default 0;
"1" 1;
}
upstream api_stable { server stable:80; }
upstream api_canary { server canary:80; }
server {
location / {
if ($canary) { proxy_pass http://api_canary; }
proxy_pass http://api_stable;
}
}
फ़ीचर-फ़्लैग "भिन्नात्मक रोलआउट" (छद्म)
yaml feature: new_checkout rollout:
percentage: 5 criteria:
country: ["TR", "BR", "MX"]
cohort: "new-users"
kill_switch: true
12) रनबुक (विशिष्ट परिदृश्य)
कैनरी पर p99 की वृद्धि: पदोन्नति को रोकें - बैच/टाइमआउट बढ़ाएं, झंडे के माध्यम से भारी सुविधाओं को बंद करें - कुछ फली को फिर से शुरू करें।
भुगतान रूपांतरण ड्रॉप: पीएसपी मार्गों/सुविधाओं की तुलना करें, छाया लॉगिंग, रोलबैक को स्थिर करने में सक्षम करें।
डेटाबेस माइग्रेशन के साथ समस्या: लेखन के लिए फ्रीज ट्रैफिक, केवल पढ़ ने के लिए मोड सक्षम करें, स्कीमा रोलबैक करें (यदि संभव हो), आपातकालीन फिक्स जैब्स।
पीआईआई घटना: कैनरी संस्करण को काट दिया, रहस्यों का निरसन, रिपोर्ट और ऑडिट।
13) कार्यान्वयन चेकलिस्ट
1. नीति को परिभाषित करें: जहां नीला-हरा, जहां कैनरी; जिसे "महत्वपूर्ण" माना जाता है।
2. भारित रूटिंग कॉन्फ़िगर करें (इंग्रेस/मेष/राउटर)।
3. एसएलओ थ्रेशोल्ड गेट और ऑटो रोलबैक पर कब्जा करें।
4. डेटाबेस के लिए expand→migrate→contract लागू करें; प्रवासन परीक्षण।
5. कैश/मॉडल और वार्म-पूल कनेक्शन का वार्म-अप सक्षम करें।
6. GitOps भरें और सभी रिलीज क्रियाओं को लॉग करें।
7. मेट्रिक्स (कैनरी बनाम स्थिर) की तुलना की कल्पना करें।
8. खेल दिवस बिताएँ: गेट रोलबैक/फेल/डेटाबेस समस्या का अनुकरण करें.
9. रनबुक और किल-स्विच का दस्तावेज़।
10. योजना बहुप्रचार बदले में जारी होती है, एक ही समय में नहीं।
14) एंटी-पैटर्न
फाटकों और टेलीमेट्री के बिना कैनरी रिलीज़ - गिरावट का देर से पता लगाना।
सम्मिश्रण डीबी स्कीमा: कोड अनविंड के लिए विघटनकारी प्रवासन।
अलगाव के बिना ब्लू और ग्रीन के लिए एक साझा कैश/कतार - आपसी प्रभाव।
DNS सत्यापन के बिना कम TTL के साथ स्विच करना - "फड़फड़ाना" यातायात।
दोनों संशोधनों के लिए रहस्य/कॉन्फ़िग सामान्य - जटिल रोलबैक।
छाया/धुएं के बिना भोजन के लिए यातायात एक बड़ा धमाका जोखिम है।
त्वरित बंद के लिए कोई किल-स्विच/फीचर-फ्लैग नहीं।
सारांश
ब्लू-ग्रीन त्वरित और आसान स्विचिंग, कैनरी - प्रबंधित जोखिम और प्रारंभिक समस्या का पता लगाने IGaming में, दोनों पैटर्न संयुक्त हैं: डाउनटाइम के बिना एक बुनियादी तंत्र के रूप में "तेज" परिवर्तन + नीले-हरे रंग पर कैनरी। SLO गेट्स, GitOps, वार्म-अप, डेटाबेस संगतता और निर्भरता अलगाव जोड़ें - और रिलीज पूर्वानुमान योग्य होगा, रोलबैक तेज हैं, और p99 और व्यापार मेट्रिक्स पीक अवधि के दौरान भी स्थिर हैं।