GH GambleHub

Blue-Green we Canary deploy

Blue-Green we Canary deploy

1) Wezipe we esasy pikirler

"Blue-Green" we "Canary" - durmuşa geçirmek howpuny azaldýan yzygiderli goýberiş strategiýalary:
  • Blue-Green: iki sany paralel wersiýany saklaýarys (Blue - işjeň, Green - täze), traffigi atomiki geçirýäris. Çalt yza gaýdyp → Derrew Blue-a gaýdyp geliň.
  • Canary: täze wersiýany tapgyrlaýyn açýarys (1% → 5% → 25% → 50% → 100%), SLO metrikasyna gözegçilik edýäris we zaýalananda durýarys/yzyna gaýdýarys.

Umumy ýörelge: "artefaktyň eltilmegini" "traffigiň goşulmagyndan" aýyrmak we synlanmagy + yza gaýdyp gelmegi awtomatlaşdyrmak.

2) Haçan näme saýlamaly

Blue-Green:
  • derrew geçmeli (gaty RTO), ýönekeý state-less hyzmatlary;
  • berk goýberiş/aýaz penjireleri we düşnükli smoke barlaglary bar;
  • uzak möhletli goşa kuwwaty saklamak gymmat - ýöne gysga wagtda mümkin.
Canary:
  • çylşyrymly üýtgeşmeler, hakyky traffikde tapgyrlaýyn tassyklama talap edilýär;
  • kämillik ýaşyna ýeten telemetri (SLO, iş metrikleri), awto-durmak mümkinçiligi bar;
  • (fintech/iGaming-akymlary).

"Combo-pattern": "Green" -i çykaryň we "canary-step" ("Blue-Green") arkaly geçiň.

3) Traffigi ugrukdyrmagyň arhitekturasy

Traffigi üýtgetmek/doldurmak üçin wariantlar:

1. L4/L7-balanslaýjy (ALB/NLB, Cloud Load Balancer) - deňagramly maksatly toplar.

2. API-şlýuz/WAF - wersiýalara, sözbaşylara, kukilere, sebitlere görä route/weight.

3. Service Mesh (Istio/Linkerd/Consul) - göterim paýlanyşy, fault-sanjym, wagt/retraut/çäklendirmeler.

4. Ingress/NGINX/Envoy - upstream-agram we atributlar boýunça marşrut.

5. Argo Rollouts/Flagger - dolandyryjy operator, awtomatiki ösüş, Prometheus/New Relic/Datadog bilen integrasiýa.

4) Kubernetes: amaly şablonlar

4. 1 Blue-Green (Service selector arkaly)

Два Deployment: `app-blue` и `app-green`.
Bir Service 'app-svc' selektor bilen islenýän '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}]

Geçiş - dolandyrylýan drain bilen selektoryň (ýa-da bellikleriň) atom çalşygy.

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

Basgançaklara 'weight' çalyşyň; DestinationRule-a retry, timeout, outlier-detector goşuň.

4. 3 Argo Rollouts

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"]

Derňew şablony metrikler bilen baglanyşyklydyr (aşakda serediň).

5) SLO-geýtlar we awto-yza gaýdyp gelmek

Goralýan metrikler (mysallar):
  • Tehniki: 'p95 _ latency', '5xx _ rate', 'error _ budget _ burn', 'CPU/Memory throttling'.
  • Önümler: 'CR (goýum)', 'tölegleriň üstünligi', 'skoring-froda', 'ARPPU' (sowuk penjirelerde).
Aýak syýasaty (mysal):
  • Eger '5xx _ rate' täze wersiýasy> 0. 10 minudyň dowamynda 5% - pause we rollback.
  • Eger 'p95 _ latency' ↑> 20% -den esasy - rollback.
  • Kanareýalar mahabatlandyrylsa, ýöne býudjetiň SLO ýakylsa> 2 %/sagat - hold.
Argo AnalysisTemplate (ýönekeý):
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) Maglumatlar we laýyklyk (agyrynyň iň köp duş gelýän sebäbi)

expand → migrate → contract strategiýasyny ulanyň:
  • Expand: täze nullable sütünleri/indeksleri goşmak, iki shemany goldamak.
  • Migrate: goşa ýazmak/okamak, yzyna doldurmak.
  • Contract: 100% traffik çykandan soň köne meýdanlary/kody aýyryň.
  • Wakalar/nobatlar: payload (v1/v2) wersiýasyny, idempotency goldaň.
  • Kesiş/sessiýa: açarlary wersiýa ediň; formatyň gabat gelmegini üpjün ediň.

7) CI/CD we GitOps bilen integrasiýa

CI: ýekeje artefaktyň ýygyndysy (build once), şekiliň goly, SBOM, synaglar.
CD: daşky gurşaw arkaly artefaktyň mahabaty; Blue-Green/Canary manifestler bilen dolandyrylýar.
GitOps: MR → kontroller (Argo CD/Flux )/selektor agramyny ulanýar.
Environments/Approvals: sähralar üçin - gollanma gate + çözgütleriň barlagy.

