Serbest bırakma stratejileri: mavi-yeşil ve kanarya
(Bölüm: Teknoloji ve Altyapı)
Kısa Özet
Mavi-yeşil, en basit geri dönüşle iki tam yığın (Mavi/Yeşil) arasında anında geçiş sağlar. Kanarya yavaş yavaş SLO kapıları (gecikme, hata oranı, iş metrikleri) kontrolü altında yeni sürüme trafik payını artırıyor. IGaming için bu, turnuva ve promosyonların zirvesinde kesinti olmadan serbest bırakmanın bir yoludur ve aynı zamanda istikrarlı bir p99 ve kaliteyi korur.
1) Ne zaman seçilir
Mavi-yeşil - hızlı sürümler, minimum karmaşıklık, "çift" küme/kaynak bütçesine ihtiyacınız var. Karmaşık durum geçişi olmadan API/ön için iyidir.
Kanarya - yüksek riskli salımlar (yeni akış, kritik değişiklikler), trafiğin %1-5'inde bozulmayı "yakalamanıza" izin verir. Telemetri ve otomatik kapılar gerekiyor.
2) Mimari ilkeler
1. L7 seviye yönlendirme: dengeleyici/Giriş/servis ağı (ağırlıklı trafik modülleri, çerezler/bayrak yönlendirme).
2. İzole bağımlılıklar: yapılandırmalar, phicheflags, sırlar, önbellekler - revizyonlar için ayrı ayrı.
3. Veri uyumluluğu: forward-compatible (genişlet, göç et, kontrat) veritabanı geçişleri.
4. Gözlemlenebilirlik: metrikler/günlükler/izlerdeki bireysel etiketler/sürüm etiketleri.
5. Autogates: p95/p99 karşılaştırma, hata oranı, iş KPI; otomatik geri alma.
3) Mavi-yeşil: temel desen
Akış
1. Yeşil'i genişletin (Mavi'nin bir kopyası) - önbellekleri/bağlantıları ısıtın.
2. Sağlık/duman testleri yapın.
3. Trafiği (DNS/LB/Ingress) Yeşil olarak değiştirin.
4. Pencerenin sonuna kadar geri dönüş olarak Mavi'yi "sıcak'bir durumda tutuyoruz.
Örnek: Giriş seviyesi değiştirme (fikir)
yaml
Annotated/Backend Option - In Prod, it is usually controlled by the spec operator/rollout:
rules:
- host: api. example. com http:
paths:
- path: /
backend:
service:
name: api-green # used to be api-blue port:
number: 80
Artılar/Eksiler
Basit geri alma (Mavi döndürüldü).
Öngörülebilir çıkış süresi.
Kaynakların çoğaltılmasını gerektirir.
Kanarya ölçümü olmadan "büyük patlama" riski.
4) Kanarya: Kademeli birikim
Akış
1. Gölge trafik (isteğe bağlı) - %1 gerçek trafik - %5 - %25 - %50 - %100.
2. Her aşamada - SLO/iş metriklerine göre kapılar.
3. Bozulma sırasında - otomatik geri alma ve teşhis eserlerinin korunması.
Örnek: Argo Rollouts (snippet)
yaml apiVersion: argoproj. io/v1alpha1 kind: Rollout metadata: { name: payments-api }
spec:
strategy:
canary:
canaryService: payments-canary stableService: payments-stable steps:
- setWeight: 5
- pause: { duration: 5m }
- analysis:
templates:
- templateName: slo-latency
- setWeight: 25
- pause: { duration: 10m }
- analysis:
templates:
- templateName: error-rate
- setWeight: 50
- pause: { duration: 20m }
- setWeight: 100
Örnek: Flagger + Istio/NGINX (fikir)
yaml apiVersion: flagger. app/v1beta1 kind: Canary metadata: { name: games-api }
spec:
targetRef:
apiVersion: apps/v1 kind: Deployment name: games-api service:
port: 80 analysis:
interval: 1m threshold: 5 metrics:
- name: request-success-rate thresholdRange: { min: 99 }
- name: request-duration thresholdRange: { max: 300 }
webhooks:
- name: smoke url: http://tester/smoke
5) Isınma ve durum yönetimi
Önbellekler/kaynaklar: Redis/HTTP önbelleğini/CDN'yi ısıtın, veritabanına/PSP'ye sıcak havuz bağlantıları hazırlayın.
ML/LLM/modelleri: yükleme ağırlıkları/indeksler/gömmeler, KV önbelleği, "ısınma" için birincil istekler.
Dosyalar/eserler: statik içerik, şablonlar, yapılandırmalar - önceden yerel birime/sidecar'a gönderin.
Ficheflags: Seyirci/segmentin %1-5'inde kullanıma sunulması, acil durum öldürme fırsatı.
6) Veritabanları: "genişlet> migrate> contract" stratejisi
1. Genişlet: geçersiz/yeni sütunlar/dizinler ekleyin, her iki sürümü de destekleyin.
2. Migrate: kod yeni bir şema kullanır; Eski yollar geçerliliğini koruyor.
3. Sözleşme: tam gevşemeden sonra eski alanları/indeksleri silin.
Günlüklerde, şema ve istemci sürümünü düzeltin; Tüm değişiklikler idempotent.
Ağır göçler için - arka plan sıkışmaları, kısma ve "dünyayı durdur" pencereleri kararlaştırıldı.
7) Gözlenebilirlik ve kapılar (SLO/SLA)
SRE metrikleri: p50/p95/p99, hata oranı, doygunluk (CPU/GPU/IO), kuyruk derinliği, soğuk başlangıç zamanı.
İş metrikleri: ödeme dönüşümü, teklif başarısı, para çekme süresi (TTW), promosyon yanıtları.
İçerik kalitesi/LLM: belirteçler/ler, yanıt uzunluğu, toksisite, RAG puanı.
Gates: Eşiklerin ötesine geçerken ve/veya "yararlı metrik" düştüğünde otomatik tanıtım/geri alma.
gate:
p95_latency_ms <= 250 error_rate % <= 1. 0 payment_conv >= baseline - 0. 3%
action:
promote rollback
8) Yayın orkestrasyonu ve CI/CD ile entegrasyon
GitOps: sürüm/ağırlık değişiklikleri - PR yoluyla manifesto deposuna.
Trafik başlamadan önce duman/e2e'yi otomatik olarak kontrol eder.
Sürüm planı: kanarya adım programı, sorumlu, ChatOps kanalları, geri alma pencereleri.
Dışlayıcıları arşivleme: yönlendirme yapılandırmaları, gösterge tablosu anlık görüntüleri, metrik karşılaştırma günlükleri.
9) Çok bölgeli ve kenar
Sipariş: Önce'en az kritik "bölge/ROR, sonra ana olanlar.
Gecikmeye dayalı yönlendirme: yerel SLO'ları izleyin; Sebepsiz yere trafiği karıştırmayın.
DR-vision: Bölge-A'daki mavi, bölge-B'deki Yeşil için DR-sitesi olabilir.
10) Güvenlik ve uyumluluk sürümü
İmzalı Görünümler/Grafikler, SBOM; Kabul politikalarında imzaları kontrol etmek.
Sırlar: sadece dış yöneticiler; Mavi/Yeşil için bağımsız sürümler.
PII/bölgesellik: Trafiği PII'den yabancı bir bölgeye yönlendirmeyin; Karşılaştırma yaparken günlükleri maskeleyin.
Denetim: kim terfi etti, hangi kapılar çalıştı, geri alma nerede.
11) Yapılandırma örnekleri
NGINX: Cookie/Header tarafından Kanarya Dalı (Fikir)
nginx map $http_x_canary $canary {
default 0;
"1" 1;
}
upstream api_stable { server stable:80; }
upstream api_canary { server canary:80; }
server {
location / {
if ($canary) { proxy_pass http://api_canary; }
proxy_pass http://api_stable;
}
}
Özellik-bayrak "kesirli rollout" (sözde)
yaml feature: new_checkout rollout:
percentage: 5 criteria:
country: ["TR", "BR", "MX"]
cohort: "new-users"
kill_switch: true
12) Runbooks (tipik senaryolar)
Kanarya üzerinde p99'un büyümesi: promosyonu durdurun - toplu/zaman aşımını artırın, bayraklar aracılığıyla ağır özellikleri kapatın - bazı bölmeleri yeniden başlatın.
Ödeme dönüştürme düşüşü: PSP rotalarını/özelliklerini karşılaştırın, gölge günlüğünü etkinleştirin, kararlılığa geri dönün.
Veritabanı geçişi ile ilgili sorun: yazma için trafiği dondur, salt okunur modu etkinleştir, şemayı geri al (mümkünse), acil durum düzeltme jabları.
PII olayı: kanarya versiyonunu kes, sırların iptali, rapor ve denetim.
13) Uygulama kontrol listesi
1. Politikayı tanımlayın: nerede mavi-yeşil, nerede kanarya; "Kritik'olarak kabul edilir.
2. Ağırlıklı yönlendirmeyi yapılandır (Ingress/mesh/router).
3. SLO eşik kapılarını ve otomatik geri dönüşleri yakalayın.
4. Veritabanı için genişlet> göç et> sözleşme uygula; Göç testleri.
5. Önbellek/modellerin ve sıcak havuz bağlantılarının ısınmasını sağlar.
6. GitOps girin ve tüm serbest bırakma eylemlerini günlüğe kaydedin.
7. Metriklerin karşılaştırmasını görselleştirin (kanarya vs kararlı).
8. Oyun gününü geçirin: Bir geçit geri dönüşü/başarısız/veritabanı problemini simüle edin.
9. Çalışma kitaplarını ve kill-switch'i belgeleyin.
10. Sırayla çok bölgeli sürümleri planlayın, aynı anda değil.
14) Anti-desenler
Kapılar ve telemetri olmadan kanarya salınımı - bozulmanın geç tespiti.
DB Şemasını Karıştırma: Kod Gevşemeye Yıkıcı Geçişler.
Mavi ve Yeşil için izolasyon olmadan paylaşılan bir önbellek/kuyruk - karşılıklı etki.
Doğrulama olmadan düşük TTL ile DNS anahtarlama - trafiği "çırpma".
Her iki revizyonda da ortak olan sırlar/yapılandırmalar - karmaşık geri alma.
Gölge/duman olmadan yiyecek trafiği büyük bir patlama riskidir.
Hızlı kapatma için kill-switch/feature-flag yok.
Özet
Mavi-yeşil, anında ve kolay geçiş, kanarya tarafından yönetilen risk ve erken sorun tespiti sağlar. IGaming'de, her iki model de birleştirilir: "keskin" değişikliklerde kanarya + kesinti olmadan temel bir mekanizma olarak mavi-yeşil. SLO kapıları, GitOps, ısınma, veritabanı uyumluluğu ve bağımlılık izolasyonu ekleyin - ve sürümler öngörülebilir, geri dönüşler hızlı ve p99 ve iş metrikleri yoğun dönemlerde bile stabildir.