Rollback ռազմավարություն և ատոմային ֆորումներ
Rollback ռազմավարություն և ատոմային ֆորումներ
1) Ինչո՞ ւ պետք է արագ արձագանքենք
Նույնիսկ շատ փորձարկման ծածկույթի դեպքում անցումը չի երաշխավորում, որ անհասանելի լինի։ Rollback-ը համակարգի կառավարվող վերադարձն է նախորդ կայուն վիճակին SLO/բիզնես մետրիկ կամ ռուսական ազդանշանի վրա։ Նպատակները
Կրճատել MTTR-ը մինչև րոպե։
Սահմանափակել պարտության շառավիղը (առնվազն տուժած օգտագործողներ/գործարքներ)։
Պահպանել տվյալների ամբողջականությունը և ինտեգրման համատեղելիությունը։
Բանալին այն է, որ օրինագծեր կառուցեք այնպես, որ արձագանքը լինի ոչ թե մինի նախագիծ։
2) «Ատոմային ֆոսֆորի» հասկացությունը
Ատոմային թողարկումը, երբ նոր տարբերակը/վարքագիծը կարելի է կատարել (և վերացնել) մեկ ատոմային վիրահատությամբ առանց երկար կողմնակի էֆեկտների։
Ատոմային բաղադրիչները
Իմպուտաբային արտեֆակտը (ստորագրված պատկեր/փաթեթ)։
Տարբերակված ալգորիթմները (գովազդային տարբերակներ, ոչ թե ձեռքով)։
«Առաքման» հատվածը «ներառումից» (միկրոկլորտիզացիա/դրոշներ)։
Տվյալների համատեղելի սխեման (երկու տարբերակները կարող են միաժամանակ ապրել)։
Runbook արձագանքը 'մեկ հասկանալի քայլ (ընտրության/քաշի/դրոշի փոփոխությունը) + ստուգում։
3) Ռոլբեկ մեխանիզմների Բուլգարը
3. 1 Ստանդարտ մակարդակ (ամենաարագ)
Blue-Green 'տեղափոխել ընտրողը/target group կայուն տարբերակը։
Canary 'իջեցնել քաշը մինչև 0 տոկոսը և սառեցնել առաջընթացը։
Gateway/NGINX/WindowMesh: վերադարձնել նախկին քաշը/երթուղիները։
3. 2 Փոխակրիչ մակարդակ
Helm/Argo Rollouts: «abert/rollback» -ը նախորդ ստուգմանը։
GitOps: Revance MR/commit մանիֆեստում (վերահսկիչը կդարձնի մնացած)։
3. 3 Ծրագիր/ֆիչի
Feature-flags/kill-switch: անմիջապես անջատել ռիսկային ճանապարհը։
Toggle Group 'վերադառնալ նախկին ռուսական-դիպուկահարին։
3. 4 Տվյալներ
Roll-forward-ը (նախընտրելի) + համատեղելիությունը։
Point-in-time recovery (PITR) և bakaps դժբախտ պատահարների համար։
Փոխհատուցում (Saga) և idempotency շրջադարձային գործողությունների համար։
4) Pattern «expand www.migrate ww.ract» (BD)
Որպեսզի բռնելը ապահով լինի, տվյալների սխեման պետք է թույլ տա, որ հին և նոր տարբերակները ապրեն։
1. Expand - ավելացնել նոր դաշտեր/ինդեքսներ (nullable), առանց կոտրելու հին տրամաբանությունը։
2. Migrate-ը կրկնակի ձայնագրություն/կարդալ, bek-fill, ֆոնային job 'a idempotency-ից։
3. Euract-ը հին դաշտերը/կոդը հանելուց հետո 100 տոկոսով և դիմացկուն պատուհանից հետո։
5) SLO-geiting-ը և Auto-rapat-ը
Յուրաքանչյուր քայլում գրանցումը պետք է «պաշտպանվի» մետրերով։
Տեխնոլոգիական SLO: p95/p99 լատենտ, 5xx-rate, saturation (CPU/Memory), error-budget burn։
Բիզնես մետրիկները ՝ CR դեպոզիտ/կասաուտ, մրցույթների մերժումը, ֆրոդի տոկոսը, KYC սխալները։
Avto-stop (տրամաբանության օրինակ)
5xx > 0. 5% 10 րոպե rollback։
p95 մգ/20 տոկոսը www.hold + վերլուծություն։
Սխալ PSA> 0-ում։ 3 p.p. www.rollback + փոխանցման վճարումները։
6) Օրինակներ ՝ 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 }]
Rapat = վերադարձնել ընտրողը «blue» (ատոմային, առանց փոխանակման)։
6. 2 Canary (Istio VirtualService веса)
yaml http:
- route:
- destination: { host: app, subset: stable } # 100 weight: 100
- destination: { host: app, subset: canary } # 0 weight: 0
Արձագանք = weight canary 240, stable 24100։
6. 3 Argo Rollouts — abort
yaml kubectl argo rollouts abort app # stop and return to stableService
6. 4 Helm - rollback
bash helm history app -n prod helm rollback app 17 -n prod # revert to revision 17
6. 5 NGINX - upstream քաշը
nginx upstream app {
server blue:8080 weight=100;
server green: 8080 weight = 0; # rollback - return 100/0
}
7) Feature-flags և kill-switch որպես «պարաշյուտ»
Kill-switch-ը բարձր ռիսկային հոսքերի համար (ավանդներ/վճարումներ/բոնուսներ) պարտադիր է։
Stickiness: «տարբերակի» նշանակումը հեշ-բանալիների միջոցով կանխատեսելի համեմատություններ են։
Fail-safe-ը 'դրոշների սերվերի անհասանելիության դեպքում անվտանգ դեֆոլտ է։
Օրինակ (կեղծ կոդը)
ts const enabled = flags. bool("new_cashout_flow", false);
if (! enabled) return classicFlow () ;//instant rollback - disable the return newFlow () flag;
8) API-ի և իրադարձությունների պայմանագրերը. Ինչպես ոչ թե «կոտրել»
Տարբերեք պայմանագրերը (OpenAPI/gRPC/Avro), նոր տարբերակը ավելացնում է դաշտերը, չի փոխում հին սեմանտիկան։
Event-versioning: «type = v2», սպառողները պարտավոր են անտեսել անհայտ դաշտերը։
Medibox + Idempotency: Իրադարձության ցանկացած խոհարար անվտանգ է, սպառողը idempotenten է։
9) Փոխհատուցող գործարքները (Saga)
Երբ «կոշտ» վիճակը չկա (փողը դուրս եկավ, նամակը ուղարկվել է), օգտագործեք comporation։
Նրանք վերցրեցին ապամոնտաժումը 'փոխհատուցումը' գրանցումը, ուղղելով ձայնագրությունը։
Գրառումը փոխհատուցող վիրահատությունների և վերափոխումների ամսագրում մինչև հաջողությունը։
Idempotent բանալիները յուրաքանչյուր վիրահատության համար։
Հաղորդագրությունների ձևը (պարզեցված)
json
{
"sagaId": "b7d2...",
"action": "withdraw. execute",
"idempotencyKey": "user123:withdraw:7845",
"compensation": "withdraw. refund"
}
10) Դելիգները և գաղտնիքները 'արձագանքել որպես տարբերակ
Պահեք դելեգները որպես արտեֆակտներ տարբերակներով (semver/commit-sha)։
Ռեպատ = վերադարձնել դելեգը նախորդ տարբերակին (GitOps revics), ոչ թե «ձեռքերը շտկելու»։
Գաղտնիքները պահեստի միջոցով (KFC/Vance); անջատումը և տարբերակումը ներառված են թողարկման մեջ։
11) Runbook արձագանքը (նվազագույն)
1. Առաջընթացի դադար (canary/rollouts)։
2. Ստանիսլավ (քաշը/սելեկտորը)։
3. SLO/բիզնես մետրիկը վերադարձավ ռուսական գծին։
4. Ֆոնային job 's-ի կայունացումը (կանգնեցնել ռուսական/back-fill անհրաժեշտության դեպքում)։
5. Դեպքը և փոստի ֆակտումը 'արտեֆակտներ (լոգներ/թրեյսներ/մետրիկներ), հիպոթեզներ, ուղղումներ։
6. Մաքրում 'փակել դրոշները, հեռացնել մնացած կոդը, վերադարձնել job' s գրաֆիկները։
12) Ավտոմատ պաշտպանության քաղաքականություն
Արգելքը 'latest' և մուտաբային թեստեր պատկերների համար։
Admission-վերահսկումը 'միայն ստորագրված արտեֆակտներ։
CI-դարպասը ՝ SFC/SCA/Policy-winks պետք է կանաչ լինի առաջխաղացման համար։
Freeze պատուհանը 'ածխաջրածինների/քաշի արգելքը> X տոկոսը ռիսկային ժամանակահատվածներում։
13) Հաճախակի հակատիպեր
«Նետում» DDL-ներքև շարժիչների փոխարեն 'երկար արգելափակումներ/պարզ։
Ակնթարթային կոմպոզիցիաները «lo» -ում առանց idempotency և back-fill։
«Առաքման» և «ներառման» խառնուրդը հնարավոր չէ արագ վերադարձնել։
Ձեռքի ձեռքերը Պրդ-ճակատի մեջ առանց պայմանագրերի։
Kill-switch-ի բացակայությունը ֆորումների/եզրակացությունների վրա։
Արտեֆակտը տեղափոխելու համար (խախտումը «build once - run many»)։
Ոչ մի արձագանքի կոճակ/չաշխատված runbook։
14) Ներդրման թուղթ (0-45 օր)
0-10 օր
Միացրեք Blue-Green/Canary-ը հիմնական ծառայություններում։
Արգելել «latest», ներառել պատկերների ստորագրությունը և Helm/Argo պատմությունը։
Միացրեք SLO տախտակները (latency, 5xx, հիմնական բիզնես ազդանշանները)։
11-25 օր
Իրականացնել kill-switch ռիսկի ֆլոուի համար։
Թարգմանել BD կոմպոզիցիաները expand-migrate-medract + idempotency-ում։
Ավելացնել auto-stop/rollback SLO (Argo AnalysTemplate/alerts)։
26-45 օր
Տարբերակել դելիգները (GitOps), արձագանքել MR-revics-ի միջոցով։
«Game-day» -ի վրա runbook անել (կոմպոզիցիայի սիմուլյացիա և արձագանք)։
Ներդրեք Saga-փոխհատուցումը այնտեղ, որտեղ «ներքև» անհնար է։
15) Հասունության մետրերը
MTTR արձագանքը 'նպատակը <5 ռուբլիա
ածխաջրածինների% -ը, որտեղ փոխազդում է = անցումը 108/դրոշի (առանց փոխանակման)> 90 տոկոսը։
Միգրացիաների մասնաբաժինը expand-migrate-medract> 90 տոկոսն է։
Kill-switch ծառայությունների ծածկումը դրոշներով> 95 տոկոսը։
Միգրանտների քանակը անհամատեղելի սխեմաների/www.d.0 պատճառով։
16) Ծրագրեր ՝ մինի ձևանմուշներ
Argo AnalysTemplate: stop 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: Deploy.ru արագ արձագանքը
bash kubectl rollout undo deploy/app -n prod
Helm: Ատոմային ռելիզը
bash helm upgrade --install app chart/ \
--atomic \
--timeout 5m \
--set image. tag=v1. 9. 3
NGINX: «կռուն» կանարյան համար
nginx map $cookie_canary $weight {
default 0;
"~ on" 10; # enable 10% by cookie
}
17) Եզրակացություն
Վստահելի արձագանքը ոչ թե «հրշեջ կոճակ» է, այլ ճարտարապետության հատկությունը 'իմպուտաբային արտեֆակտներ, առաքման և ներառման բաժանումը, տվյալների համատեղելի սխեման, ֆիչի դրոշը և SLO-gatting-ը։ Կառուցեք ածխաջրածիններ ատոմային, փորձարկեք runbook-ը և ավտոմատիզացրեք պաշտպանիչ դարպասը, և ցանկացած թողարկումը կդառնա մեկ րոպեի ընթացքում, առանց ցավի բիզնեսի և օգտագործողների համար։