GH GambleHub

Blue-Green va Canary deploy

Blue-Green va Canary deploy

1) Vazifa va asosiy g’oyalar

Blue-Green va Canary - joriy etish xavfini kamaytiradigan to’xtovsiz relizlar strategiyalari:
  • Blue-Green: Biz ikkita parallel versiyani (Blue - faol, Green - yangi) ushlab turamiz, trafikni atom bilan almashtiramiz. Tez orqaga qaytish → Darhol Blue ga qaytish.
  • Canary: Biz yangi versiyani bosqichma-bosqich yoqamiz (1% → 5% → 25% → 50% → 100%), SLO metrikasini kuzatamiz va tanazzulga uchraganda to’xtatamiz/qaytaramiz.

Umumiy printsip: «artefaktni yetkazib berish» ni «trafikni yoqishdan» ajratish va kuzatish + orqaga qaytishni avtomatlashtirish.

2) Qachon nimani tanlash

Blue-Green quyidagi hollarda mos keladi:
  • zudlik bilan o’zgartirish (qattiq RTO), oddiy state-less xizmatlari;
  • qattiq reliz/muzlatish oynalari va tushunarli smoke tekshiruvlari mavjud;
  • ikki baravar uzoq sig’imni ushlab turish qimmatga tushadi - lekin qisqa vaqt ichida.
Canary quyidagi vaqtda mos keladi:
  • murakkab o’zgarishlar, real trafikda bosqichma-bosqich validatsiya qilish talab etiladi;
  • etuk telemetriya (SLO, biznes metrika), avto-to’xtash imkoniyati mavjud;
  • shikastlanish radiusini keskin cheklash (fintech/iGaming-oqimlar).

Kombo-pattern: Green’ni haydash va unga canary-bosqichlar orqali o’tish (Blue-Green ramka sifatida, Canary trafikni o’tkazish usuli sifatida).

3) Trafikni yo’naltirish arxitekturasi

Trafikni almashtirish/toʻldirish variantlari:

1. L4/L7-balanslovchi (ALB/NLB, Cloud Load Balancer) - target groups.

2. API-shlyuz/WAF - route/weight versiyalari, sarlavhalari, kukilari, mintaqalari bo’yicha.

3. Service Mesh (Istio/Linkerd/Consul) - foiz taqsimoti, fault-inyeksiya, taymaut/retraj/cheklovlar ruchkalari.

4. Ingress/NGINX/Envoy - upstream-og’irlik va atributlar bo’yicha marshrutlash.

5. Argo Rollouts/Flagger - boshqaruvchi operator, avtomatik progress, Prometheus/New Relic/Datadog bilan integratsiya.

4) Kubernetes: amaliy shablonlar

4. 1 Blue-Green (Service selector orqali)

Два Deployment: `app-blue` и `app-green`.
Kerakli’version’uchun bitta Service’app-svc’selektori.

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

Almashtirish - nazorat qilinadigan drain bilan selektorni (yoki belgilarni) atom almashtirish.

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’ ni zinapoyalar bo’yicha o’zgartiring; DestinationRule’ga retry, timeout, outlier-detector qoʻshing.

4. 3 Argo Rollouts (avto-kanareykali yugurish)

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

Tahlil namunasi metriklar bilan bog’liq (quyida qarang).

5) SLO-geytlar va avtotransport

Muhofaza etiladigan metriklar (misollar):
  • Texnik:’p95 _ latency’,’5xx _ rate’,’error _ budget _ burn’,’CPU/Memory throttling’.
  • Mahsulotlar:’CR (depozit)’,’to’lovlarning muvaffaqiyati’,’skoring-froda’,’ARPPU’(sovuq derazalarda).
Oyoq siyosati (misol):
  • Agar’5xx _ rate’yangi versiyasi boʻlsa> 0. 5% 10 daqiqa davomida - pause va rollback.
  • Agar’p95 _ latency’↑> bazadan 20% - rollback.
  • Agar kanareykalar targ’ib qilinsa, lekin byudjetning SLOsi yoqib yuborilsa> 2 %/soat - xold.
Argo AnalysisTemplate (soddalashtirilgan):
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) Ma’lumotlar va muvofiqlik (og’riqning eng ko’p uchraydigan sababi)

expand → migrate → contract strategiyasidan foydalaning:
  • Expand: yangi nullable/indeks qoʻshish, ikkala sxemani ham qoʻllab-quvvatlash.
  • Migrate: ikki marta yozish/oʻqish, orqa fill.
  • Contract: 100% trafik chiqqandan keyin eski maydonlarni/kodni olib tashlash.
  • Hodisa/navbatlar: payload (v1/v2) versiyasini, idempotency’ni qoʻllab-quvvatlang.
  • Kesh/seanslar: kalitlarni versiya qiling; formatning mos kelishini ta’minlang.

7) CI/CD va GitOps bilan integratsiya

