Mavi-Yeşil ve Kanarya
(Bölüm: Mimari ve Protokoller)
1) Neden "güvenli kullanıma" ihtiyacımız var?
Modern sistemlerde, sürüm sadece kod teslimi değil, aynı zamanda satışlarda kontrollü bir denemedir: aynı anda riski en aza indiririz (kullanıcıları kırmayız) ve geri bildirim süresini kısaltırız (etkiyi hızlı bir şekilde görün). İki klasik strateji - Mavi-Yeşil ve Kanarya - bunu farklı şekillerde çözer, ancak ortak bir hedefle: sıfır kesinti süresi, hızlı geri dönüş, SLO tarafından gözlemlenebilirlik.
2) Temel tanımlar
Mavi-yeşil
Üretim ortamının tam teşekküllü iki kopyasını tutuyoruz: aktif (Mavi) trafiğe hizmet ediyor, pasif (Yeşil) yeni bir sürüm hazırlıyor. Anahtarlama, dengeleyici/yönlendirici düzeyinde atomiktir (anahtar/çevirme). Daha da kötüleşirse, hemen Mavi'ye döneriz.
Kanarya
Parçalar halinde yayıyoruz: önce trafiğin küçük bir %'sine (örneğin, %1-5), metrikleri/SLO'yu gözlemleyin, sonra adım adım payı artırın (%10 - %25 - %50 - %100). Bozulma sırasında - önceki kararlı adımda geri alma veya durdurma.
3) Hangi yaklaşımın en iyi olduğu zaman
Mavi-Yeşil - şunlardan birini seçin:- Karmaşık manevralar olmadan anında bir geri dönüşe ihtiyacımız var.
- Mimari/bütçe, ikili altyapı çoğaltmasına izin verir.
- Büyük ölçekli geçişleri veya platform güncellemelerini (OS/JDK/çalışma zamanı) ayrı olarak gerçekleştirmek istiyoruz.
- Uygulama/bağlantı havuzları kademeli bir "karışık" duruma duyarlıdır.
- Patlama yarıçapını en aza indirmeniz ve kullanıcıların payındaki davranışı görmeniz gerekir.
- Yüksek serbest bırakma oranı, normal olarak aşamalı teslimat.
- Olgun gözlemlenebilirlik ve otomatik kapılar vardır (hata bütçesi, gecikme, dönüşüm).
- Ürün ekibi hipotezleri test etmek istiyor: dönüşüm, elde tutma, LTV, vb.
4) Başarılı bir sürüm için genel ilkeler
Idempotent yapı eserleri: tüm aşamalarda aynı görüntü/paket.
Deterministik yapılandırma: kod olarak yapılandırma, ortamların karşılaştırılabilirliği.
Tasarım ile gözlemlenebilirlik: günlükler, metrikler, izler, uyarılar; SLI/SLO önceden.
Hızlı, otomatik geri alma: Geri alma düğmesi/komutu, manuel sihir değil, boru hattının bir parçasıdır.
Uyumlu şema değişiklikleri: Expand-migrate-contract stratejisi (bkz. § 10).
L7 yönlendirme (arzu edilir): API başlıkları/çerezler/yollar/sürümler üzerinde esneklik.
5) Mavi-Yeşil: Mimari ve Süreç
5. 1 Topoloji
İki ürün yığını: Mavi (aktif) ve Yeşil (aday).
Ortak dış bağımlılıklar: CDN, harici API'ler, kuyruklar; DB özel bir durumdur (bkz. § 10).
Anahtar noktası: dengeleyici/Giriş/Ağ Geçidi.
5. 2 Adım adım akış
1. Green'i yeni bir eser (vNext) altında yetiştiriyoruz, smok testleri yapıyoruz.
2. Green'e karşı Autotest çalışması (e2e, sözleşme, regresyon).
3. Önbelleği/oturumları ısıtın (varsa), arka plan jablarını/kuyruklarını senkronize edin.
4. Trafiği Yeşile çevirin: atomik çevirme (DNS TTL düşük, Rota/Dinleyici takası, Giriş ağırlığı = %100).
5. SLO'yu ilk dakikalarda/saatlerde gözlemliyoruz (altın sinyaller: gecikme, hatalar, doygunluk + iş metrikleri).
6. Sorun durumunda - Mavi'ye anında dönüş (geri çevirme).
5. 3 Artıları/Eksileri
Artıları: anında geri dönüş, basit zihinsel model, saf izolasyon.
Eksileri: Altyapıyı ikiye katlamak, durumsal bileşenlerle ilgili zorluklar ve veri geçişleri.
6) Kanarya Mimarisi ve Süreci
6. 1 Topoloji
Tek üretim kümesi; Tek bir cephenin arkasındaki hizmetin birkaç versiyonu (kararlı ve kanarya).
Trafik ağırlıklara (1-5-10-25-50-100 %) veya hedeflere (başlık/çerez/ID) bölünür.
6. 2 Adım adım akış
1. Kanarya sürümlerini aynı küme/ASG/NSG'ye dağıtın.
2. Bazı trafiği (örneğin, %1-5) kanaryaya yönlendirin.
3. SLI/SLO ve iş metriklerinin otomatik kontrolleri; CI/CD'de kapılar (hata oranı, p95 gecikme, CPU/RES, dönüşüm, reddetme/geri dönüş).
4. Kapıları geçerken trafik payında adım adım artış.
5. %100'e tam dağıtım ve eski versiyonun devre dışı bırakılması; Bozulma durumunda - otomatik geri alma.
6. 3 Artıları/Eksileri
Artıları: Çoğu kullanıcı için minimum risk, veri odaklı çözüm.
Eksileri: Olgun gözlemlenebilirliğe, yetkin yönlendirmeye, örnekler arasında "sürüm eğrilmesi" riskine ihtiyacımız var.
7) Trafik yönlendirme
Katman L4: IP/bağlantı noktalarına göre denge; Basit ama az esneklik.
Seviye L7: HTTP/S kuralları - yolda, ana bilgisayar, başlık, çerezler, Kullanıcı Aracısı, GeoIP, SNI.
- Ağırlıklı yönlendirme (ağırlıklar %1-100).
- Başlık tabanlı/Çerez tabanlı.
- Oturum yapışkanlığı (durum bilgisi/önbelleğe alınmış komut dosyaları için önemlidir).
- Gölge/Trafik yansıtma (yeni sürüme ayna istekleri "sessizce").
8) Araçlar ve uygulamalar (örnekler)
Kubernetes: Giriş (NGINX, Kontur), Servis Mesh (Istio/Linkerd), Argo Rollouts, Flagger.
Облака: AWS ALB/ELB, Route 53 ağırlıklı kayıtlar, ECS/EKS; GCP Yük Dengeleme + NEG; Azure Ön Kapı/Uygulama Ağ Geçidi.
CD platformları: Spinnaker, Argo CD, GitHub Eylemleri + Aşamalı Teslimat eklentileri, GitLab/CD.
9) Gözlenebilirlik, SLI/SLO ve kapılar
Altın sinyaller: Gecikme (p95/p99), Hata oranı (5xx/4xx по типам), RPS, Doygunluk (CPU/Bellek/GC), Kuyruk gecikmesi.
İş metrikleri: dönüşüm, yetkilendirmeler, ödemeler/başarılar, ortalama kontrol, huni adımlarıyla reddetme.
- Hata eşiği (örneğin, kanarya ≤ taban çizgisi + % X hata oranı).
- P95 gecikmesi, Δ'den daha fazla taban çizgisinden daha kötü değildir.
- İş eşiği (örn. Dönüşüm düşüşü
- SLO hata bütçesi daha hızlı yanmamalıdır.
Adım süresi: İstatistiksel anlamlılık için yeterli minimum süre (trafiğe bağlıdır).
10) Veritabanı geçişleri ve şema uyumluluğu
Ana kural: ileri ve geri sürümler uyumluysa sürümler güvenlidir.
Sözleşme genişletme-taşıma stratejisi:1. Genişlet: eski sürümü bozmadan yeni sütunlar/indeksler/tablolar ekleyin.
2. Uygulama vNext'i dağıtın (yeni şemaya okur/yazar, ancak eskisiyle nasıl çalışılacağını bilir).
3. Veri taşıma (arka plan/toplu iş, idempotent, denetim noktalarıyla).
4. Sözleşme: Stabilizasyondan sonra eski alanları/özellikleri silin.
Anti-desenler: Mavi-Yeşil anahtar noktasında özel engelleme gerektiren geçişler; Şemayı düşürememe; veri tekilleştirme olmadan "çift yazma".
11) Geri alma ve acil durum planları
Mavi-Yeşil: Mavi anında çevirme; Yeşil arka plan işlerinin kuyruklarını izleyin.
Kanarya: ağırlık geri dönüşü (örneğin, %25'ten %5'e veya %0'a); Uyarılar üzerine otomatik iptal.
Veri: iyi düşünülmüş bir tekrar/telafi politikası (idempotency anahtarları, "gelen kutusu/giden kutusu" deseni, mesaj veri tekilleştirme).
Ficheflags: Kısmen yuvarlanmış fırsatları kapatmak için hızlı bir öldürme anahtarı.
12) Devlet ve oturumlarla çalışmak
Kanaryalar için yapışkan oturumlar veya oturumları harici olarak depolamak (Redis/Memcached), böylece sürümler değiştirilebilir.
Önceden ısınmak için önbellek (Yeşil ısınma) ve çevirirken geçersiz kılmayı dikkate alın.
Arka plan çalışanları: Sürümler arasında "yarışlara" izin vermeyin - sürüme göre kuyruk ayrımı veya "liderlik".
13) Güvenlik ve uyumluluk
Green/Canary'ye Erişim - Zero Trust tarafından: hizmet hesapları, minimum gerekli roller.
Sırlar ve anahtarlar - KMS/Secrets Manager aracılığıyla; rotasyonu açın.
Trafik - sadece TLS; Uç nokta sürümleri açıkça işaretlenmiştir; Denetim yönlendirme ve serbest bırakma faaliyetleri.
14) Maliyet ve performans
Mavi-Yeşil altyapıyı iki katına çıkarır (serbest bırakıldığında veya sürekli olarak) - bütçe.
Kanarya daha ekonomiktir, ancak otomatikleştirmek için gözlemlenebilirlik araçları ve mühendislik zamanı gerektirir.
Optimizasyon: Otomatik ölçeklendirme, kısa ömürlü ortam, sürümlerin paralel varoluş penceresini kısaltma.
15) Kontrol listeleri
Serbest bırakılmadan önce
- Görüntü/yapı tek bir kaynaktan terfi, imzalar doğrulandı.
- Test planı, uyarılar ve SLO kapıları yapılandırılmıştır.
- Veritabanı geçişleri - genişletme modunda, düşürme planları mevcuttur.
- Geri alma planı - evreleme/üretim benzeri kontrol edildi.
Serbest bırakma sırasında
- Metrikler ve günlükler taban çizgisiyle karşılaştırılır.
- Kanarya için, adımlar ve eşikler sabittir; Mavi-Yeşil için - flip-back hazırlığı.
- Çağrı komutları biliyorum, bir geri bildirim penceresi var.
Serbest bırakıldıktan sonra
- SLO batmadı, hata bütçesi normal.
- Tahliye sonrası göçler/temizlikler tamamlandı.
- Retrospektif ve oyun kitabı güncellemesi.
16) Sık hatalar ve anti-desenler
Metrikler olmadan kullanıma sunma: veri yok - yönetilen çözüm yok.
Uyumsuz veritabanı şemalarını karıştırma, düşürme stratejisi eksikliği.
Rastgele trafik karıştırma: yapışkanlık yok, kullanıcılar sürümler arasında "atlıyor".
Gizli durum bağımlılıkları (yerel diskler, bellek içi önbellekler).
Uzun DNS-TTL, hızlı çevirme (Mavi-Yeşil) ile etkileşime girer.
Otogaz eksikliği: manuel "gözle" çözümler yavaşlar ve riskleri artırır.
17) Kombine yaklaşımlar
Mavi-Yeşil + Kanarya: Önce Yeşil'i, sonra Yeşil'in içinde bireysel hizmetler için Kanarya'yı açın.
Gölge/geçiş trafiği: Canary'den önce, yansıtılmış trafiği yeni sürüme çalıştırıyoruz.
Özellik bayrakları (aşamalı teslimat): işlevsellik, kararlı sürümün üzerine, segmentlere göre "karanlık" bayraklar tarafından dahil edilir.
18) Örnek senaryolar (eskizler)
Mavi-Yeşil (web + api):1. Yeni Dinleyici/Giriş için Green'i (v2) dağıtın.
2. Önbellekleri ısıtın, hazır kontroller yapın, duman.
3. Ağırlığı Green = %100 olarak değiştiriyoruz.
4. SLO'yu 30-60 dakika gözlemleyin; Her şey yolundaysa - Mavi'yi kapatın.
Kanarya (ödeme mikro hizmeti):1. Canary vNext'i dağıtın (kopyalar %5).
2. Dahili hesaplar/test segmenti için %5 trafik dahil ediyoruz.
3. Autogate: hata oranı ≤ taban çizgisi + 0. %3, p95 ≤ + 20ms.
4. Geçişleri geçerken her N dakikada %10 - %25 - %50 artırıyoruz.
5. Ficheflag'ı tüm segmentler için %100 tercüme ediyoruz; eski versiyonu siliniyor.
19) Farklı mimariler için varyasyonlar
Monolit: Mavi-Yeşil daha basittir, Kanarya özelliklerin bölünmezliği nedeniyle daha zordur; Ficheflags kullanın.
Mikro hizmetler: Kanarya doğaldır; Monitör tüketici odaklı sözleşmeler.
Durumsal hizmetler: Özenle hazırlanmış göçler ve yapışkanlık ile Mavi-Yeşil tercih edin.
20) Kısa karşılaştırma (özet)
Geri alma hızı: Mavi-Yeşil = anlık; Kanarya = hızlı ama ağırlığı bir geri çekilme ile.
Altyapı maliyeti: Mavi-Yeşil ↑; Kanarya ↔︎/↓.
Kullanıcılar için risk: Kanarya daha düşük (payı kontrol ediyoruz).
Uygulama zorluğu: Mavi-Yeşil başlamak daha kolaydır; Kanarya güçlü gözlemlenebilirlik ve otomasyon gerektirir.
Veri/devre uyumluluğu: her ikisi için de kritik; Planla genişlet-göç et-sözleşme.
21) Alt satır
Mavi-Yeşil ve Kanarya birbirini dışlayan stratejiler değil, ilerici teslimatın unsurlarıdır. Seçim maliyet kısıtlamalarına, gözlemlenebilirlik olgunluğuna ve değişikliklerin niteliğine bağlıdır. Yaklaşımdan bağımsız olarak, sürdürülebilir sürüm dört ayağa dayanır: otomasyon, gözlemlenebilirlik, geriye dönük uyumluluk ve hızlı geri dönüş.