İçeriğe geç

Yayın Stratejileri — Hatalı Sürüm Kaç Kişiye Dokunur?

Orta 9 dk Sık karşılaşılır

Önce şunu oku: Docker Katman Cache ve İmaj Boyutu

30 saniyede özet

Aynı yeni sürüm dört yolla yayına çıkabilir: hepsini durdurup başlatmak, pod pod değiştirmek, ikinci bir ortama geçmek ya da önce küçük bir dilime açmak. Seçim; kesintiyi, hatanın kaç kişiye dokunacağını ve geri dönüş hızını belirler.

Dört şeritli bir köprüyü yenilemen gerekiyor. Bütün köprüyü kapatabilir, şerit şerit değiştirebilir, yanına yenisini yapıp trafiği bir anda çevirebilir ya da önce birkaç aracı yeni şeritten geçirebilirsin. Hepsi aynı köprüyle biter ama yolculuk çok farklıdır.

  1. Bayt: Yeni sürümü yayına aldım. Bütün pod'ları durdurdum, yenilerini başlattım.

  2. Sen: O arada istekler ne oldu?

  3. Bayt: Birkaç saniye hepsi düştü. Üstelik yeni sürüm hatalıymış, herkes gördü!

  4. Bayt: Hatalı sürüm her zaman çıkabilir. Asıl soru, kaç kişiye dokunacağı.

Dört yol

Recreate eski pod’ların hepsini durdurur, sonra yenilerini başlatır. Basittir ama arada hiç pod yoktur ve istekler düşer.

rolling deployUygulama kopyalarını tek tek yeni sürüme geçiren dağıtım. Bir süre eski ve yeni kod aynı veritabanıyla birlikte çalışır.Sözlükte gör → pod’ları teker teker değiştirir: yenisi hazır olunca bir eskisi kapanır. Kesinti olmaz; geçiş sırasında bir pod fazlası gerekir.

Kafam karıştı, daha basit anlat

Recreate hepsini birden değiştirir ve trafik durur. Rolling birer birer değiştirir ve trafik akmaya devam eder.

Hızlı kontrolBaşlangıç

Recreate stratejisinin en belirgin bedeli nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

maxSurge: 1 ve maxUnavailable: 0 olan bir rolling update ne yapar?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Hatalı sürüm kaç kişiye dokunur?

Yeni sürümde havaleleri bozan bir hata var ama pod'lar ayakta ve readiness probe 'hazır' diyor. Rolling deploy pod pod ilerliyor. Rollout kendiliğinden durur mu? Cevabı göster

Hayır. Readiness probe yalnızca pod’un istek alabildiğini kontrol eder; iş mantığındaki hatayı göremez. Rollout, biri hata oranını fark edip durdurana kadar ilerler.

Aynı köprü, dört yenileme yolu.
Adım adım oku
  1. Köprüyü kapatıp yenisini açmak: trafik durur.
  2. Şerit şerit değiştirmek: trafik akar.
  3. İkinci köprüyü kurup trafiği bir anda çevirmek: geri dönmek kolay.
  4. Önce birkaç araç denesin: sorun yalnızca onlara dokunur.

blue-green deploymentYeni sürüm için ikinci bir tam ortam kurup trafiği tek anahtarla çevirmek. Geri dönüş saniyelerdir; bedeli geçiş sırasında iki kat kapasitedir.Sözlükte gör → yanına tam bir ikinci ortam kurar ve trafiği tek anahtarla çevirir. Hatalıysa anahtar geri çevrilir; ama o ana kadar herkes yeni sürümü görmüştür.

canary releaseYeni sürümü önce trafiğin küçük bir dilimine açıp hata oranını eski sürümle karşılaştırmak. Hatalı sürüm yalnızca o dilime dokunur.Sözlükte gör → yeni sürümü önce küçük bir dilime açar ve readiness probeKubernetes'in "bu pod şu an trafik almaya hazır mı?" sorusu. Düşerse pod yeniden başlatılmaz, yalnızca load balancer'dan çıkarılır.Sözlükte gör →’un göremeyeceği şeye, hata oranına bakar. Hatalı bir sürüm yalnızca o dilime dokunur.

Kafam karıştı, daha basit anlat

Blue-green herkesi bir anda taşır ama bir anda geri döner. Canary önce birkaç kişiye açar ve hatayı küçük tutar.

Hızlı kontrolOrta

Yeni sürümde iş mantığı hatası var ama pod ayakta. Readiness probe rollout'u durdurur mu?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Blue-green ile canary arasındaki temel fark hangisi?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Kendin gör

v2 yayına çıkıyor

Tohum 862776

v2 payı: %0

Oynat ya da adımla.

Hız
Adım 0

Şu an ne oldu?

Recreate (hepsini durdur, yenisini başlat)

Aynı v2, dört farklı yolla yayına çıkıyor. Kesinti, etkilenen kullanıcı, fazladan kapasite ve geri dönüş hızı değişiyor.

Görevler0/3

  • Hatalı sürümü bütün kullanıcılara gösteraçık

    İpucu

    Varsayılan ayarlar yeter; bir yolu daha var.

  • Hatalı sürümü kullanıcıların en fazla %5'ine gösteraçık

    İpucu

    Önce küçük bir dilim.

  • Herkese açılan hatalı sürümden saniyeler içinde dönaçık

    İpucu

    Eski ortamı ayakta tutan strateji.

Olay günlüğü (0)

