Rollback სტრატეგია და ბირთვული გამოშვებები
Rollback სტრატეგია და ბირთვული გამოშვებები
1) რატომ არის საჭირო სწრაფი დაბრუნება
შესანიშნავი სატესტო დაფარვის დროსაც კი, production არ იძლევა უსიამოვნებას. Rollback არის სისტემის კონტროლირებადი დაბრუნება წინა სტაბილურ მდგომარეობაში SLO/ბიზნეს მეტრიკის ან ინციდენტის შესახებ. მიზნები:- შეამცირეთ MTTR წუთამდე.
- შეზღუდეთ დაზიანების სხივი (მინიმუმამდე დაზარალებული მომხმარებლები/გარიგებები).
- მონაცემთა მთლიანობის შენარჩუნება და კონტრაქტების თავსებადობა.
გასაღები: შექმნათ გამოშვებები ისე, რომ დაბრუნება იყოს ტრივიალური მოქმედება და არა მინი პროექტი.
2) „ატომური გამოშვების“ კონცეფცია
ატომური გამოშვება - როდესაც ახალი ვერსიის/ქცევის ჩართვა შეიძლება განხორციელდეს (და გაუქმდეს) ერთი ატომური ოპერაციით, გრძელი გვერდითი მოვლენების გარეშე.
ატომური კომპონენტები:- Imputable არტეფაქტი (ხელმოწერილი სურათი/პაკეტი).
- ვერსირებული კონფიგურაცია (სარეკლამო ვერსიები და არა ხელით რედაქტირება).
- „მიწოდების“ განცალკევება „ჩართვისგან“ (მარშრუტი/დროშები).
- თავსებადი მონაცემთა სქემა (ორივე ვერსიას შეუძლია ერთდროულად იცხოვროს).
- Runbook გამოტოვება: ერთი გასაგები ნაბიჯი (სელექტორის/წონის/დროშის შეცვლა) + შემოწმება.
3) როლბეკის მექანიზმების ინვენტარი
3. 1 ტრაფიკის დონე (ყველაზე სწრაფი)
Blue-Green: გადაიტანეთ სელექტორი/target ჯგუფი სტაბილურ ვერსიაზე.
Canary: შეამცირეთ წონა 0% -მდე და გაყინეთ პროგრესი.
Gateway/NGINX/Service Mesh: დაუბრუნეთ წინა წონა/მარშრუტები.
3. 2 კონვეიერის დონე
Helm/Argo Rollouts: 'abort/rollback' წინა გადასინჯვისთვის.
GitOps: revert MR/commit მანიფესტის საცავებში (მაკონტროლებელი გააკეთებს დანარჩენს).
3. 3 პროგრამა/ფიჩები
Feature-flags/kill-switch: დაუყოვნებლივ გამორთეთ სარისკო გზა.
Toggle კონფიგურაციები: დაუბრუნდით წინა ჩამორთმევის სნაიპშოტს.
3. 4 მონაცემები
Roll-forward მიგრაცია (სასურველია) + თავსებადობა.
Point-in-time ჩანაწერები (PITR) და უბედური შემთხვევები.
კომპენსაცია (საგა) და შექცევადი ქმედებებისთვის idempotence.
4) პატრონი „expand - migrate - contract“ (BD)
იმისათვის, რომ გამოტოვება უსაფრთხო იყოს, მონაცემთა სქემამ უნდა მისცეს კო-ცხოვრება ძველ და ახალ ვერსიებს.
1. Expand - დაამატეთ ახალი ველები/ინდექსები ძველი ლოგიკის გატეხვის გარეშე.
2. Migrate - ორმაგი ჩანაწერი/კითხვა, უკანა fill, fon job idempotence.
3. Contract - ძველი ველების/კოდის ამოღება 100% და შენარჩუნებული ფანჯრის შემდეგ.
5) SLO გეიტინგი და მანქანის გამოტოვება
გამოშვების თითოეულ ეტაპზე შესვლა უნდა იყოს „დაცული“ მეტრიკებით.
ტექნიკური SLO: p95/p99 ლატენტობა, 5xx-rate, saturation (CPU/Memory), error-budget burn.
ბიზნეს მეტრიკა: CR დეპოზიტზე/კასუტზე, გადახდაზე უარის თქმა, ფროიდის პროცენტი, KYC შეცდომები.
- 5xx > 0. 5% 10 წუთი და rollback.
- p95> ძირითადი hold + ანალიზის 20%.
- შეცდომა PSP> 0. 3 გვ - 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 }]
გამოტოვება = სელექტორის დაბრუნება „ცისფერში“ (ატომური, გადაკეთების გარეშე).
6. 2 Canary (Istio VirtualService веса)
yaml http:
- route:
- destination: { host: app, subset: stable } # 100 weight: 100
- destination: { host: app, subset: canary } # 0 weight: 0
გამოტოვება = შაბათ-კვირას - 0, სადგური 100.
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 მაღალი რისკის ნაკადებისთვის (ანაბრები/გადახდები/პრემია) სავალდებულოა.
Stickings: hash გასაღების საშუალებით „ვარიანტის“ მომხმარებლების დანიშვნა პროგნოზირებადი შედარებაა.
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): ახალი ვერსია ემატება ველს, არ ცვლის ძველთა სემანტიკას.
ღონისძიება: 'ტიპი = v2', მომხმარებლები ვალდებულნი არიან უგულებელყონ უცნობი ველები.
Outbox + Idempotence: ღონისძიების ნებისმიერი განმეორება უსაფრთხოა, მომხმარებელი არის idemppotented.
9) კომპენსაციის გარიგებები (საგა)
როდესაც არ არსებობს „მკაცრი“ დაბრუნება (ფული დატოვა, წერილი გაიგზავნა), გამოიყენეთ კომპენსაცია:- მათ ჩაატარეს ჩამოწერა - ანაზღაურება: ანაზღაურება, შეფერხება, კორექტირების ჩანაწერი.
- კომპენსაციის ოპერაციებისა და რეაგირების ჟურნალში ჩაწერა წარმატებამდე.
- თითოეული ოპერაციის idempotent გასაღებები.
json
{
"sagaId": "b7d2...",
"action": "withdraw. execute",
"idempotencyKey": "user123:withdraw:7845",
"compensation": "withdraw. refund"
}
10) კონფისკაციები და საიდუმლოებები: გამოტოვება, როგორც ვერსია
კონფიგურაცია შეინახეთ, როგორც არტეფაქტები ვერსიით (semver/commit-sha).
გამოტოვება = კონფიგურაციის დაბრუნება წინა ვერსიაზე (GitOps revert) და არა „ხელების გამოსწორება“.
საიდუმლოებები - შენახვის საშუალებით (KMS/Vault); როტაცია და ვერსია შედის გამოშვებაში.
11) Runbook გამოტოვება (მინიმალური)
1. პროგრესირების პაუზა (canary/rollouts).
2. ტრეფიკის დაბრუნება (წონა/სელექტორი).
3. SLO/ბიზნეს მეტრის შემოწმება დაუბრუნდა საბაზო ხაზს.
4. ფონის ჯოების სტაბილიზაცია (საჭიროების შემთხვევაში მიგრაციის/დამხმარე ფილების შეჩერება).
5. ინციდენტი და პოსტ-ფაქტორი: არტეფაქტები (ლოგოები/ტრეისი/მეტრიკა), ჰიპოთეზები, კორექტირება.
6. გაწმენდა: დროშების დახურვა, დარჩენილი კოდის ამოღება, job გრაფიკის დაბრუნება.
12) ავტომატური დაცვის პოლიტიკა
„latest“ - ის აკრძალვა და გამოსახულებების მძლავრი ჭდეები.
ადმისიის კონტროლი: მხოლოდ ხელმოწერილი არტეფაქტები.
CI კარიბჭე: SAST/SCA/Policy შემოწმებები უნდა იყოს მწვანე პოპულარიზაციისთვის.
უფასო ფანჯრები: განთავისუფლების/წონის აკრძალვა> X% რისკის პერიოდებში.
13) ხშირი ანტი-ნიმუშები
DDL ბაზის „გადატანა“ თავსებადობის ნაცვლად - გრძელი ბლოკირება/მარტივი.
მყისიერი მიგრაცია შუბლზე, იდუმალი და დამხმარე ფილის გარეშე.
„მიწოდების“ და „ჩართვის“ შერევა - ტრაფიკის სწრაფად დაბრუნების შესაძლებლობა არ არსებობს.
ხელნაკეთი კორექტირება წინასწარი კონფიგურაციის გარეშე აუდიტის გარეშე.
გადახდების/დასკვნების აკრეფის არარსებობა.
სმარტფონის არტეფაქტის გადაკეთება (დარღვევა „build once - run many“).
არ არსებობს ერთი დაბრუნების ღილაკი/არ შემუშავებული runbook.
14) განხორციელების სიის სია (0-45 დღე)
0-10 დღე
ჩართეთ Blue-Green/Canary საკვანძო სერვისებზე.
აკრძალეთ 'latest', ჩართეთ სურათების ხელმოწერა და Helm/Argo მოთხრობა.
დააკავშიროთ SLO დაფები (latency, 5xx, საკვანძო ბიზნეს სიგნალები).
11-25 დღე
განახორციელეთ kill-switch რისკის ნაკადისთვის.
BD- ს მიგრაციის გადატანა ექსპანსიურ-სიმბოლურ-კონტრაქტზე + პირადობაზე.
დაამატეთ ავტო გაჩერება/rollback თითო SLO (Argo AnalysisTemplate/alertes).
26-45 დღე
კონფიგურაცია (GitOps), გამოტოვება MR revert- ის საშუალებით.
runbook- ის გადატანა „თამაშის დღეს“ (ინციდენტის სიმულაცია და დაბრუნება).
შემოიღეთ საგას ანაზღაურება, სადაც „ქვევით“ დაბრუნება შეუძლებელია.
15) სიმწიფის მეტრიკა
MTTR გამოტოვება: მიზანი <5.
გამოშვების%, სადაც გამოტოვება = მარშრუტის/დროშის გადართვა (გადაკეთების გარეშე)> 90%.
მიგრაციის წილი ექსპანსიური-ფიგურული-კონტრაქტის სქემის მიხედვით> 90%.
სერვისების დაფარვა დროშებით> 95%.
ინციდენტების რაოდენობა შეუთავსებელი სქემების/კონტრაქტების გამო 0.
16) პროგრამები: მინი შაბლონები
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: სწრაფი გამოტოვება
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 გეიტინგი. ააშენეთ გამოშვებები ატომური, გაიმეორეთ runbook და ავტომატიზაცია გაუწიეთ დამცავ კარიბჭეს - და ნებისმიერი გამოშვება შექცევადი გახდება წუთში, ბიზნესის და მომხმარებლების ტკივილის გარეშე.