GH GambleHub

Blue-Green և Canary depla

Blue-Green և Canary deple

1) Խնդիրը և հիմնական գաղափարները

Blue-Green և Canary-ը ոչ ստանդարտ օրինագծերի ռազմավարություններ են, որոնք նվազեցնում են իրականացման ռիսկը

Blue-Green: Մենք պահում ենք երկու զուգահեռ տարբերակներ (Blue-ը ակտիվ է, Green-ը նոր է), մենք անցնում ենք ատոմային։ Արագ արձագանքը պլանավորվում է անմիջապես վերադարձնել Blue-ը։

Canary: Մենք միացնում ենք նոր տարբերակը ոչ պաշտոնական (1% 245% 2425% 2450% 24100%), մենք վերահսկում ենք SLO-metrics և կանգ առնում/նվազեցնում քայքայման ժամանակ։

Ընդհանուր սկզբունքը 'առանձնացնել «արտեֆակտը» «միացումից» և ավտոմատացնել դիտարկումը + արձագանքները։

2) Ե՞ րբ ընտրել

Blue-Green հարմար է, երբ

անհրաժեշտ է ակնթարթային անցում (կոշտ RTO), պարզ state-less ծառայություններ։

կան խիստ պատուհաններ։

շատ թանկ է պահել երկար երկակի հզորությունը, բայց կարճ ժամանակում հնարավոր է։

Canary հարմար է, երբ

Բարդ փոփոխություններ, իրական օպտիկայի վրա կանոնավոր վալիդացիա է պահանջվում։

կա տեսանելի հեռուստացույց (SLO, բիզնես մետրեր), մեքենայի ոտքի հնարավորություն։

քննադատաբար սահմանափակել պարտության շառավիղը (fintech/iGaming հոսքեր)։

Combo-pattern 'Green-ը և անցնել դրա վրա canary աստիճանով (Blue-Green որպես շրջանակ, Canary-ը որպես կոդավորման մեթոդ)։

3) Ուղղորդման ճարտարապետությունը

Կոդավորման/դաջվածքների տարբերակները

1. L4/L7 հավասարակշռող (ALB/NLB, Cloud Load Balancer) - կշռված target delups։

2. API-դարպասը/WAF-ը rome/weight տարբերակներով, վերնագրերով, cookie, տարածաշրջաններով։

3. Mesh (Istio/Linkerd/Consul) - տոկոսային բաշխում, fox-միգրացիա, timauts/retrav/սահմանափակումներ։

4. Ingress/NGINX/Envoy - upstream քաշը և ուղղորդումը։

5. Argo Rollouts/Flagger-ը կառավարիչ, ավտոմատ առաջընթացը, Prometheus/New Relic/Dradog-ի հետ ինտեգրումը։

4) Kubernetes: գործնական ձևանմուշներ

4. 1 Blue-Green (Euronector-ի միջոցով)

Два Deployment: `app-blue` и `app-green`.

Մեկ Windows 'ap-svc "- ը, որն անհրաժեշտ է" version "-ի համար։

yaml apiVersion: apps/v1 kind: Deployment metadata: { name: app-green, labels: { app: app, version: green } }
spec:
replicas: 4 selector: { matchLabels: { app: app, version: green } }
template:
metadata: { labels: { app: app, version: green } }
spec:
containers:
- name: app image: ghcr. io/org/app:1. 8. 0 apiVersion: v1 kind: Service metadata: { name: app-svc }
spec:
selector: {app: app, version: blue} # ← switch to green - change ports: [{port: 80, targetPort: 8080}]

Փոխումը սելեկտորի ատոմային փոփոխությունն է (կամ պիտակը), որը վերահսկվում է intain-ով։

4. 2 Canary (Istio VirtualService)

yaml apiVersion: networking. istio. io/v1beta1 kind: VirtualService metadata: { name: app }
spec:
hosts: ["app. example. com"]
http:
- route:
- destination: { host: app. blue. svc. cluster. local, subset: v1 }
weight: 90
- destination: { host: app. green. svc. cluster. local, subset: v2 }
weight: 10

Փոխեք «weight» քայլերը։ ավելացրեք retry, timeout, www.ier-detector Destinae Rule-ում։

4. 3 Argo Rollouts (Auto-canarech Pogon)

