GH GambleHub

Blue-Green və Canary Deploy

Blue-Green və Canary deploy

1) Vəzifə və əsas fikirlər

Blue-Green və Canary - tətbiq riskini azaldan davamlı buraxılış strategiyaları:
  • Blue-Green: Biz iki paralel versiyası saxlayın (Blue - aktiv, Green - yeni), atomik trafik keçid. Sürətli geri → dərhal Blue geri.
  • Canary: mərhələli olaraq yeni versiyanı (1% → 5% → 25% → 50% → 100%) işə salın, SLO metrikasını izləyin və deqradasiya zamanı dayandırın/geri çəkin.

Ümumi prinsip: "artefaktın çatdırılması 'nı" trafikin daxil edilməsindən "ayırmaq və müşahidə + geri çəkilmələri avtomatlaşdırmaq.

2) Nə zaman seçmək lazımdır

Blue-Green uyğun zaman:
  • ani keçid lazımdır (sərt RTO), sadə state-less xidmətləri;
  • ciddi buraxılış/dondurma pəncərələri və başa düşülən smoke yoxlamalar var;
  • uzunmüddətli ikiqat tutmaq bahadır - lakin qısa müddətdə mümkündür.
Canary uyğun zaman:
  • mürəkkəb dəyişikliklər, real trafikdə mərhələli validasiya tələb olunur;
  • yetkin telemetri (SLO, biznes metrik), avtomatik stop imkanı var;
  • qırılma radiusunu məhdudlaşdırmaq (fintech/iGaming axınları).

Combo-desen: Green-in yuvarlanması və canary-pillələri vasitəsilə keçid (Blue-Green bir çərçivə kimi, Canary bir trafik transfer üsulu kimi).

3) Trafik marşrutlaşdırma arxitekturası

Keçid/trafik doldurma variantları:

1. L4/L7 Balanslayıcı (ALB/NLB, Cloud Load Balancer) - target qrupları.

2. API-şlyuz/WAF - versiyalar, başlıqlar, cookie, regionlar üzrə route/weight.

3. Service Mesh (Istio/Linkerd/Consul) - faiz paylanması, fault-inyeksiya, taymaut/retraj/məhdudiyyətlər.

4. Ingress/NGINX/Envoy - upstream-çəkilər və atributlara görə marşrutlaşdırma.

5. Argo Rollouts/Flagger - nəzarət operatoru, avtomatik irəliləyiş, Prometheus/New Relic/Datadog ilə inteqrasiya.

4) Kubernetes: praktik şablonlar

4. 1 Blue-Green (Service selector vasitəsilə)

Два Deployment: `app-blue` и `app-green`.
Bir Service 'app-svc' istədiyiniz 'version' selektoru ilə.

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

Keçid - nəzarət drain ilə selektor (və ya etiket) atom dəyişikliyi.

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

pillələrdə 'weight' dəyişdirin; DestinationRule-də retry, timeout, outlier-detector əlavə edin.

4. 3 Argo Rollouts (avto-kanarya qaçışı)

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

Analitik şablon metrlərlə bağlıdır (aşağıya bax).

5) SLO-geytlar və avtomatik geri dönüş

Qorunan metriklər (nümunələr):
  • Texniki: 'p95 _ latency', '5xx _ rate', 'error _ budget _ burn', 'CPU/Memory throttling'.
  • Məhsullar: 'CR (depozit)', 'ödənişlərin müvəffəqiyyəti', 'skorinq-froda', 'ARPPU' (soyuq pəncərələrdə).
Ayaq siyasəti (nümunə):
  • Əgər '5xx _ rate' yeni versiyası> 0. 10 dəqiqə ərzində 5% - pause və rollback.
  • Əgər 'p95 _ latency' ↑> 20% -dən baza - rollback.
  • Əgər promosyon kanarya gedir, lakin SLO büdcə yandırılır> 2 %/saat - hold.
Argo AnalysisTemplate (sadələşdirilmiş):
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) Məlumat və uyğunluq (ən çox ağrının səbəbi)

expand → migrate → contract strategiyasını istifadə edin:
  • Expand: Yeni nullable-hoparlörlər/indekslər əlavə edin, hər iki sxemi dəstəkləyin.
  • Migrate: ikiqat qeyd/oxu, geri doldurma.
  • Contract: 100% trafik çıxdıqdan sonra köhnə sahələri/kodu silmək.
  • Hadisə/növbələr: payload (v1/v2) versiyasını verin, idempotency dəstəkləyin.
  • Cache/seanslar: açarları versiyası; formatın uyğunluğunu təmin edin.

7) CI/CD və GitOps ilə inteqrasiya

