Rollback strategiyaları və atom buraxılışları
Rollback strategiyaları və atom buraxılışları
1) Niyə sürətli geri dönüş lazımdır
Mükəmməl test örtüyü ilə belə, prod səhvsizliyə zəmanət vermir. Rollback SLO/biznes metrik və ya hadisə siqnalı ilə sistemin əvvəlki sabit vəziyyətə idarə olunan dönüşüdür. Məqsədlər:- MTTR dəqiqələrə qədər qısaldır.
- Məhdud radiusu məhdudlaşdırın (minimum təsirlənmiş istifadəçilər/əməliyyatlar).
- Məlumatların bütövlüyünü və müqavilələrin uyğunluğunu saxlayın.
Açar: relizləri elə qurun ki, geri çəkilmə kiçik bir layihə deyil, əhəmiyyətsiz bir hərəkət olsun.
2) «atom relizi» anlayışı
Atom Release - Yeni versiya/davranış aktivləşdirilməsi uzun yan təsirləri olmadan bir atom əməliyyatı ilə həyata keçirilə bilər (və ləğv).
Atom komponentləri:- Immutable artefakt (imzalanmış şəkil/paket).
- Version konfiqlər (əl düzəlişləri deyil, promosyon versiyaları).
- «Çatdırılma» -dan «qoşulma» (marşrutlaşdırma/bayraqlar) ayrılması.
- Uyğun verilənlər sxemi (hər iki versiya eyni vaxtda yaşaya bilər).
- Runbook geri: bir başa düşülən addım (selektor/çəki/bayraq dəyişdirilməsi) + yoxlama.
3) Rollbek mexanizmlərinin inventarı
3. 1 Trafik səviyyəsi (ən sürətli)
Blue-Green: selektor/hədəf qrupu sabit versiyası keçid.
Canary: 0% -ə qədər çəkini aşağı salın və irəliləyişi dondurun.
Gateway/NGINX/Service Mesh: əvvəlki çəki/marşrutları geri.
3. 2 Konveyer səviyyəsi
Helm/Argo Rollouts: 'abort/rollback' əvvəlki reviziyaya.
GitOps: manifest-anbarda revert MR/commit (nəzarətçi gerisini edəcək).
3. 3 Əlavə/Fix
Feature-flags/kill-switch: dərhal riskli yolu söndürmək.
Toggle konfiqurasiya: əvvəlki snapshot geri.
3. 4 Məlumatlar
Roll-forward miqrasiya (üstünlük) + uyğunluq.
Point-in-time recovery (PITR) və qəzalar üçün backup.
Geri qaytarıla bilən hərəkətlər üçün kompensasiya (Saga) və idempotency.
4) Pattern «expand → migrate → contract» (BD)
Geri dönüşün təhlükəsiz olması üçün verilənlər sxemi köhnə və yeni versiyaların birgə yaşamasına imkan verməlidir.
1. Expand - köhnə məntiqi qırmadan yeni sahələr/indekslər (nullable) əlavə edin.
2. Migrate - idempotency ilə ikiqat qeyd/oxu, geri doldurma, fon job's.
3. Contract - 100% və davamlı pəncərə çıxdıqdan sonra köhnə sahələri/kodu silmək.
5) SLO-geytinq və avtomatik geri dönüş
Buraxılışın hər mərhələsinə giriş metrlərlə «qorunmalıdır».
Texniki SLO: p95/p99 latentlik, 5xx-rate, saturation (CPU/Memory), error-budget burn.
Business Metrics: CR depozit/kassaut, ödəniş rədd, freed faiz, KYC səhvləri.
- 5xx > 0. 5% 10 dəqiqə → rollback.
- p95 ↑> 20% -dən baza → hold + analizi.
- PSP> 0 səhvidir. 3 pp → rollback + ödəniş marşrutu keçid.
6) Nümunələr: Kubernetes/Helm/Argo/NGINX
6. 1 Blue-Green (K8s Service selector)
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 }]
Geri dönüş = selektoru 'blue' (atomik olaraq, yenidən yığılmadan) qaytarmaq.
6. 2 Canary (Istio VirtualService веса)
yaml http:
- route:
- destination: { host: app, subset: stable } # 100 weight: 100
- destination: { host: app, subset: canary } # 0 weight: 0
Geri çəkilmə = weight canary → 0, stable → 100.
6. 3 Argo Rollouts — abort
yaml kubectl argo rollouts abort app # stop and return to stableService
6. 4 Helm - reviziya üçün rollback
bash helm history app -n prod helm rollback app 17 -n prod # revert to revision 17
6. 5 NGINX - upstream çəki
nginx upstream app {
server blue:8080 weight=100;
server green: 8080 weight = 0; # rollback - return 100/0
}
7) Feature-flags və kill-switch kimi «paraşüt»
Yüksək riskli axınlar üçün Kill-switch (depozitlər/ödənişlər/bonuslar) məcburidir.
Stickiness: Hash açarı vasitəsilə istifadəçilərə «variant» təyinatı - proqnozlaşdırıla bilən müqayisələr.
Fail-safe: bayraq serveri əlçatmazsa - təhlükəsiz defolt.
ts const enabled = flags. bool("new_cashout_flow", false);
if (! enabled) return classicFlow () ;//instant rollback - disable the return newFlow () flag;
8) API müqavilələri və hadisələr: necə «geri dönüş qırmaq»
Müqavilələri versiya edin (OpenAPI/gRPC/Avro): yeni versiya sahələr əlavə edir, köhnə semantikanı dəyişdirmir.
Event-versioning: 'type = v2', istehlakçılar naməlum sahələrə məhəl qoymamalıdır.
Outbox + Idempotency: hadisənin hər hansı bir təkrarı təhlükəsizdir, istehlakçı idempotentdir.
9) Kompensasiya əməliyyatları (Saga)
«Sərt» status geri qaytarılması olmadıqda (pul getdi, məktub göndərildi), compensation istifadə edin:- Biz silindi - kompensasiya: geri qaytarma, storner, düzəliş yazısı.
- Kompensasiya əməliyyatları və retraj jurnalına müvəffəqiyyətdən əvvəl qeyd.
- Hər əməliyyat üçün idempotent açarları.
json
{
"sagaId": "b7d2...",
"action": "withdraw. execute",
"idempotencyKey": "user123:withdraw:7845",
"compensation": "withdraw. refund"
}
10) Konfigi və sirləri: versiyası kimi geri
Konfiqləri versiyaları (semver/commit-sha) olan artefaktlar kimi saxlayın.
Geri dönüş = əvvəlki versiyaya geri qaytarmaq (GitOps revert), «əl ilə düzəltmək» deyil.
Secrets - saxlama vasitəsilə (KMS/Vault); rotasiya və versiyalaşdırma buraxılışa daxil edilmişdir.
11) Runbook geri (minimum)
1. Proqres fasiləsi (canary/rollouts).
2. Trafikin qaytarılması (çəki/seçici).
3. SLO/biznes metrik yoxlama əsas xəttə qayıtdı.
4. Arxa plan job 'oların sabitləşdirilməsi (miqrasiyanı dayandırmaq/lazım olduqda geri doldurmaq).
5. Hadisə və post-faktum: artefaktlar (loqlar/treys/metriklər), fərziyyələr, düzəliş.
6. Təmizləmə: bayraqları bağlayın, qalan kodu silin, cədvəlləri geri qaytarın.
12) Avtomatik müdafiə siyasəti
Şəkillər üçün 'latest' və mutabel etiketlərin qadağan edilməsi.
Admission-Control: yalnız imzalanmış artefaktlar.
CI-qapı: SAST/SCA/Policy-checks promosyon üçün yaşıl olmalıdır.
Freeze pəncərələr: buraxılışlar/çəki qadağan> Risk dövrlərində X%.
13) Tez-tez anti-nümunələr
Uyğunluq əvəzinə DDL-aşağı bazasını «yuvarlayın» - uzun bloklama/sadə.
idempotency və geri doldurma olmadan «alın» ani miqrasiya.
«Çatdırılma» və «qoşulma» qarışdırılması - trafiki tez qaytarmaq mümkün deyil.
Audit olmadan prod-konfiqada əl ilə düzəlişlər.
Ödənişlərdə/hesablarda kill-switch yoxdur.
Prod üçün artefaktın yenidən toplanması («build once - run many» pozuntusu).
Tək geri dönüş düyməsi/işlənməmiş runbook yoxdur.
14) Giriş çek siyahısı (0-45 gün)
0-10 gün
Əsas xidmətlərdə Blue-Green/Canary daxil edin.
'latest' qadağan, image imza və Helm/Argo tarixi daxil.
SLO lövhələrini bağlayın (latency, 5xx, əsas iş siqnalları).
11-25 gün
Risk flow üçün kill-switch həyata.
Miqrasiyaları expand-migrate-contract + idempotency-ə köçürün.
SLO (Argo AnalysisTemplate/alerts) avto-stop/rollback əlavə edin.
26-45 gün
Config versiyası (GitOps), MR-revert vasitəsilə geri.
Runbook-u «game-day» (hadisə və geri dönüşün simulyasiyası) üzərində sındırın.
«Aşağı» geri qaytarılması mümkün olmayan yerlərdə Saga kompensasiyasını daxil edin.
15) Yetkinlik metrikası
MTTR geri dönüş: hədəf <5 dəq.
% relizlər, burada geri dönüş = marşrut/bayraq keçid (yenidən yığılmadan)> 90%.
expand-migrate-contract sxemi üzrə miqrasiyaların payı> 90%.
Kill-switch xidmətlərinin bayraqlarla əhatə olunması> 95%.
Uyğunsuz sxemlər/müqavilələr səbəbindən insidentlərin sayı → 0.
16) Proqramlar: Mini şablonlar
Argo AnalysisTemplate: 5xx-də dur
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: Deployment sürətli geri dönüş
bash kubectl rollout undo deploy/app -n prod
Helm: atom azad
bash helm upgrade --install app chart/ \
--atomic \
--timeout 5m \
--set image. tag=v1. 9. 3
NGINX: Kanaryalar üçün «kran»
nginx map $cookie_canary $weight {
default 0;
"~ on" 10; # enable 10% by cookie
}
17) Nəticə
Etibarlı geri dönüş «yanğın düyməsi» deyil, memarlıq xüsusiyyətidir: immutable artefaktlar, çatdırılma və qoşulma bölgüsü, uyğun verilənlər sxemi, fich bayraqları və SLO geytinqi. Atomik buraxılışlar qurun, runbook-u məşq edin və qoruyucu qapıları avtomatlaşdırın - və hər hansı bir buraxılış iş və istifadəçilər üçün ağrı olmadan dəqiqələrdə geri qaytarıla bilər.