yaml apiVersion: argoproj. io/v1alpha1 kind: Rollout metadata: { name: app }
spec:
replicas: 6 strategy:
canary:
canaryService: app-canary stableService: app-stable steps:
- setWeight: 5
- pause: {duration: 300} # 5 min observation
- analysis:
templates:
- templateName: slo-guard
- setWeight: 25
- pause: { duration: 600 }
- analysis:
templates: [{ templateName: slo-guard }]
- setWeight: 50
- pause: {}
trafficRouting:
istio:
virtualService:
name: app routes: ["http-route"]

Ձևաչափի վերլուծությունը կապված է մետրիկների հետ (տե՛ ս ներքևում)։

5) SLO-gates և Auto-ravat

Պաշտպանված մետրերը (օրինակներ)

Տեխնիկական ՝ «p95 _ latency», «5xx _ rate», «error _ budget _ burn», «CPU/Memory throttling»։

Ապրանքային ՝ «CR (դեպոզիտ)», «հաջողությունը», «արագ ֆրոդ», «ARPPU» (սառը պատուհանների վրա)։

Ոտքի քաղաքականությունը (օրինակ)

Եթե «5xx _ rate» նոր տարբերակը> 0։ Հինգ տոկոսը 10 րոպե 'pause և rollback։

Եթե "p95 _ latency '24> 20 տոկոսը կղզիներից rollback է։

Եթե կանարեկների առաջխաղացումը գնում է, բայց SLO բյուջեն այրվում է> 2 %/ժամ - hold։

Argo AnalysTemplate (պարզեցված)

yaml apiVersion: argoproj. io/v1alpha1 kind: AnalysisTemplate metadata: { name: slo-guard }
spec:
metrics:
- name: http_5xx_rate interval: 1m successCondition: result < 0. 005 provider:
prometheus:
address: http://prometheus. monitoring:9090 query:
sum(rate(http_requests_total{app="app",status=~"5.."}[5m])) /
sum(rate(http_requests_total{app="app"}[5m]))

6) Տվյալները և համատեղելիությունը (ցավի ամենատարածված պատճառը)

Օգտագործեք expand www.migrate ww.ract ռազմավարությունը

Expand: ավելացնել նոր nullable սյունակներ/ինդեքսներ, աջակցել երկու սխեմաները։

Migrate: կրկնակի ձայնագրություն/կարդալ, back-fill։

Medract: հեռացնել հին դաշտերը/կոդը 100% ռուբլիից հետո։

Իրադարձական/հերթերը 'տարբերակել payload (v1/v2), աջակցեք idempotency-ին։

Քաշ/նստաշրջան 'տարբերակել բանալիները։ ապահովեք ձևաչափի համատեղելիությունը։

7) CI/CD և GitOps-ի ինտեգրումը

CI 'մեկ արտեֆակտի հավաքածու (build once), պատկերի ստորագրություն, SBSA, թեստեր։

CD 'արտեֆակտային արտեֆակտը շրջապատի միջոցով։ Blue-Green/Canary ղեկավարվում են մանիֆեստներով։

GitOps: multMR-ը (Argo CD/Flux) օգտագործում է քաշը/ընտրողը։

Environments/Approvals: prod տափաստանների համար 'ձեռքով gate + լուծումների աուդիտ։

8) NGINX/Envoy և ամպային LB: արագ օրինակներ

8. 1 NGINX (apstrims քաշը)

nginx upstream app_upstream {
server app-blue:8080 weight=90;
server app-green:8080 weight=10;
}
server {
location / { proxy_pass http://app_upstream; }
}

8. 2 AWS ALB (Weighted Target Groups)

TG-Blue: 90, TG-Green: 10 ռուբլիներ փոխեք քաշը IaC/CLI-ի միջոցով։

Միացրեք CloudWatch-ալերտները rollback-ի (քաշի փոփոխությունը 0/100)։

9) Անվտանգությունն ու համապատասխանությունը

Zero trust տարբերակների միջև 'սահմանեք գաղտնիքները/ռոլինգ-բանալիները։

Policy-as-Code-ը 'չգրված պատկերների արգելք, «www.latest»։

Գաղտնիքները և դելիգները որպես տարբերակների արտեֆակտներ։ արձագանքը ներառում է եզրերի արձագանքը։

Աուդիտ 'Ո՞ վ, երբ բարձրացրեցի քաշը/փոխեց ընտրողը, թե ինչ հյուսով։

10) Արժեքը և հզորությունը

Blue-Green-ը պահանջում է կրկնակի հզորություն վճարման ժամանակահատվածի համար և պլանավորեք պատուհանը։

