Fintek API'si için Canary mi, Blue-Green deployment mı?
Soru
Binlerce kullanıcının anlık işlem yaptığı kritik bir fintek API'ımız var ve yeni sürüm çıkarken riski sıfırlamak istiyoruz. İki seçenek var: tüm trafiği bir anda yeni ortama almak (Blue-Green) ya da trafiğin %1'ini yeni sürüme verip logları izlemek (Canary). Altyapı maliyeti, veritabanı şema değişikliği (backward compatibility) ve rollback hızını düşünerek hangi senaryoda hangisini seçerim?
Cevap
Kısa cevap: Yüksek riskli bir fintek API’da rutin sürümler için Canary’yi varsayılan yapın; anında çevirebileceğiniz/geri alabileceğiniz büyük cutover’lar için Blue-Green’i elinizde tutun.
Kısa cevap
Asıl mesele şu: ikisi de aynı problemi farklı maliyetle çözüyor — yeni sürümü canlı trafikle, ama kontrollü şekilde sınamak. İkisinin de ön koşulu olan geriye uyumlu şema geçişini — expand/contract ve dual-write’ı — canlı tabloda sıfır kayıplı şema geçişi kaydında adım adım anlatmıştım.
Neden
- Canary en küçük blast radius’u verir. Gerçek dünya hatalarını çok küçük bir kullanıcı kitlesiyle yakalarsınız. Bir fintekte rutin sürümün doğal seçimi budur.
- Blue-Green en hızlı rollback’i en pahalı altyapıyla satar. Rollback neredeyse anlık (geri çevirin) ve temiz bir pre-prod test ortamı verir; ama altyapıyı ikiye katlar ve %100’ü aynı anda riske atar.
- Belirleyici nokta veritabanı. Her iki stratejide de eski ve yeni sürüm bir süre aynı anda çalışır. Bu yüzden şema değişiklikleri geriye uyumlu (expand/contract) olmak zorunda — migration backward-compatible değilse ne Canary ne Blue-Green sizi kurtarır; eski kod yeni şemada patlar.
Ne yapmalı
- Rutin sürümlerde Canary’yi varsayılan yapın. %1 trafik → hata oranı, latency ve iş metriklerini izleyin → kademeli ramp.
- Blue-Green’i büyük cutover’lara saklayın. Tam bir ikinci ortam ayağa kaldırıp trafiğin tamamını anında oraya çevirmenin bedelini, ancak değişim bunu hak ettiğinde ödeyin.
- Her migration’ı geriye uyumlu yazın. Şemayı expand/contract ile ilerletin ki eski ve yeni sürüm aynı anda çalışırken hiçbiri patlamasın.
- Kararı sürüm başına verin. Blue-Green ≈ anlık geri dönüş ama yüksek maliyet; Canary hızlı (ağırlığı geri alın) ve ucuz. Para hareketi olan bir API’da bu denge, “ne sıklıkta ve ne kadar riskli deploy ediyorsunuz” sorusuyla çözülür.
Sonuç: Ben olsam günlük sürümler için Canary’yi standart yapardım — en düşük risk, en küçük etki alanı. Büyük, riskli cutover’lar (major sürüm, altyapı taşıması) için Blue-Green’in instant rollback’ini saklardım. Ama strateji ne olursa olsun değişmeyen kural: her migration’ı geriye uyumlu yazın. Şema disiplinini kurmadan hiçbir deploy stratejisi sizi güvende tutmaz.
Yorumlar
Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.