8) NGINX/Envoy we bulut LB: çalt mysallar

8. 1 NGINX (apstrimleriň agramy)

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 arkaly agramyňyzy üýtgediň.
CloudWatch-alertleri rollback awto-skriptlerine baglaň (agramy 0/100 üýtgetmek).

9) Howpsuzlyk we laýyklyk

Wersiýalaryň arasynda Zero trust: şifrlemek syrlaryny/rolling açarlaryny kesgitläň.
Policy-as-Code: gol çekmedik şekilleri bölmek gadagandyr, 'no latest'.
Syr we konfigikler wersiýalaryň artefaktlary hökmünde; yzyna gaýtarmak konfigurasiýalaryň yzyna gaýtarylmagyny öz içine alýar.
Audit: kim, haçan agramyny ýokarlandyrdy/saýlaýjyny çalşdy, haýsy bilet bilen.

10) Bahasy we kuwwaty

Blue-Green çykmak üçin iki esse güýç talap edýär → penjiräni meýilleşdiriň.
Canary has uzaga çekip biler → telemetriýanyň/synyň bahasy, iki wersiýanyň paralel mazmuny.
Optimizasiýa: HPA/VPA boýunça autoscaling, Blue-Green gysga penjireleri, "agyr" hyzmatlar üçin gijeki goýberişler.

11) Yza gaýdyp gelmek (runbook)

1. Öňe gitmegi doňdur.
2. "Green" -iň agramyny 0% -e (canary) çenli azalt/saýlaýjyny "Blue" -e (gök-ýaşyl) gaýtaryň.
3. Barlamak: ýalňyşlyklar/gizlinlik esasy hatalara gaýdyp geldi, baglanyşyklary drene.
4. Wakany açyň, artefaktlary ýygnaň (loglar, ýollar, metrikleri deňeşdirmek).
5. Fix/reprod stage, smoke sürmek, progressiýany täzeden başlamak.

12) Anti-patternler

Artefaktyň stage bilen prod arasynda gaýtadan ýygnalmagy ("build once" bozulmasy).
SLO/metriksiz "kar" kanary - gorag däl-de, resmi.
Fiç baýdaklarynyň ýoklugy: goýberilmegi özüni alyp barşyny birbada 100% goşmaga mejbur bolýar.
Işlemeýän health-checks/liveness → "ýapyşan" podlar we ýalan durnuklylyk.
DB-nyň "mümkin boldugyça" gabat gelýändigi: geçilende şertnama bozulýar.
Prodda/' latest 'şekilleriniň ýalňyş bellikleri.

13) Giriş çek-sanawy (0-45 gün)

0-10 gün

B/G, Canary ýa-da birleşdirilen hyzmatlar üçin strategiýany saýla.
Şekillere gol çekmegi, health-checks, readiness-synaglary, 'no latest'.
SLO (latency/error rate/business-metrics) dashbordlaryny taýýarlamak.

11-25 gün

Agramy awtomatlaşdyrmak (Istio/Argo Rollouts/ALB-weights).
Analysis templates, alertler we awto-rollback.
Manifestleri şablonlaşdyrmak (Helm/Kustomize), GitOps bilen integrasiýa.

26-45 gün

DB üçin expand-migrate-contract strategiýasyny girizmek.
Kritiki kill-switch flowlaryny baýdaklar bilen örtüň.
"Game day" geçiriň: yza gaýdyp we wakany simulýasiýa ediň.

14) Kämillik ölçegleri

"Blue-Green/Canary" arkaly goýberilenleriň% -i (maksat> 90%).
Geçiş/yza gaýdyp gelmegiň ortaça wagty (maksat <3 min).
SLO boýunça awto-stop bilen goýberilişleriň paýy (we hadysasyz).
Hyzmatlary telemetriýa (traces/logs/metrics) bilen ýapmak> 95%.
expand-migrate-contract shemasy boýunça DB migrasiýa paýy> 90%.

15) Goşundylar: syýasatlaryň we paýlaýjylaryň şablonlary

OPA (gol çekilmedik şekillere gadaganlyk)

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])
}

canary üçin Helm-values (ýönekeý)

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 - agram mahabaty (psevdo)

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) Netijenama

"Blue-Green" we "Canary" biri-birinden aýrylmaýan strategiýalardyr. Olary gol çekilen artefaktlaryň, SLO, awtomatiki geýtleriň we GitOps-dolandyryşyň üstünde guruň. Eltip bermegi goşmakdan aýyryň, çalt yza çekilmegini we migrasiýa düzgünini saklaň - we goýberilişler öňünden aýdyp boljak, howpsuz we çalt bolar.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.