Blue-green deployment ile canary deployment arasındaki fark nedir? Rollback nasıl yapılır?
Cevap
İkisi de kesintisiz deploy ve hızlı geri dönüş için kullanılır. Blue-green'de trafik eski sürümden yenisine tek seferde geçer; canary'de ise trafik kademeli olarak (%1, %10, %50, %100) yeni sürüme kaydırılır.
Blue-green
- İki özdeş ortam vardır: blue (şu an canlı) ve green (yeni sürüm).
- Green'e deploy edilir, smoke testleri çalıştırılır, ardından load balancer veya DNS tüm trafiği green'e çevirir.
- Rollback: trafiği tekrar blue'ya çevirmek, saniyeler sürer.
- Dezavantaj: geçiş anında tüm kullanıcılar yeni sürümü görür; iki kat altyapı maliyeti.
Canary
- Yeni sürüm küçük bir kullanıcı yüzdesine açılır, hata oranı ve latency metrikleri izlenir.
- Metrikler iyiyse yüzde artırılır; kötüyse otomatik geri alınır (Argo Rollouts, AWS CodeDeploy, Flagger).
- Avantaj: hata etkisi (blast radius) küçük kalır. Dezavantaj: aynı anda iki sürüm çalıştığı için API ve DB değişiklikleri geriye uyumlu olmalı; iyi metrik altyapısı gerektirir.
| Blue-green | Canary | |
|---|---|---|
| Trafik geçişi | Bir anda | Kademeli |
| Risk | Tüm kullanıcılar etkilenebilir | Küçük bir grup etkilenir |
| Rollback | Anında switch | Yüzdeyi sıfıra çekme |
| Gereksinim | 2 ortam | Trafik bölme + metrik izleme |
Full stack açısından dikkat
- Veritabanı: her iki sürüm aynı DB'yi kullanır, bu yüzden migration'lar geriye uyumlu olmalıdır. Kolon silmek gibi kırıcı değişiklikler ayrı bir sonraki deploy'a bırakılır.
- Frontend: eski sürümün JS dosyaları CDN'den hemen silinmemeli; açık sekmedeki kullanıcılar eski chunk'ları istemeye devam eder.
- Feature flag'ler, kodu deploy etmekle özelliği açmayı ayırarak benzer bir güvenlik sağlar.
İlgili Bulut & Deploy soruları
- Bulut faturası beklenenden çok yüksek geldi. Maliyeti nasıl analiz eder ve düşürürsünüz?
- Edge function ve edge rendering nedir? Kodu ne zaman edge'de, ne zaman tek bir bölgede (region) çalıştırırsınız?
- Production'daki bir full stack uygulamayı nasıl izlersiniz? Log, metrik, trace ve alarm stratejiniz nedir?
- Veritabanı şema değişikliklerini (migration) kesintisiz (zero-downtime) nasıl deploy edersiniz? Expand-contract nedir?
- Serverless (ör. AWS Lambda, Vercel Functions) ile container tabanlı deploy (Cloud Run, ECS, Kubernetes) arasında nasıl seçim yaparsınız?
- Uygulamanıza özel bir alan adı bağlayıp HTTPS'i nasıl kurarsınız? A, CNAME kayıtları ve TTL ne işe yarar?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.