CI: Vahid artefaktın (build once) yığılması, şəkil imzası, SBOM, testlər.
CD: ətraf mühit vasitəsilə artefaktın təşviqi; Blue-Green/Canary manifestlər tərəfindən idarə olunur.
GitOps: MR → kontroller (Argo CD/Flux )/selektor çəkiləri tətbiq edir.
Environments/Approvals: Prod-steps üçün - əl qapısı + audit həlləri.

8) NGINX/Envoy və bulud LB: sürətli nümunələr

8. 1 NGINX (axınların çəkisi)

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 vasitəsilə çəki dəyişdirin.
CloudWatch alertlərini rollback avto-skriptlərinə bağlayın (çəkini 0/100-ə dəyişdirin).

9) Təhlükəsizlik və uyğunluq

Versiyalar arasında sıfır güvən: sirləri/rolling şifrələmə açarlarını ayırın.
Policy-as-Code: imzasız şəkillərin deploi qadağası, 'no latest'.
Sirləri və konfiqləri kimi artefaktlar versiyası; geri dönüş konfiqurasiya geri dönüş daxildir.
Audit: kim, nə vaxt çəkini qaldırdı/seçicini dəyişdi, hansı biletlə.

10) Dəyəri və tutumu

Blue-Green çıxış dövrü üçün ikiqat güc tələb edir → pəncərəni planlaşdırın.
Canary daha uzun çəkə bilər → telemetriya/müşahidə dəyəri, iki versiyanın paralel məzmunu.
Optimizasiya: HPA/VPA autoscaling, Blue-Green qısa pəncərələr, «ağır» xidmətlər üçün gecə buraxılışları.

11) Geri qaytarma (runbook)

1. Promosyonu dondur (pause).
2. Green ağırlığını 0% (canary) qədər azaltın/seçicini Blue-green-ə qaytarın.
3. Check: səhvlər/gecikmə əsas geri, drenaj bağlantıları.
4. Hadisəni açın, artefaktları toplayın (loqlar, treklər, metriklərin müqayisəsi).
5. stage fix/reprode, smoke qovmaq, tərəqqini yenidən başlamaq.

12) Anti-nümunələr

stage və prod arasında artefaktın yenidən toplanması («build once» pozuntusu).
SLO/metrik olmadan «kar» canary - müdafiə deyil, formalizm.
Fic bayraqlarının olmaması: buraxılış dərhal 100% davranışı əhatə etmək məcburiyyətindədir.
Health-checks/liveness → «yapışmış» pod və saxta sabitlik.
DB «təsadüfi» uyğunluğu: keçid zamanı müqavilə pozulur.
Prodda/' latest 'şəkillərinin mutabel etiketləri.

13) Giriş çek siyahısı (0-45 gün)

0-10 gün

B/G, Canary və ya birləşdirilmiş xidmətlər üçün strategiya seçin.
Image imza daxil edin, health-checks, readiness-testlər, 'no latest'.
SLO (latency/error rate/business metrics) dashboard hazırlamaq.

11-25 gün

Ağırlıqları avtomatlaşdırın (Istio/Argo Rollouts/ALB-weights).
analysis templates, alert və auto-rollback konfiqurasiya.
Manifestləri şablonlaşdırın (Helm/Kustomize), GitOps ilə inteqrasiya edin.

26-45 gün

DB üçün expand-migrate-contract strategiyasını tətbiq edin.
Kritik flow kill-switch bayraqları örtmək.
«game day» keçirmək: geri və hadisə simulyasiya.

14) Yetkinlik metrikası

Blue-Green/Canary vasitəsilə buraxılışların% -i (hədəf> 90%).
Orta keçid/geri dönüş vaxtı (hədəf <3 dəq).
SLO avto-stop buraxılışlarının payı (və insidentsiz).
Telemetriya xidmətləri (traces/logs/metrics)> 95%.
expand-migrate-contract sxemi üzrə DB miqrasiyasının payı> 90%.

15) Proqramlar: siyasət və paylayn şablonları

OPA (imzasız şəkillərin qadağan edilməsi)

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 üçün Helm-values (sadələşdirilmiş)

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 - çəki promosyonu (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) Nəticə

Blue-Green və Canary - qarşılıqlı istisna deyil, tamamlayıcı strategiyalardır. Onları imzalanmış artefaktların, SLO-ların, avtomatik geytlərin və GitOps-idarəetmənin üzərində qurun. Çatdırılmanı daxil olmaqdan ayırın, sürətli geri dönüş və miqrasiya nizam-intizamı saxlayın - və buraxılışlar proqnozlaşdırıla bilən, təhlükəsiz və sürətli olacaq.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.