Rollback strategiyasi va atom relizlari
Rollback strategiyalari va atom relizlari
1) Nega tezkor qaytarish kerak
Hatto mukammal test qoplamasida ham prod xatosizlikni kafolatlamaydi. Rollback - bu SLO/biznes-metrik yoki hodisa signaliga ko’ra tizimning oldingi barqaror holatiga boshqariladigan qaytishi. Maqsadlar:- MTTRni daqiqaga qisqartirish.
- Shikastlanish radiusini cheklash (minimal ta’sir ko’rsatgan foydalanuvchilar/tranzaksiyalar).
- Ma’lumotlarning yaxlitligini va kontraktlarning muvofiqligini saqlab qolish.
Kalit: relizlarni mini-loyiha emas, balki arzimas harakat sifatida tuzish.
2) «Atom relizi» tushunchasi
Atom relizi - yangi versiya/xulq-atvorni qo’shishni uzoq muddatli nojo’ya ta’sirlarsiz bitta atom operatsiyasi bilan bajarish (va bekor qilish) mumkin bo’lganda.
Atomarlik komponentlari:- Immunutable artefakt (imzolangan rasm/paket).
- Versionirovannыe konfigi (promoushen versiya, emas ruchnыe pravki).
- Yetkazib berish bo’limi «qo’shishdan» (marshrutlash/bayroqlar).
- Mos maʼlumotlar sxemasi (ikkala versiya bir vaqtning oʻzida yashashi mumkin).
- Runbook orqaga qaytish: bitta tushunarli qadam (selektor/ogʻirlik/bayroqni oʻzgartirish) + tekshirish.
3) Rollbek-mexanizmlar inventari
3. 1 Trafik darajasi (eng tezkor)
Blue-Green: selektor/target guruhini barqaror versiyaga o’tkazish.
Canary: vaznni 0% ga tushiring va progressni muzlating.
Gateway/NGINX/Service Mesh: oldingi vazn/marshrutlarni qaytarish.
3. 2 Konveyer darajasi
Helm/Argo Rollouts:’abort/rollback’oldingi revizga.
GitOps: revert MR/commit manifest-repozitoriyada (boshqaruvchi qolganini bajaradi).
3. 3 Ilova/fichlar
Feature-flags/kill-switch: Xavfli yoʻlni bir zumda oʻchirish.
Tugmalar: oldingi snapshotga qaytish.
3. 4 Ma’lumotlar
Roll-forward migratsiyasi (afzal) + moslik.
Point-in-time recovery (PITR) va avariyalar uchun bekaplar.
Qaytariladigan harakatlar uchun kompensatsiya (Saga) va idempotency.
4) Pattern «expand → migrate → contract» (BD)
Orqaga qaytish xavfsiz bo’lishi uchun ma’lumotlar sxemasi eski va yangi versiyalarni yashashga imkon berishi kerak.
1. Expand - eski mantiqni buzmasdan yangi maydonlarni/indekslarni (nullable) qoʻshish.
2. Migrate - ikki tomonlama yozuv/o’qish, bek-fill, idempotency bilan fon job’lari.
3. Contract - Eski maydonlarni/kodni 100% chiqilgandan keyin olib tashlash.
5) SLO-geyting va avto-qaytish
Relizning har bir bosqichiga kirish metrlar bilan «qo’riqlanishi» kerak.
Texnik SLO: p95/p99 latentlik, 5xx-rate, saturation (CPU/Memory), error-budget burn.
Biznes-metrika: depozit/kassaut uchun CR, to’lovlarni rad etish, foyda foizi, KYC xatolari.
- 5xx > 0. 5% 10 daqiqa → rollback.
- p95 ↑> 20% bazaviy → hold + tahlil.
- PSP> 0 da xato roʻy berdi. 3 p.p. → rollback + to’lov yo’nalishini o’zgartirish.
6) Misollar: 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 }]
Orqaga qaytish = selektorni’blue’ga qaytarish.
6. 2 Canary (Istio VirtualService веса)
yaml http:
- route:
- destination: { host: app, subset: stable } # 100 weight: 100
- destination: { host: app, subset: canary } # 0 weight: 0
Orqaga qaytish = weight canary → 0, stable → 100.
6. 3 Argo Rollouts — abort
yaml kubectl argo rollouts abort app # stop and return to stableService
6. 4 Helm - taftish uchun rollback
bash helm history app -n prod helm rollback app 17 -n prod # revert to revision 17
6. 5 NGINX - upstream vazni
nginx upstream app {
server blue:8080 weight=100;
server green: 8080 weight = 0; # rollback - return 100/0
}
7) Feature-flags va kill-switch «parashyut» sifatida
Yuqori tavakkalchilik oqimlari uchun Kill-switch (depozitlar/to’lovlar/bonuslar) - majburiydir.
Stickiness: xesh-kalit orqali foydalanuvchilarga «variant» ni tayinlash - oldindan aytib bo’ladigan taqqoslashlar.
Fail-safe: bayroqlarning serveri mavjud boʻlmasa - xavfsiz defolt.
ts const enabled = flags. bool("new_cashout_flow", false);
if (! enabled) return classicFlow () ;//instant rollback - disable the return newFlow () flag;
8) API va voqealar kontraktlari: qanday qilib «qaytarishni sindirmaslik»
Shartnomalarni versiya qiling (OpenAPI/gRPC/Yevro): yangi versiya maydonlarni qoʻshadi, eskisining semantikasini oʻzgartirmaydi.
Event-versioning:’type = v2’, isteʼmolchilar nomaʼlum maydonlarni eʼtiborsiz qoldirishlari shart.
Outbox + Idempotency: har qanday takrorlash xavfsiz, isteʼmolchi idempotentdir.
9) Kompensatsion tranzaksiyalar (Saga)
Agar «qattiq» qaytarish boʻlmasa (pul ketdi, xat yuborildi), compensation dan foydalaning:- Hisobdan chiqardik - kompensatsiya: qaytarish, stornlash, tuzatish yozuvi.
- Kompensatsiya operatsiyalari va muvaffaqiyatli retrajlar jurnaliga yozish.
- Har bir operatsiya uchun idempotent kalitlar.
json
{
"sagaId": "b7d2...",
"action": "withdraw. execute",
"idempotencyKey": "user123:withdraw:7845",
"compensation": "withdraw. refund"
}
10) Konfigi va sirlari: versiya sifatida orqaga qaytish
Konfiguralarni versiyali artefaktlar sifatida saqlang (semver/commit-sha).
Orqaga qaytish = oldingi versiyaga qaytish (GitOps revert), «qoʻllar bilan tuzatish» emas.
Sirlar - ombor orqali (KMS/Vault); rotatsiya va versiyalash chiqarilishga kiritilgan.
11) Qaytarish Runbook (minimal)
1. Progression pauza (canary/rollouts).
2. Trafikni qaytarish (og’irlik/selektor).
3. SLO/biznes metrik tekshiruvi asosiy chiziqqa qaytdi.
4. Fon job’larini barqarorlashtirish (zarurat bo’lganda migratsiyani/bek-fillni to’xtatish).
5. Hodisa va post-faktum: artefaktlar (loglar/treyslar/metriklar), gipotezalar, tuzatishlar.
6. Tozalash: bayroqlarni yopish, qolgan kodni olib tashlash, jadvalni qaytarish.
12) Avtomatik himoya siyosati
Tasvirlar uchun’latest’va mutabel teglarni taqiqlash.
Admission-control: faqat imzolangan artefaktlar.
CI-darvoza: SAST/SCA/Policy-checks reklama uchun yashil bo’lishi kerak.
Freze oynalar: xavf davrlarida reliz/ogʻirlikni taqiqlash> X%.
13) Tez-tez anti-patternlar
Mos kelish o’rniga DDL-pastga «haydash» - uzoq blokirovka/oddiy.
Idempotency va backfillsiz «peshonaga» tezkor migratsiyalar.
«Yetkazib berish» va «qoʻshish» ni aralashtirish - trafikni tezda qaytarib boʻlmaydi.
Auditsiz prod-konfigidagi qo’lda tuzatishlar.
To’lovlar/xulosalarda kill-switch yo’qligi.
Prod uchun artefaktni qayta yig’ish («build once - run many» buzilishi).
Yagona qaytarish tugmasi/tugallanmagan runbook mavjud emas.
14) Joriy etish chek-varaqasi (0-45 kun)
0-10 kun
Asosiy xizmatlarda Blue-Green/Canary dasturini yoqish.
’latest’ ni taqiqlash, rasmlar imzosi va Helm/Argo tarixini kiritish.
SLO taxtalarini ulash (latency, 5xx, asosiy biznes signallari).
11-25 kun
Xavf-flow uchun kill-switchni amalga oshirish.
DB migratsiyasini expand-migrate-contract + idempotency ga oʻtkazish.
SLO (Argo AnalysisTemplate/alertlar) boʻyicha avto-stop/rollback qoʻshish.
26-45 kun
Config (GitOps) ni MR-revert orqali qaytarish.
Runbook’game-day’da (hodisa va orqaga qaytish simulyatsiyasi) aylantiriladi.
Saga kompensatsiyalarini «pastga» qaytarib boʻlmaydigan joylarga kiritish.
15) Etuklik metrikasi
MTTR orqaga qaytish: maqsad <5 min.
% relizlar, bu yerda qaytish = marshrut/bayroqni almashtirish (qayta yigʻmasdan)> 90%.
expand-migrate-contract sxemasi bo’yicha migratsiya ulushi> 90%.
Kill-switch xizmatlarini bayroqlar bilan qoplash> 95%.
Nomuvofiq sxemalar/kontraktlar tufayli sodir bo’lgan hodisalar soni → 0.
16) Ilovalar: mini-shablonlar
Argo AnalysisTemplate: 5xx
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 tezkor orqaga qaytish
bash kubectl rollout undo deploy/app -n prod
Helm: atom relizi
bash helm upgrade --install app chart/ \
--atomic \
--timeout 5m \
--set image. tag=v1. 9. 3
NGINX: kanareykalar uchun «kran»
nginx map $cookie_canary $weight {
default 0;
"~ on" 10; # enable 10% by cookie
}
17) Xulosa
Ishonchli orqaga qaytish - bu «o’t o’chirish tugmasi» emas, balki arxitektura xususiyati: immutable artefaktlar, etkazib berish va qo’shish taqsimoti, ma’lumotlarning mos sxemasi, fich-bayroqlar va SLO-geyting. Relizlarni atom bilan tuzing, runbook-ni mashq qiling va himoya darvozalarini avtomatlashtiring - va har qanday reliz biznes va foydalanuvchilar uchun og’riqsiz daqiqalarda qaytariladi.