CI: yagona artefaktni yigʻish (build once), tasvir imzosi, SBOM, testlar.
CD: atrof-muhit orqali artefaktni targ’ib qilish; Blue-Green/Canary manifestlar bilan boshqariladi.
GitOps: merj MR → kontroller (Argo CD/Flux) ogʻirlik/selektorni qoʻllaydi.
Environments/Approvals: prod-steplar uchun - qo’lda gate + yechimlar auditi.

8) NGINX/Envoy va bulutli LB: tezkor misollar

8. 1 NGINX (apstrimlarning og’irligi)

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 orqali og’irlikni o’zgartiring.
CloudWatch-ni rollback avto-skriptlariga bogʻlang (ogʻirlikni 0/100 ga oʻzgartirish).

9) Xavfsizlik va muvofiqlik

Zero trust versiyalari orasida: shifrlash sirlarini/rolling kalitlarini ajrating.
Policy-as-Code: Imzo qoʻyilmagan tasvirlarni taqiqlash,’no latest’.
Sirlar va konfigurlar versiyalar artefaktlari sifatida; orqaga qaytish konfiguratsiyalarning orqaga qaytishini o’z ichiga oladi.
Audit: kim, qachon og’irlikni ko’tardi/selektorni qanday tiket bilan o’zgartirdi.

10) Qiymati va sig’imi

Blue-Green ikki marta quvvat talab qiladi → oynani rejalashtiring.
Canary ikki versiyaning parallel mazmuni bo’lgan telemetriya/kuzatuv qiymatidan uzoqroq davom etishi mumkin.
Optimallashtirish: HPA/VPA autoscaling, Blue-Green qisqa oynalar, «og’ir» xizmatlar uchun tungi relizlar.

11) Orqaga qaytish (runbook)

1. Oldinga siljishni toʻxtatish (pause).
2. Green ogʻirligini 0% gacha pasaytirish (canary )/selektorni Blue (blue-green) ga qaytarish.
3. Tekshirish: xatolar/yashirlik bazaga qaytdi, ulanishlarni drenaj qilish.
4. Hodisani ochish, artefaktlarni (loglar, trassalar, metriklarni taqqoslash) to’plash.
5. Fix/reprod stage, smoke haydash, progressiyani qayta boshlash.

12) Anti-patternlar

Stage va prod o’rtasida artefaktni qayta yig’ish («build once» buzilishi).
SLO/metriksiz «kar» kanari - himoya emas, rasmiyatchilik.
Fich bayroqlarining yo’qligi: reliz darhol 100% xatti-harakatlarni o’z ichiga oladi.
Ishlamaydigan health-checks/liveness → «yopishib qolgan» podalar va yolg’on barqarorlik.
BD «tasodifan» mosligi: kontrakt almashtirilganda buziladi.
Namunadagi mutabel tasvirlar teglari/’ latest’.

13) Joriy etish chek-varaqasi (0-45 kun)

0-10 kun

B/G, Canary yoki kombinatsiyalangan xizmatlar uchun strategiyani tanlang.
Rasmlar, health-checks, readiness-testlar,’no latest’imzolashni yoqish.
SLO (latency/error rate/biznes metrika) dashbordlarini tayyorlash.

11-25 kun

Ogʻirlikni avtomatlashtirish (Istio/Argo Rollouts/ALB-weights).
Analysis templates, alertlar va avto-rollbackni moslash.
Manifestlarni shablon qilish (Helm/Kustomize), GitOps bilan integratsiya qilish.

26-45 kun

DB uchun expand-migrate-contract strategiyasini joriy etish.
Tanqidiy flou kill-switch bayroqlari bilan qoplash.
«game day» ni oʻtkazish: orqaga qaytish va hodisani simulyatsiya qilish.

14) Etuklik metrikasi

Blue-Green/Canary orqali% relizlar (maqsad> 90%).
O’rtacha o’zgartirish/qaytish vaqti (maqsad <3 min).
SLO bo’yicha avtostopli relizlar ulushi (va hodisalarsiz).
Servislarni telemetriya bilan qoplash (traces/logs/metrics)> 95%.
expand-migrate-contract sxemasi bo’yicha DB migratsiyalarining ulushi> 90%.

15) Ilovalar: siyosat va payplaynlar shablonlari

OPA (imzolanmagan tasvirlarni taqiqlash)

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 for canary (soddalashtirilgan)

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 - ogʻirlik tarkibi (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) Xulosa

Blue-Green va Canary - o’zaro istisno emas, balki qo’shimcha strategiyalar. Ularni imzolangan artefaktlar, SLO, avtomatik geytlar va GitOps boshqaruvi orqali quring. Etkazib berishni kiritishdan ajrating, migratsiya intizomini va tezlikni saqlang - va relizlar oldindan aytib bo’ladigan, xavfsiz va tezkor bo’ladi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.