Blue-Green Deployment Nedir? Kesintisiz Yayın Rehberi
Blue-green deployment ile kesintisiz deploy nasıl yapılır? Adımlar, riskler, Nginx örneği ve geri dönüş planı bu rehberde.
Blue-Green Deployment Nedir? Kesintisiz Yayın Rehberi
Meta Description
Blue-green deployment ile kesintisiz deploy yapın. Trafiği güvenle yönetin, hızlı rollback alın. Adım adım rehber ve Nginx örneği.
Giriş (Introduction)
Prod’a yeni sürüm çıkınca birkaç dakika bile kesinti yaşamak, hem kullanıcıyı hem geliri etkileyebilir. Daha kötüsü: “Deploy ettik, bir şeyler ters gitti ama geri dönemiyoruz” senaryosu.
Blue-green deployment, bu riski minimize eden, trafiği iki ayrı ortama (eski ve yeni sürüm) yöneterek kesintisiz yayın yapmanızı sağlayan pratik bir yöntemdir. Bu yazıda, blue-green deployment’ı ne zaman kullanmanız gerektiğini, nasıl kurulduğunu ve gerçek hayatta nasıl uygulandığını adım adım göreceksiniz.
Blue-Green Deployment Nedir?
Blue-green deployment, uygulamanın iki canlı ortamla çalıştığı bir dağıtım stratejisidir:
- Blue (mavi): Şu an trafiği alan, aktif üretim sürümü
- Green (yeşil): Yeni sürümün hazırlandığı paralel ortam
Yeni sürümü (green) hazırlayıp test edersiniz; her şey doğruysa trafiği bir “switch” ile green’e alırsınız. Sorun çıkarsa anında blue’ya geri dönersiniz (rollback).
Ana fikir: Yeni sürümü canlıya çıkarmadan önce canlıya çok benzeyen bir ortamda hazırla ve trafiği tek hamlede değiştir.
Blue-Green Deployment’ı Neden Yapmalıyım?
Blue-green deployment’ın en büyük avantajı “deploy korkusunu” azaltmasıdır.
Kazanımlar
- Kesintisiz yayın (zero-downtime): Trafik switch’ine kadar kullanıcı etkilenmez.
- Hızlı rollback: DB migration gibi geri dönüşü zor noktaları ayrı yönetirseniz, rollback saniyeler içinde olur.
- Risk izolasyonu: Yeni sürüm, prod trafiği almadan önce doğrulanır.
- Release güveni: Her deploy “büyük olay” olmaktan çıkar.
Ne zaman özellikle mantıklı?
- E-ticaret / ödeme / kritik akışlar
- Trafiğin yoğun olduğu saatlerde deploy ihtiyacı
- Mikroservis veya monolit fark etmeksizin “sık release” yapan ekipler
LSI anahtar kelimeler: kesintisiz deploy, zero downtime deployment, rollback stratejisi, trafik yönlendirme, release yönetimi, deployment stratejileri
Blue-Green vs Rolling Deploy vs Canary (Kısa Karşılaştırma)
Aşağıdaki tablo “hangi strateji ne zaman?” sorusunu netleştirir:
| Strateji | Trafik Geçişi | Risk | Rollback | Ne zaman? |
|---|---|---|---|---|
| Blue-Green Deployment | Tek hamlede (switch) | Orta | Çok hızlı | Kesintisiz ve hızlı geri dönüş isteniyorsa |
| Rolling Deployment | Kademeli instance değişimi | Orta | Orta | Basit, altyapı hazırsa |
| Canary Release | Yüzdeyle kademeli | Düşük | Orta | Deney/ölçüm, kademeli doğrulama gerekiyorsa |
Blue-green deployment özellikle “geri dönüş hızının kritik olduğu” ortamlarda öne çıkar.
Mimari: Trafik Switch’i Nerede Yapılır?
Blue-green deployment’ta kritik nokta, trafiği hangi katmanda yönettiğinizdir:
Yaygın seçenekler
- Load balancer (ALB/NLB, GCLB, Nginx, HAProxy)
- Ingress Controller (Kubernetes Ingress / NGINX Ingress)
- DNS switch (daha yavaş; TTL ve cache yüzünden gecikmeli)
Pratik öneri: Mümkünse load balancer / ingress üzerinden switch yapın. DNS tabanlı switch, rollback’te can yakabilir.
Adım Adım Blue-Green Deployment (Uygulanabilir Plan)
Bu bölüm, gerçek hayatta uygulanabilir bir check-list gibi tasarlandı.
1) Blue ve Green ortamlarını tanımla
- Aynı uygulamanın iki kopyası:
app-blueveapp-green - Aynı bağımlılıklar (env vars, secrets, network rules)
- Log/metric/trace aynı standarda göre
İpucu: Green ortamı “prod’a benzer” değil, prod ile aynı olmalı (mümkün olduğunca).
2) Green’e yeni sürümü deploy et
- CI/CD pipeline: build → test → deploy to green
- Trafik henüz green’e gitmiyor
Bu aşamada yapılacaklar:
- Smoke test
- En kritik user journey testleri (login, ödeme, arama, kayıt)
3) Green’de doğrulama (verification)
“Çalışıyor” demek için minimum kontrol:
- Health check endpoint:
/healthveya/ready - Kritik bağımlılıklar: DB bağlantısı, cache, queue
- Temel performans: cevap süreleri, error rate
4) Trafiği green’e al (switch)
Bu, load balancer/ingress seviyesinde bir ayar değişikliğidir.
5) İzle ve karar ver (observe)
Trafik geçişinden sonraki ilk 5–15 dakika çok kritiktir:
- 5xx artışı var mı?
- Latency yükseldi mi?
- CPU/RAM anormal mi?
- Business metrikleri (checkout success vs.)
6) Sorun varsa anında rollback
Rollback, trafiği tekrar blue’ya çevirmek demektir. Green ortamı durur veya debug için açık kalır.
Nginx ile Basit Blue-Green Trafik Switch Örneği
Aşağıdaki örnekte Nginx upstream ile trafiği blue’dan green’e geçiriyoruz.
Nginx config (upstream switch)
upstream app_backend {
# Başlangıçta blue aktif
server 10.0.1.10:8080;
# app-blue
# server 10.0.2.10:8080;
# app-green
}
server {
listen 80;
location / {
proxy_pass http://app_backend;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Green’e geçiş nasıl yapılır?
- Blue satırını comment’leyip green’i açın:
upstream app_backend {
# server 10.0.1.10:8080;
# app-blue
server 10.0.2.10:8080;
# app-green
}
- Ardından:
nginx -t && nginx -s reload
Rollback aynı işlemin tersidir. Bu kadar.
Not: Gerçek sistemlerde daha güvenli olması için iki backend’i de tanımlayıp
weightkullanabilir veya upstream’te “backup” kurgusu yapabilirsiniz.
En Büyük Tuzak: Veritabanı Değişiklikleri (DB Migration)
Blue-green deployment uygulamada kolaydır; zor olan genelde veri katmanıdır.
Neden zor?
Blue ve green aynı DB’yi kullanıyorsa, schema değişikliği:
- Blue’yu bozabilir
- Green’i beklenmedik şekilde etkileyebilir
Güvenli yaklaşım: Expand/Contract
- Expand: Geriye dönük uyumlu değişiklik (yeni kolon ekle, eskiyi silme)
- Uygulamayı deploy et (green)
- Trafiği geçir
- Contract: Eski alanları temizle (daha sonra)
Kural: Önce şemayı genişlet, sonra kodu değiştir, en son temizle.
Gerçek Hayat Senaryosu: E-ticarette Kampanya Günü Deploy
Bir kampanya gününde ödeme servisinde yeni bir “kupon doğrulama” akışı çıkacaksınız.
- Green’e yeni sürümü deploy ettiniz.
- Green ortamında gerçek ödeme sağlayıcısına gitmeden sandbox ile smoke test yaptınız.
- Trafiği green’e aldınız.
- İlk 3 dakikada 5xx artışı gördünüz (kupon servisi timeout).
Blue-green sayesinde:
- Trafiği saniyeler içinde tekrar blue’ya aldınız.
- Satış kaybını minimize ettiniz.
- Green ortamında hatayı debug edip fix’i tekrar green’e deploy ettiniz.
Bu modelin değeri, “hata olmayacak” varsayımı değil; hata olduğunda hasarı sınırlamaktır.
Sık Sorulan Sorular (FAQ)
1) Blue-green deployment ile gerçekten sıfır kesinti mümkün mü?
Evet, doğru health check ve doğru trafik switch katmanı ile genelde kullanıcı fark etmeyecek kadar kesintisiz olur. En büyük risk DB değişiklikleridir.
2) Blue-green deployment Kubernetes’te nasıl yapılır?
Genelde iki Deployment (blue/green) ve bir Service/Ingress’in selector veya route ayarını değiştirerek yapılır. Argo Rollouts gibi araçlar da kullanılabilir.
3) DNS ile blue-green switch yapmak mantıklı mı?
Genelde önerilmez. TTL ve cache yüzünden geçiş/rollback gecikebilir. Load balancer veya ingress daha güvenlidir.
4) Blue-green deployment pahalı mı?
İki ortam aynı anda çalıştığı için kısa süreliğine maliyeti artırabilir. Ancak downtime maliyeti yüksek ürünlerde bu maliyet genelde daha düşüktür.
5) Her deploy’da blue ve green’i yer değiştirmek gerekir mi?
Hayır. İsterseniz “blue hep prod, green staging” gibi kullanabilirsiniz; ancak pratikte her release’te aktif taraf değiştirerek ilerlemek yaygındır.
Sonuç
Blue-green deployment, kesintisiz yayın yapmak ve gerektiğinde saniyeler içinde rollback alabilmek için en net ve uygulanabilir stratejilerden biridir. Trafiği “tek hamlede” yönettiğiniz için release süreci sadeleşir; risk yönetimi güçlenir.
Bir sonraki deploy’unuzda şunu deneyin:
- Green ortamı hazırlayın
- Smoke test + health check ekleyin
- Trafiği load balancer/ingress üzerinden switch edin
Sorunuz varsa yorumda altyapınızı (VM/Kubernetes, Nginx/ALB, DB tipi) yazın; senaryonuza uygun blue-green planını birlikte netleştirelim.