Canary-ը կարող է ձգվել ավելի երկար, քան հեռուստացույցի/դիտարկման արժեքը, երկու տարբերակների զուգահեռ պարունակությունը։

Օպտիմիզացիան 'autoscaling HPA/SNA, Blue-Green կարճ պատուհանները, գիշերային ֆորումները «ծանր» ծառայությունների համար։

11) Runbook (runbook)

1. Սառեցնել առաջխաղացումը (pause)։

2. Նվազեցնել Green քաշը մինչև 0% (canary )/վերադարձնել Blue (blue-green)։

3. Ստուգել 'սխալները/լատենտները վերադարձան հիմնականը, կապերը։

4. Բացեք դեպքը, հավաքեք արտեֆակտներ (լոգներ, ուղիներ, մետրիկի համեմատություն)։

5. Fix/reprod stage-ում, smoke-ը, վերաարտադրել առաջընթացը։

12) Anti-patterna

Արտեֆակտի փոխպատվաստումը stage-ի միջև (խախտումը «build once»)։

«Խուլ» canary առանց SLO/metric - ֆորմալություն, ոչ թե պաշտպանություն։

Ֆիչի դրոշների բացակայությունը 'ռելիզը ստիպված է անմիջապես ներառել վարքագիծը 100 տոկոսով։

Չաշխատող health-winks/liveness-ը բացատրում է «կպչուն» և կեղծ։

BD-ի համատեղելիությունը «ավշի վրա», պայմանագիրը կոտրվում է, երբ այն անցնում է։

Պատկերների մուտաբելային թեգերը/« latest »վաճառքում։

13) Ներդրման թուղթ (0-45 օր)

0-10 օր

Ընտրել ծառայությունների ռազմավարություն 'B/G, Canary կամ համակցված։

Միացրեք պատկերների ստորագրումը, health-winks, readiness-փորձարկումներ, «wwww.latest»։

Պատրաստել dashbords SLO (latency/error rate/բիզնես մետր)։

11-25 օր

Քաշը ավտոմատացնել (Istio/Argo Rollouts/ALB-weights)։

Տեղադրել anronsis templates, alerts և auto-rollback։

Մանիֆեստները (Helm/Kustomize), ինտեգրել GitOps-ի հետ։

26-45 օր

Ներդրել expand-migrate-medract ռազմավարությունը BD-ի համար։

Ծածկել կրիտիկական ֆլոուն kill-switch դրոշներով։

«Game day» 'սիմուլյացիայի և պատահականության մասին։

14) Հասունության մետրերը

Blue-Green/Canary (նպատակը> 90%)։

Միջին ժամանակը 108/արձագանքն է (նպատակը <3 րոպե)։

Ածխաջրածինների մասնաբաժինը SLO-ով (և առանց հետքի)։

Հեռուստատեսության ծառայությունների ծածկումը (traces/logs/metr.ru)> 95 տոկոսն է։

BD խմբակցությունների մասնաբաժինը expand-migrate-intract> 90 տոկոսն է։

15) Ծրագրեր ՝ քաղաքական ձևանմուշներ և պլայններ

OPA (չգրված պատկերների արգելք)

rego package admission. image

deny[msg] {
input. request. kind. kind == "Deployment"
some c img:= input. request. object. spec. template. spec. containers[c].image not startswith(img, "ghcr. io/org/")
msg:= sprintf("Image not from trusted registry: %v", [img])
}

Helm-values canary համար (պարզեցված)

yaml canary:
enabled: true steps:
- weight: 5 pause: 300
- weight: 25 pause: 600
- weight: 50 pause: 900 sloGuards:
max5xxPct: 0. 5 maxP95IncreasePct: 20

GitHub Actions - քաշի խթանիչ (կեղծ)

yaml
- name: Promote canary to 25%
run: kubectl patch virtualservice app \
--type=json \
-p='[{"op":"replace","path":"/spec/http/0/route/1/weight","value":25}]'

16) Եզրակացություն

Blue-Green-ը և Canary-ը փոխկապակցող չեն, այլ կոմպլեմենտային ռազմավարություններ։ Կառուցեք դրանք ստորագրված արտեֆակտների վերևում, SLO-ի դիտարկումը, ավտոմատ խաղերը և GitOps-ը։ Տարանջատեք առաքումը, պահեք արագ և կարգապահություն, և օրինագծերը կդառնան կանխատեսելի, անվտանգ և արագ։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։