Geri alma stratejileri ve atomik sürümler
Geri alma stratejileri ve atomik sürümler
1) Neden hızlı bir geri dönüşe ihtiyacınız var?
Mükemmel test kapsamı ile bile, gıda hatasız garanti etmez. Geri alma, bir sistemin bir SLO/iş metriği veya olay sinyali ile önceki sabit bir duruma kontrollü geri dönüşüdür. Hedefler:- MTTR'yi dakikalara indirin.
- Etki yarıçapını sınırlayın (minimum etkilenen kullanıcılar/işlemler).
- Veri bütünlüğünü ve sözleşme uyumluluğunu koruyun.
Anahtar: Yapı sürümleri, böylece geri alma bir mini proje değil, önemsiz bir eylemdir.
2) "Atom salınımı" kavramı
Atomik salınım - yeni bir versiyonun/davranışın dahil edilmesi, kalıcı yan etkiler olmadan tek bir atomik işlemle gerçekleştirilebilir (ve iptal edilebilir).
Atomisite bileşenleri:- Değişmez nesne (imzalı resim/paket).
- Sürüm yapılandırmaları (promosyon sürümleri, manuel düzenlemeler değil).
- "Teslimat'ın" dahil etme'den ayrılması (yönlendirme/bayraklar).
- Uyumlu veri şeması (her iki sürüm de aynı anda yaşayabilir).
- Rollback runbook: bir net adım (değiştirme seçicisi/ağırlık/bayrak) + kontrol.
3) Geri alma makinesi envanteri
3. 1 Trafik katmanı (en hızlı)
Mavi-Yeşil :/target group selector öğesini kararlı sürüme geçirin.
Kanarya: Ağırlığı %0'a düşürür ve ilerlemeyi dondurur.
Gateway/NGINX/Service Mesh: önceki ağırlıklara/rotalara geri dönün.
3. 2 Konveyör seviyesi
Helm/Argo Rollouts: Önceki revizyona 'iptal et/geri al'.
GitOps: Depoları tezahür ettirmek için MR/commit'i geri döndürün (denetleyici gerisini yapacaktır).
3. 3 Ek/Özellikler
Feature-flags/kill-switch: Riskli yolu anında kapatın.
Yapılandırmaları değiştir: Önceki yapılandırma çekimine geri dön.
3. 4 Veri
Roll-forward geçişleri (tercih edilen) + uyumluluk.
Nokta-in-time kurtarma (PITR) ve kazalar için yedekleme.
Telafisi (Saga) ve idempotency geri dönüşümlü eylemler için.
4) "genişlet> göç et> sözleşme" deseni
Geri alma işleminin güvenli olması için, veri şemasının eski ve yeni sürümlerin birlikte yaşamasına izin vermesi gerekir.
1. Genişletin - eski mantığı bozmadan yeni alanlar/indeksler (geçersiz) ekleyin.
2. Migrate - çift yazma/okuma, geri doldurma, idempotency ile arka plan işleri.
3. Sözleşme - %100 çıkış ve sürekli pencereden sonra eski alanları/kodu silin.
5) SLO gating ve otomatik geri alma
Her sürüm aşamasına giriş, metrikler tarafından "korunmalıdır".
Teknik SLO'lar: p95/p99 gecikme süresi, 5xx oranı, doygunluk (CPU/Bellek), hata bütçesi yanması.
İş metrikleri: Depozito/nakit çıkışı için CR, ödemelerin reddi, dolandırıcılık yüzdesi, KYC hataları.
- 5xx> 0. 5 %10 dakika - geri alma.
- P95 taban çizgisinin %20'sini ↑> - hold + analysis.
- PSP hatası> 0. 3 p.p. - geri alma + ödeme yolunu değiştirme.
6) Örnekler: Kubernetes/Dümen/Argo/NGINX
6. 1 Mavi-Yeşil (K8s Servis seçici)
yaml
Service points to "blue"; switch to green - change selector apiVersion: v1 kind: Service metadata: {name: app-svc}
spec:
selector: { app: app, version: blue }
ports: [{ port: 80, targetPort: 8080 }]
Rollback = seçiciyi'mavi'ye döndürür (atomik, yeniden birleştirme yok).
6. 2 Kanarya (Istio VirtualService веса)
yaml http:
- route:
- destination: { host: app, subset: stable } # 100 weight: 100
- destination: { host: app, subset: canary } # 0 weight: 0
Geri dönüş = ağırlık kanaryası - 0, kararlı - 100.
6. 3 Argo Rollouts - iptal
yaml kubectl argo rollouts abort app # stop and return to stableService
6. 4 Dümen - revizyona geri dönüş
bash helm history app -n prod helm rollback app 17 -n prod # revert to revision 17
6. 5 NGINX - yukarı akış ağırlığı
nginx upstream app {
server blue:8080 weight=100;
server green: 8080 weight = 0; # rollback - return 100/0
}
7) Özellik bayrakları ve kill-switch bir "paraşüt'olarak
Yüksek riskli akışlar için kill-switch (para yatırma/ödeme/bonus) - zorunlu.
Yapışkanlık: Kullanıcılara bir karma anahtarı aracılığıyla bir "değişken" atamak - öngörülebilir karşılaştırmalar.
Fail-safe: bayrak sunucusu kullanılamıyorsa, güvenli varsayılan.
ts const enabled = flags. bool("new_cashout_flow", false);
if (! enabled) return classicFlow () ;//instant rollback - disable the return newFlow () flag;
8) API ve Etkinlik Sözleşmeleri: "Geri Dönüşü Nasıl Kırmayın"
Sürüm sözleşmeleri (OpenAPI/gRPC/Avro): yeni sürüm alanlar ekler, eskilerin anlambilimini değiştirmez.
Event-versioning: 'type = v2', tüketiciler bilinmeyen alanları görmezden gelmelidir.
Outbox + Idempotency: Olayın tekrarlanması güvenlidir, tüketici idempotenttir.
9) Ofset İşlemler (Saga)
Devletin "sert" geri dönüşü olmadığında (para kaldı, mektup gönderildi), tazminat kullanın:- Posted write-off - compensation: return, reversal, correction record.
- Başarıdan önce telafi edici işlemler ve geri çekme dergisine kayıt.
- Her işlem için idempotent anahtarlar.
json
{
"sagaId": "b7d2...",
"action": "withdraw. execute",
"idempotencyKey": "user123:withdraw:7845",
"compensation": "withdraw. refund"
}
10) Yapılandırmalar ve Sırlar: Sürüm Olarak Geri Alma
Yapılandırmaları sürüm artifaktları olarak saklayın (semver/commit-sha).
Rollback = yapılandırmayı önceki sürüme geri döndürün (GitOps revert), "ellerinizle düzeltin'değil.
Sırlar - depolama yoluyla (KMS/Vault); Döndürme ve sürüm oluşturma sürümde yer alır.
11) Rollback runbook (minimum)
1. Duraklama ilerlemesi (kanarya/rollouts).
2. Trafik dönüşü (ağırlıklar/seçici).
3. SLO/iş metrikleri kontrolleri taban çizgisine geri döndü.
4. Arka plan işlerinin stabilizasyonu (gerekirse göçleri durdurun/geri doldurun).
5. Olay ve post-factum: artifacts (logs/trails/metrics), hipotezler, düzeltme.
6. Temizlik: bayrakları kapatın, sol kodu kaldırın, iş programlarını iade edin.
12) Otomatik Koruma politikaları
Görüntüler için'en son've değiştirilebilir etiketleri yasaklayın.
Giriş kontrolü: sadece imzalı eserler.
CI kapısı: SAST/SCA/Policy-checks promosyon için yeşil olmalıdır.
Pencereleri dondurun: Risk dönemlerinde serbest bırakma/ağırlık yok> % X.
13) Sık anti-desenler
Uyumluluk yerine DDL tabanını "geri alıyoruz" - uzun kilitler/aksama süreleri.
Idempotency ve arka dolgu olmadan anında kafa kafaya geçişler.
"Teslimat've" dahil etme'yi karıştırmak - trafiği hızlı bir şekilde geri döndürmenin bir yolu yoktur.
Denetim olmadan üretim konfigürasyonunda manuel düzenlemeler.
Ödemelerde/çıkışlarda kill-switch yok.
Eseri prod için yeniden inşa edin ('bir kez inşa et - çok koş "ihlali).
Çalışmayan tek bir geri alma düğmesi/çalışma kitabı yoktur.
14) Uygulama kontrol listesi (0-45 gün)
0-10 gün
Önemli hizmetlere Mavi-Yeşil/Kanarya ekleyin.
'En son' seçeneğini reddedin, görüntü imzalamayı ve Helm/Argo geçmişini etkinleştirin.
SLO kartlarını bağlayın (gecikme, 5xx, önemli iş sinyalleri).
11-25 gün
Risk akışı için kill-switch uygulayın.
Veritabanı geçişlerini expand-migrate-contract + idempotency değerine dönüştürün.
SLO (Argo AnalysisTemplate/alerts) tarafından otomatik durdurma/geri alma ekleyin.
26-45 gün
Yapılandırmaları (GitOps) sürüm oluşturma, MR-revert yoluyla geri alma.
Runbook'u "oyun günü" için çalıştırın (olay ve geri alma simülasyonu).
Aşağı doğru geri dönüşün mümkün olmadığı durumlarda Saga telafisini girin.
15) Olgunluk metrikleri
Geri alma MTTR: hedef <5 dk.
Geri alma = rota/bayrak anahtarı (yeniden oluşturma yok)> %90 olduğu sürümlerin yüzdesi.
Genişletme-taşıma-sözleşme geçişlerinin payı> %90.
Kill-switch servislerini bayraklarla kaplamak> %95.
Uyumsuz şemalar/sözleşmeler nedeniyle meydana gelen olay sayısı - 0.
16) Uygulamalar: mini şablonlar
Argo AnaliziTemplate 5xx Stop
yaml apiVersion: argoproj. io/v1alpha1 kind: AnalysisTemplate metadata: { name: guard-5xx }
spec:
metrics:
- name: http_5xx_rate interval: 1m successCondition: result < 0. 005 provider:
prometheus:
address: http://prometheus. monitoring:9090 query:
sum(rate(http_requests_total{app="app",status=~"5.."}[5m])) /
sum(rate(http_requests_total{app="app"}[5m]))
Kubernetes: Dağıtımın hızlı geri dönüşü
bash kubectl rollout undo deploy/app -n prod
Dümen: Atomik sürüm
bash helm upgrade --install app chart/ \
--atomic \
--timeout 5m \
--set image. tag=v1. 9. 3
NGINX: Kanarya Turna
nginx map $cookie_canary $weight {
default 0;
"~ on" 10; # enable 10% by cookie
}
17) Sonuç
Güvenilir geri dönüş bir "yangın düğmesi'değil, mimarinin bir özelliğidir: değişmez eserler, teslimat ve dahil etme ayrımı, uyumlu veri şeması, özellik bayrakları ve SLO geçidi. Build, atomik sürümleri yayınlar, çalışma kitabını prova eder ve güvenlik kapılarını otomatikleştirir - ve herhangi bir sürüm, iş ve kullanıcılar için acı çekmeden dakikalar içinde geri dönüşümlü olacaktır.