Rolling update, blue-green ve canary deployment stratejileri arasındaki farklar nelerdir?
Cevap
Üçü de kesintisiz deploy (zero-downtime) hedefler; risk, maliyet ve geri dönüş hızı açısından farklıdırlar.
| Strateji | Nasıl çalışır | Artı | Eksi |
|---|---|---|---|
| Rolling update | Pod'lar birer birer (veya gruplar halinde) yeni sürümle değiştirilir | Ek kaynak az, Kubernetes varsayılanı | Bir süre iki sürüm birlikte çalışır, rollback yine kademeli |
| Blue-green | Yeni sürüm (green) tamamen ayrı ayağa kalkar, trafik tek seferde çevrilir | Anında geçiş ve anında rollback | Geçici olarak iki kat kaynak |
| Canary | Trafiğin küçük bir yüzdesi (%1, %5, %25...) yeni sürüme verilir, metrikler izlenerek artırılır | Hata az kullanıcıyı etkiler, gerçek trafikle doğrulama | Metrik altyapısı ve trafik bölme (service mesh, ingress) gerekir |
Kubernetes rolling update ayarı
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # aynı anda fazladan açılabilecek pod
maxUnavailable: 0 # kapasite hiç düşmesinCanary ve blue-green için genellikle Argo Rollouts, Flagger veya bir service mesh (Istio, Linkerd) kullanılır; canary analizinde hata oranı ve p99 gecikme eşik değerleri aşılırsa otomatik rollback yapılır.
Her stratejide geçerli kritik nokta: geriye uyumluluk
Rolling ve canary'de eski ve yeni sürüm aynı anda çalışır. Bu yüzden:
- DB şeması değişiklikleri expand/contract yaklaşımıyla yapılır: önce yeni kolonu ekle (iki sürüm de çalışır), kodu deploy et, veriyi taşı, en son eski kolonu sil.
- Kuyruk mesaj formatları ve API sözleşmeleri her iki sürümle uyumlu olmalıdır.
Feature flag ile farkı
Deployment stratejileri kodun yayınını yönetir; feature flag'ler ise deploy edilmiş bir özelliğin kime açılacağını yönetir. İkisi birlikte kullanılır: kod kapalı flag ile deploy edilir, sonra kademeli açılır.
İlgili Docker & DevOps soruları
- Distributed tracing nasıl çalışır? Trace context servisler arasında nasıl taşınır ve OpenTelemetry'nin rolü nedir?
- Observability nedir? Log, metric ve trace arasındaki fark nedir ve her biri ne için kullanılır?
- Ortam değişkenleri ve secret'lar (şifre, API anahtarı) güvenli şekilde nasıl yönetilir?
- CI/CD nedir? Tipik bir backend CI/CD pipeline'ının aşamaları nelerdir?
- İyi bir Dockerfile nasıl yazılır? Multi-stage build ne işe yarar?
- Docker Compose ne işe yarar? Basit bir örnekle açıklayın.
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.