Canary Deployment Nedir?
Kısa tanım
Canary deployment, yeni bir sürümü önce trafiğin veya kullanıcıların küçük bir bölümüne açan, hata oranı ve gecikme gibi metrikleri eski sürümle karşılaştırarak payı adım adım artıran yayın stratejisidir. Metrikler önceden belirlenen eşikleri aşarsa yayın durdurulur ve canary geri çekilir. Böylece hatalı bir sürüm, kullanıcıların tamamına ulaşmadan küçük bir grupta yakalanır.
Diğer adları: canary release, kanarya yayını, kademeli yayın, canary dağıtım, progressive rollout

Adı nereden geliyor, neyi çözüyor?
Madenciler eskiden ocağa bir kanarya götürürdü; zehirli gaz insanlardan önce kuşu etkilediği için tehlike erken fark edilirdi. Yazılımda canary de aynı işi görür: yeni sürüm önce küçük bir kullanıcı grubuna sunulur, bir sorun varsa etkisi bu grupla sınırlı kalır. Testler ne kadar iyi olursa olsun gerçek trafiğin çeşitliliğini taklit edemez; canary, sürümü gerçek koşullarda ama kontrollü bir “patlama yarıçapı” ile denemenin yoludur.
Google'ın SRE pratiklerinde canary, bir değişikliğin kısmi ve süresi sınırlı olarak yayına alınıp değerlendirilmesi diye tanımlanır. Değişikliği alan gruba canary, almayan gruba kontrol grubu denir. Kararın temeli bu iki grubun karşılaştırılmasıdır.
Kademeli bir yayın planı
Tipik bir canary planı, her adımda bir süre bekleyip metrikleri değerlendiren basamaklardan oluşur:
| Adım | Yeni sürümün trafik payı | Bekleme | Bakılan |
|---|---|---|---|
| 1 | %1 | 15 dakika | Çökme, 5xx oranı, başlangıç hataları |
| 2 | %10 | 30 dakika | Hata oranı ve p95 gecikme, kontrol grubuna göre |
| 3 | %50 | 1 saat | Kaynak kullanımı, iş metrikleri (ödeme, kayıt) |
| 4 | %100 | — | Eski sürüm kapatılır |
Yüzdeler ve süreler örnektir. Grubun büyüklüğü ve süresi, sorunları görünür kılacak kadar trafik toplamaya yetmelidir. Günde birkaç yüz istek alan bir serviste %1'lik canary, saatlerce bekleseniz de istatistiksel olarak anlamlı bir sonuç vermez.
Metrik kapıları: ilerle ya da geri çek
Canary'nin değeri, karar kurallarının önceden yazılmasından gelir. Her adımın sonunda bakılan sorular genellikle şunlardır:
- Göreli karşılaştırma: Canary'nin hata oranı ve gecikmesi, aynı anda çalışan kontrol grubundan anlamlı ölçüde kötü mü? Mutlak eşikler gün içi trafik dalgalanmalarında yanıltır; aynı zaman diliminde iki grubu karşılaştırmak bu gürültüyü azaltır.
- Doygunluk: CPU, bellek, bağlantı havuzu kullanımı yeni sürümde beklenmedik biçimde arttı mı?
- İş sinyalleri: Sepete ekleme, ödeme tamamlama veya oturum açma oranı düştü mü? Teknik metrikler temiz görünürken bozuk bir buton satışları durdurabilir.
Bu kontrollerin yapılabilmesi için metriklerin sürüme göre ayrıştırılabilmesi gerekir; yani gözlemlenebilirlik altyapısı her ölçüme sürüm etiketi eklemelidir. Herhangi bir kapı kırmızıya dönerse trafik payı sıfırlanır; bu, kapsamı küçük ve hızlı bir rollback anlamına gelir. Bu karşılaştırma ve geri çekme, CI/CD araçlarında veya service mesh katmanında otomatikleştirilebilir.
Trafiği kim, nasıl böler?
Bölme işi genellikle ağırlıklı yönlendirme destekleyen bir yük dengeleyicide, bir ingress denetleyicisinde ya da service mesh'te yapılır. Önemli bir ayrıntı yapışkanlıktır (stickiness): aynı kullanıcı bir istekte yeni, diğerinde eski sürümü görürse arayüz tutarsızlaşabilir. Kullanıcı kimliğinin veya bir çerezin hash'ine göre atama yapmak, her kullanıcının yayın boyunca aynı grupta kalmasını sağlar. Mobil uygulamalarda canary, mağazaların kademeli dağıtım özellikleriyle cihazlar üzerinden yapılır; orada geri çekmek sunucu tarafındaki kadar hızlı değildir.
Blue-green ile farkı
| Blue-green | Canary | |
|---|---|---|
| Geçiş biçimi | Tüm trafik tek hamlede | Yüzde yüzde, adım adım |
| Hatanın etkilediği kullanıcı | Geçiş anında herkes | Yalnızca o anki canary grubu |
| Altyapı ihtiyacı | İki tam ortam | Ağırlıklı yönlendirme ve sürüm bazlı metrik |
| Yayın süresi | Kısa | Daha uzun (adım ve bekleme süreleri) |
İkisi rakip değildir. Birçok ekip blue-green ortamlar arasında trafiği yüzdelerle kaydırarak iki yöntemi birleştirir. Unutulmaması gereken bir sınır var: canary, uygulama kodundaki riski küçültür ama paylaşılan veritabanında yapılan bir şema değişikliği ilk andan itibaren herkesi etkiler.

