GH GambleHub

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.

💡 Kural: Uygulama sürümü hiçbir zaman anlık taşıma işlemine bağlı değildir. Herhangi bir işlem güvenli bir şekilde durdurulabilir ve yeniden başlatılabilir.

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ı.

Otomatik durdurma (mantık örneği):
  • 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.

Örnek (sözde kod):
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.
Mesaj şablonu (basitleştirilmiş):
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.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.