GH GambleHub

Mavi-Yeşil ve Kanarya dağılımı

Mavi-Yeşil ve Kanarya dağıtımı

1) Meydan okuma ve anahtar fikirler

Blue-Green ve Canary, evlat edinme riskini azaltan kesintisiz sürüm stratejileridir:
  • Mavi-Yeşil: iki paralel sürümü (Mavi - aktif, Yeşil - yeni) tutun, trafiği atomik olarak değiştirin. Hızlı bir geri dönüş - anında Mavi'yi döndürür.
  • Kanarya: yeni sürümü aşamalar halinde açın (%1 - %5 - %25 - %50 - %100), SLO metriklerini izleyin ve bozulma sırasında durun/geri dönün.

Genel ilke, "eser teslimini" "trafik dahil etme'den ayırmak ve gözlemlenebilirliği + geri dönüşleri otomatikleştirmektir.

2) Ne zaman seçilir

Mavi-Yeşil şu durumlarda uygundur:
  • Anında anahtarlama (sabit RTO), basit devletsiz hizmetler;
  • Sıkı serbest bırakma/dondurma pencereleri ve açık duman kontrolleri vardır;
  • Uzun bir çift kapasite tutmak pahalıdır - ancak kısa bir süre için mümkündür.
Kanarya şu durumlarda uygundur:
  • Karmaşık değişiklikler, gerçek trafikte adım adım doğrulama gereklidir;
  • Olgun telemetri (SLO, iş metrikleri), otomatik durdurma yeteneği vardır;
  • Hasar yarıçapını kritik olarak sınırlar (fintech/iGaming akışları).

Combo deseni: Yeşil'i açın ve kanarya aşamalarından (çerçeve olarak Mavi-Yeşil, trafik taşıma yöntemi olarak Kanarya) geçin.

3) Trafik yönlendirme mimarisi

Trafik değiştirme/ekleme seçenekleri:

1. L4/L7 dengeleyici (ALB/NLB, Cloud Load Balancer) - ağırlıklı hedef gruplar.

2. API ağ geçidi/WAF - sürümlere, başlıklara, çerezlere, bölgelere göre rota/ağırlık.

3. Servis Mesh (Istio/Linkerd/Consul) - yüzde dağıtım, hata enjeksiyon, zaman aşımı/retray/kısıtlama kolları.

4. Giriş/NGINX/Elçi - yukarı akış ağırlıkları ve öznitelik yönlendirmesi.

5. Argo Rollouts/Flagger - operatör-denetleyici, otomatik ilerleme, Prometheus/New Relic/Datadog ile entegrasyon.

4) Kubernetes: pratik şablonlar

4. 1 Mavi-Yeşil (Servis seçici aracılığıyla)

Два Dağıtım: 'Uygulama mavisi' и 'uygulama yeşili'.
İstenilen 'sürüm' için bir seçici ile bir Hizmet 'app-svc'.

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

Anahtarlama - kontrollü drenaj ile seçici (veya etiketlerin) atomik değişimi.

4. 2 Kanarya (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

'Ağırlığı' adım adım değiştirin; DestinationRule'a yeniden deneme, zaman aşımı, aykırı değer dedektörü ekleyin.

4. 3 Argo Rollouts (Otomatik Kanarya Run)

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

Şablon analizi metriklerle ilişkilidir (aşağıya bakınız).

5) SLO kapıları ve otomatik geri alma

Korumalı metrikler (örnekler):
  • Teknik: 'P95 _ latency', '5xx _ rate', 'error _ budget _ burn', 'CPU/Memory throttling'.
  • Bakkal: 'CR (depozito)', 'ödemelerin başarısı', 'puanlama sahtekarlığı', 'ARPPU' (soğuk pencerelerde).
Politikayı durdur (örnek):
  • Yeni sürümün '5xx _ rate' değeri> 0 ise. 10 dakika için %5 - duraklatma ve geri alma.
  • 'P95 _ latency' tabanının %20'sini ↑> - geri alma.
  • Kanarya promosyonu giderse ancak bütçe SLO yakılırsa> %2/saat - bekleyin.
Argo AnalysisTemplate (basitleştirilmiş):
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) Veri ve uyumluluk (ağrının en yaygın nedeni)

Genişlet, göç et, sözleşme stratejisini kullan:
  • Genişlet: yeni geçersiz sütunlar/dizinler ekleyin, her iki şemayı da destekleyin.
  • Geçiş: Çift Yazma/Okuma, Geri Doldurma.
  • Sözleşme: Trafiğin %100'ünden çıktıktan sonra eski alanları/kodu silin.
  • Olay/kuyruklar: sürüm yükü (v1/v2), idempotency desteği.
  • Önbellek/oturumlar: sürüm anahtarları; Biçim uyumluluğundan emin olun.

7) CI/CD ve GitOps ile entegrasyon