Henüz olay yok. Oynat veya adımla.

  1. Varsayılanla oynat. Recreate ve hatalı sürüm: kesinti ve bütün kullanıcılar hatayı gördü.
  2. Rolling’e geç. Kesinti yok, ama hata fark edilene kadar kullanıcıların yarısı etkilendi.
  3. Blue-green’e geç. Herkes gördü, ama geri dönüş saniyeler sürdü.
  4. Canary’ye geç. Hatayı yalnızca yüzde 5 gördü.
  5. “v2 hatalı”yı kapat. Dördünün kesinti ve kapasite bedellerini karşılaştır.
Hızlı kontrolOrta

Hatalı bir sürümü en az kullanıcının görmesi için hangi strateji seçilir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Blue-green'in en büyük maliyeti nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Tuzaklar

İki sürüm aynı anda. Rolling ve canary sırasında eski ve yeni sürüm birlikte çalışır. Veritabanı şeması ve mesaj biçimi ikisini birden desteklemeli; şema değişikliği bu yüzden adım adım yapılır.

Bakılmayan canary. Dilimi açıp metriklere bakmamak, canary’yi yavaş bir rolling’e çevirir. Karar bir ölçüte bağlı olmalı: hata oranı ve gecikme eski sürümle karşılaştırılır.

Geri dönüşü hiç denememek. Geri dönüş komutu ilk kez kriz anında çalıştırılmamalı. Sakin bir günde bir kez dene.

Kafam karıştı, daha basit anlat

İki sürüm bir süre birlikte yaşar; canary’ye bak; geri dönüşü önceden dene.

Hızlı kontrolOrta

Rolling update sırasında eski ve yeni sürüm aynı veritabanına yazıyor. Yeni sürüm bir kolonu silen bir migration getiriyor. Risk nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Aşağıdaki örnek bir bankanın ödeme API’sinden: Kubernetes’te rolling ayarları, iş mantığını da kontrol eden bir hazırlık sinyali ve canary kararının ölçütü.

Derinleş · Ödeme API'si: kesintisiz rolling ve ölçüte bağlı canary 4 dosya · ~53 satır · ilk okumada atlayabilirsin
Proje dosyaları

k8s/ payments-deployment.yaml Deployment: aynı anda en fazla bir pod fazla, hiçbir zaman eksik değil.

k8s/payments-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: payments-api
spec:
replicas: 4
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # one extra pod during the swap
maxUnavailable: 0 # never fewer than four ready pods
template:
spec:
terminationGracePeriodSeconds: 30
containers:
- name: api
image: registry.bank.example/payments-api:2.4.0
readinessProbe:
httpGet: { path: /actuator/health/readiness, port: 8080 }
periodSeconds: 5

src/main/java/com/bank/payments/health/ PaymentNetworkHealthIndicator.java Hazırlık: pod ancak veritabanı ve ödeme ağına ulaşabildiğinde trafik alıyor.

src/main/java/com/bank/payments/health/PaymentNetworkHealthIndicator.java
// Readiness that knows a little about the business: ready only when the
// payment network answers. It still cannot see a bug in transfer logic.
@Component
class PaymentNetworkHealthIndicator implements HealthIndicator {
private final PaymentNetworkClient network;
PaymentNetworkHealthIndicator(PaymentNetworkClient network) {
this.network = network;
}
@Override
public Health health() {
return network.ping() ? Health.up().build() : Health.down().withDetail("network", "unreachable").build();
}
}

src/main/resources/ application.yml Canary kararı: hata oranı eski sürümünkini belirgin aşarsa genişletme durur.

src/main/resources/application.yml
management:
endpoint:
health:
group:
readiness:
include: readinessState, db, paymentNetwork
server:
shutdown: graceful # finish in-flight transfers before the pod stops

tools/canary/ CanaryGate.java Kapanış: pod kapanırken elindeki istekleri bitiriyor.

tools/canary/CanaryGate.java
// The canary only widens when its error rate is not clearly worse than the
// stable version's. The numbers come from your metrics, not from a guess.
record CanaryGate(double maxRatio, long minRequests) {
boolean mayWiden(Stats canary, Stats stable) {
if (canary.requests() < minRequests) return false; // not enough evidence yet
return canary.errorRate() <= stable.errorRate() * maxRatio;
}
}

Kendini sına

Şimşek turu1/4

Recreate stratejisinde eski ve yeni sürüm arasında kısa bir kesinti olur.

Soru 1/3İleri

Canary yüzde 5'te, ama kimse metriklere bakmıyor ve otomatik bir ölçüt yok. Ne olur?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Aklında kalacak üç şey

  1. 1 Recreate bütün eski pod'ları durdurup yenilerini başlatır ve arada kesinti olur. Rolling pod pod değiştirir ve kesinti olmaz.
  2. 2 Blue-green ikinci bir tam ortam kurar ve trafiği tek anahtarla çevirir: geri dönüş saniyelerdir, ama hatalı sürümü bir anda herkes görür ve iki kat kapasite gerekir.
  3. 3 Canary yeni sürümü önce küçük bir dilime açar ve metrikleri karşılaştırır. Hatalı bir sürüm yalnızca o dilimdeki kullanıcılara dokunur.
Sonraki kapı Yeni özelliğin kodu yayında, ama hiçbir müşteri onu görmüyor. Bu bir hata mı, yoksa plan mı? Özellik Bayrakları — Deploy Ettim Ama Kimse Görmedi · 8 dk

4 kart sonraki derste seni bekliyor

0/4 kart bu dersten toplandı

Bu dersin üstüne kurulanlar

Bunlar bu dersi temel alıyor; hazır olduğunda devam edebilirsin.