GH GambleHub

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.

💡 Qayda: app azad ani miqrasiya asılı deyil. Hər hansı bir əməliyyat dayandırıla və təhlükəsiz şəkildə yenidən başlaya bilər.

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.

Avto-stop (məntiq nümunəsi):
  • 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.

Nümunə (psevdo-kod):
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ı.
Mesaj şablonu (sadələşdirilmiş):
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.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.