CI: bir kez inşa et, görüntü imzası, SBOM, testler.
CD: ortamlar aracılığıyla eser tanıtımı; Mavi-Yeşil/Kanarya manifestolar tarafından yönetilir.
GitOps: MR ™ denetleyici (Argo CD/Flux) ağırlıklar/seçiciler uygular.
Ortamlar/Onaylar: üretim adımları için - manuel kapı + denetim kararları.

8) NGINX/Elçi ve Bulut LB'leri: Hızlı Örnekler

8. 1 NGINX (yukarı akış ağırlıkları)

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 (Ağırlıklı Hedef Gruplar)

TG-Blue: 90, TG-Green: 10 - IaC/CLI ile ağırlıkları değiştirin.
Otomatik komut dosyalarını geri almak için CloudWatch uyarılarını bağlayın (ağırlık 0/100 olarak değiştirilir).

9) Güvenlik ve uyumluluk

Sürümler arasında sıfır güven: Şifreleme sırları/yuvarlanan anahtarlar arasında ayrım yapın.
Kod Olarak İlke: imzasız görüntü dağıtımına izin vermez,'en son 'değildir.
Sürüm artefaktları olarak sırlar ve yapılandırmalar; Geri alma, yapılandırmaların geri alınmasını içerir.
Denetim: Kim, ağırlığı kaldırdığında/seçiciyi değiştirdiğinde, hangi biletle.

10) Maliyet ve kapasite

Mavi-Yeşil, serbest bırakma süresi için iki kat güç gerektirir - bir pencere planlayın.
Kanarya daha uzun sürebilir - telemetri/gözetim maliyeti, iki versiyonun paralel içeriği.
Optimizasyon: HPA/VPA ile otomatik ölçeklendirme, kısa Mavi-Yeşil pencereler,'ağır "hizmetler için gece sürümleri.

11) Çalışma kitapları

1. Promosyonu durdurun.
2. Yeşil ağırlığı %0'a (kanarya )/dönüş seçicisini Mavi'ye (mavi-yeşil) düşürün.
3. Kontrol: hatalar/gecikme temel, boşaltma bağlantılarına geri döndü.
4. Bir olayı açın, eserler toplayın (günlükler, izler, metriklerin karşılaştırılması).
5. Fix/sahneye reprod, sürücü duman, ilerleme yeniden başlatın.

12) Anti-desenler

Sahne ve prod arasında bir eserin yeniden inşası ('bir kez inşa "ihlali).
SLO/metrikleri olmayan "sağır" kanarya bir formalitedir, savunma değildir.
Özellik bayraklarının olmaması: Serbest bırakma, bir kerede %100 davranışı içermek zorunda kalır.
Çalışmayan sağlık kontrolleri/canlılık - "yapışkan" dipler ve yanlış stabilite.
Veritabanı uyumluluğu "rastgele": geçiş yaparken sözleşme kesilir.
Prod'da değiştirilebilir görüntü etiketleri/'en son '.

13) Uygulama kontrol listesi (0-45 gün)

0-10 gün

Hizmetler için bir strateji seçin: B/G, Kanarya veya kombine.
Görüntü imzalama, sağlık kontrolleri, hazır olma örnekleri,'en son yok 'seçeneğini etkinleştirin.
SLO panoları hazırlayın (gecikme/hata oranı/iş metrikleri).

11-25 gün

Ağırlıkları otomatikleştirin (Istio/Argo Rollouts/ALB ağırlıkları).
Analiz şablonlarını, uyarıları ve otomatik geri dönüşü yapılandırın.
Şablon manifestoları (Helm/Kustomize), GitOps ile tümleşir.

26-45 gün

Veritabanı için expand-migrate-contract stratejisini uygulayın.
Kritik kill-switch bayraklarını kapatın.
"Oyun günü" geçirin: bir geri dönüş ve olayı simüle edin.

14) Olgunluk metrikleri

Mavi-Yeşil/Kanarya yoluyla yapılan yayınların %'si (hedef> %90).
Ortalama geçiş/geri alma süresi (hedef <3 dk).
SLO otomatik durdurma ile sürümlerin paylaşımı (ve olaysız).
Telemetri ile servis kapsamı (izler/günlükler/metrikler)> %95.
Genişletme-taşıma-sözleşme şemasına göre DB geçişlerinin payı> %90'dır.

15) Ekler: Politika ve Boru Hattı Şablonları

OPA (imzasız görüntülere izin verme)

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

Kanarya için dümen değerleri (basitleştirilmiş)

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

GitHub Eylemleri - ağırlık promosyonu (sözde)

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) Sonuç

Mavi-Yeşil ve Kanarya birbirini dışlayan değil, tamamlayıcı stratejilerdir. İmzalı eserler, SLO gözlemlenebilirliği, otomatik kapılar ve GitOps kontrolü üzerine inşa edin. Teslimatı dahil etmekten ayırın, hızlı bir geri dönüş ve geçiş disiplini sağlayın - ve bültenler öngörülebilir, güvenli ve hızlı hale gelir.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.