ცისფერი მწვანე და კანის გამოშვებები
(განყოფილება: არქიტექტურა და ოქმები)
1) რატომ არის საჭირო „უსაფრთხო გასეირნება“?
თანამედროვე სისტემებში გამოშვება არა მხოლოდ კოდის მიწოდებაა, არამედ კონტროლირებადი ექსპერიმენტი გაყიდვაში: ჩვენ ერთდროულად მინიმუმამდე დავაყენებთ რისკს (მომხმარებლებს არ ვტოვებთ) და ვამცირებთ უკუკავშირის დროს (სწრაფად ვხედავთ ეფექტს). ორი კლასიკური სტრატეგია - Blue-Green და Canary - ამას გადაწყვეტენ სხვადასხვა გზით, მაგრამ საერთო მიზნით: ნულოვანი დაბრკოლება, სწრაფი დაბრუნება, SLO- ს დაკვირვება.
2) ძირითადი განმარტებები
Blue-Green
ჩვენ გვაქვს პროდ-გარემოს ორი სრული ასლი: აქტიური (ცისფერი) ემსახურება ტრაფიკს, პასიური (მწვანე) ამზადებს ახალ ვერსიას. გადართვა - ატომური (switch/flip) დაბალანსების/როუტერის დონეზე. თუ გაუარესდა, მყისიერად დავუბრუნდებით ცისფერს.
Canary
ჩვენ ნაწილებს ვტოვებთ: ჯერ ტრაფიკის მცირე% (მაგალითად, 1-5%), ჩვენ ვაკვირდებით მეტრიკებს/SLO, შემდეგ კი ეტაპობრივად ვზრდით წილს (10% - 25% - 50% - 100%). დეგრადაციის დროს - წინა სტაბილურ ეტაპზე გამოტოვება ან გაჩერება.
3) როდის არის უკეთესი მიდგომა?
ცისფერი-მწვანე - ჩვენ ვირჩევთ, თუ:- ჩვენ გვჭირდება მყისიერი დაბრუნება რთული მანევრების გარეშე.
- არქიტექტურა/ბიუჯეტი საშუალებას გაძლევთ ორმაგი ინფრასტრუქტურული დუბლირება.
- ჩვენ გვინდა, რომ ფართომასშტაბიანი მიგრაცია ან პლატფორმის განახლებები (OS/JDK/rantheim) იზოლირებული იყოს.
- ნაერთების დანართი/აუზები მგრძნობიარეა თანდათანობით „შერეული“ მდგომარეობისთვის.
- თქვენ უნდა შეამციროთ blast radius და ნახოთ ქცევა მომხმარებლის წილზე.
- გამოშვების მაღალი სიხშირე, პროგრესული მიწოდება ნორმად.
- არსებობს სექსუალური დაკვირვება და ავტომატური კარიბჭეები (error budget, latence, conversion).
- სასურსათო გუნდს სურს შეამოწმოს ჰიპოთეზები: გავლენა კონვერსიაზე, შენარჩუნებაზე, LTV- ზე და ა.შ.
4) წარმატებული გამოცემის პრინციპები
Idempotent bild არტეფაქტები: იგივე სურათი/პაკეტი ყველა ეტაპზე.
დეტერმინისტული კონფიგურაცია: კონფიგურაცია, როგორც კოდი, გარემოს შედარება.
დაკვირვება დიზაინში: ლოგოები, მეტრიკები, ტრეკები, ალერტები; SLI/SLO წინასწარ.
სწრაფი, ავტომატიზირებული გამოტოვება: ღილაკი/გამოტოვების ბრძანება არის დანამატის ნაწილი და არა სახელმძღვანელო მაგია.
სქემების თავსებადი ცვლილებები: ექსპერიმენტული-ციფრული-კონტრაქტის სტრატეგია (იხ. § 10).
მარშრუტიზაცია L7 დონეზე (სასურველია): მოქნილობა სათაურებით/ქუქი-ფაილებით/ბილიკებით/API ვერსიებით.
5) ცისფერი-მწვანე: არქიტექტურა და პროცესი
5. 1 ტოპოლოგია
ორი production: Blue (აქტიური) და Green (კანდიდატი).
ზოგადი გარე დამოკიდებულება: CDN, გარე API, რიგები; DD არის სპეციალური შემთხვევა (იხ. § 10).
გადართვის წერტილი: დაბალანსება/Ingress/Gateway.
5. 2 ეტაპობრივი flow
1. ჩვენ მწვანე ვაყენებთ ახალი არტეფაქტის ქვეშ (vNext), ვატარებთ ჭკვიან ტესტებს.
2. ავტოტრანსპორტის გაფუჭება მწვანე წინააღმდეგ (e2e, კონტრაქტი, რეგრესია).
3. ჩვენ ვათბობთ ქეში/სესიონებს (თუ გამოიყენება), სინქრონიზაციას ვაძლევთ ფონის ჯობს/რიგებს.
4. ჩვენ გადავხედავთ ტრეფიკს მწვანე: ატომური ფრენა (DNTTL დაბალია, მარშრუტი/Listener swap, Ingress weight = 100%).
5. ჩვენ ვაკვირდებით SLO- ს პირველ წუთებში/საათებში (golden signals: latency, errors, saturation + ბიზნეს მეტრიკა).
6. პრობლემების დროს - მყისიერი დაბრუნება ცისფერ ზურგზე.
5. 3 დადებითი/უარყოფითი მხარეები
დადებითი: მყისიერი გამოტოვება, მარტივი გონებრივი მოდელი, სუფთა იზოლაცია.
უარყოფითი მხარეები: ინფრასტრუქტურის გაორმაგება, სახელმწიფო კომპონენტების სირთულე და მონაცემთა მიგრაცია.
6) კანარი: არქიტექტურა და პროცესი
6. 1 ტოპოლოგია
ერთი prod მტევანი; სამსახურის რამდენიმე ვერსია (stable and canary) ერთი ფრონტის უკან.
ტრეფიკი იყოფა წონით (1-5-10-25-50-100%) ან მიზნობრივ (სათაურით/კუკით/ID).
6. 2 ეტაპობრივი flow
1. უკანა ვერსიები იმავე კლასტერში/ASG/NSG.
2. ტრეფიკის ნაწილის მარშრუტიზაცია (მაგალითად, 1-5%) საკანში.
3. ავტომატური შემოწმებები SLI/SLO და ბიზნეს მეტრიკა; კარიბჭეები CI/CD- ში (error rate, p95 latence, CPU/RES, კონვერტაცია, უარყოფა/დაბრუნება).
4. საგზაო მოძრაობის წილის ეტაპობრივი ზრდა კარიბჭეების გავლის დროს.
5. სრული rollout 100% -მდე და ძველი ვერსიის დეაქტივაცია; დეგრადაციის დროს - auto-rollback.
6. 3 დადებითი/უარყოფითი მხარეები
დადებითი: მომხმარებელთა უმეტესობის მინიმალური რისკი, მონაცემთა წამყვანი გამოსავალი.
უარყოფითი მხარეები: ჩვენ გვჭირდება სექსუალური დაკვირვება, კომპეტენტური მარშრუტიზაცია, ინსტანციებს შორის „ვერსიის ციკლის“ რისკი.
7) ტრეფიკის მარშრუტიზაცია
დონე L4: ბალანსი IP/პორტებზე; უბრალოდ, მაგრამ ცოტა მოქნილობა.
L7 დონე: HTTP/S წესები - გზის გასწვრივ, მასპინძელი, სათაური, ქუქი-ფაილები, მომხმარებელთა აგენტი, GeoIP, SNI.
- Wighted routing (წონა 1-100%).
- Header-based/Cookie-based (მომხმარებლის დაფიქსირება ჯგუფში).
- Session stickings (მნიშვნელოვანია stateful/cashed სცენარებისთვის).
- Shadow/Traffic mirroring (ჩვენ ვირჩევთ მოთხოვნებს „ჩუმად“ ახალ ვერსიაში).
8) ინსტრუმენტები და განხორციელება (მაგალითები)
Kubernetes: Ingress (NGINX, Contour), Service Mesh (Istio/Linkerd), Argo Rollouts, Flagger.
Облака: AWS ALB/ELB, Route 53 weighted records, ECS/EKS; GCP Load Balancing + NEG; Azure Front Door/App Gateway.
CD პლატფორმები: Spinnaker, Argo CD, GitHub Actions + Progressive Delivery მოდულები, GitLab/CD.
9) დაკვირვება, SLI/SLO და კარიბჭეები
Golden signals: Latency (p95/p99), Error rate (5xx/4xx по типам), RPS, Saturation (CPU/Memory/GC), Queue lag.
ბიზნეს მეტრიკა: კონვერტაცია, ავტორიზაცია, გადახდა/წარმატება, საშუალო შემოწმება, ძაბვის ნაბიჯების უარყოფა.
- შეცდომის ბარიერი (მაგალითად, error-rate-baseline + X%).
- ლატენტობა p95 არ არის უარესი ვიდრე baseline, ვიდრე C- ზე.
- ბიზნეს ბარიერი (მაგალითად, კონვერტაციის ვარდნა
- Error budget SLO არ უნდა დაიწვას დაჩქარებულად.
ნაბიჯის ხანგრძლივობა: სტატისტიკური მნიშვნელობისთვის საკმარისი მინიმალური დრო (ეს დამოკიდებულია ტრაფიკზე).
10) მონაცემთა ბაზის მიგრაცია და სქემების თავსებადობა
მთავარი წესი: გამოშვებები უსაფრთხოა, თუ ვერსიები უკან და წინ შეესაბამება.
Expand-migrate-contract სტრატეგია:1. Expand: დაამატეთ ახალი სვეტები/ინდექსები/ცხრილები ძველი ვერსიის გატეხვის გარეშე.
2. Deploy app vNext (კითხულობს/წერს ახალ სქემას, მაგრამ იცის როგორ იმუშაოს ძველთან).
3. Migrate Data (ფონი/batch, idempotent, checkpoints).
4. Contract: ამოიღეთ ძველი ველები/ფიჩები სტაბილიზაციის შემდეგ.
ანტი-ნიმუშები: მიგრაცია, რომელიც მოითხოვს ექსკლუზიურ ბლოკირებას Blue-Green- ის გადართვის დროს; სქემის დაშლის შეუძლებლობა; „ორმაგი ჩანაწერი“ დედუპლიკაციის გარეშე.
11) rollback და უბედური შემთხვევების გეგმები
Blue-Green: მყისიერი ფრენა Blue; დააკვირდით მწვანე ფონის ჯობის „კუდებს“.
Canary: წონის დაკლება (მაგალითად, 25% -იანი წინ 5% ან 0%); ავტომატური აბორტი ალერტებით.
მონაცემები: გამეორების/კომპენსაციის გააზრებული პოლიტიკა (პირადობის მოწმობა, „inbox/outbox“ შაბლონი, შეტყობინებების დედუპლიკაცია).
Ficheflagi: სწრაფი დარტყმა ნაწილობრივ გადახრილი შესაძლებლობების გამორთვისთვის.
12) სტეიტთან და სესიებთან მუშაობა
კანარის სტილის სესიები, ან სესიების შენახვა გარეგნულად (Redis/Memcached) ისე, რომ ვერსიები ცვალებადია.
წინასწარ გაათბეთ ქეში (მწვანე ქარბუქი) და გაითვალისწინეთ invalidation flip.
ფონის ვორკერები: ნუ დაუშვებთ „რბოლას“ ვერსიებს შორის - რიგების განცალკევება ან „ლიდერობა“ ვერსიით.
13) უსაფრთხოება და შესაბამისობა
მწვანე/კანარზე წვდომა - Zero Trust- ის მიხედვით: მომსახურების ანგარიშები, მინიმალური საჭირო როლები.
საიდუმლოებები და გასაღებები - KMS/Secrets მენეჯერის მეშვეობით; ჩართეთ როტაცია.
ტრაფიკი - მხოლოდ TLS; აშკარად აღინიშნება endpoint's ვერსიები; მარშრუტიზაციისა და განთავისუფლების აუდიტი.
14) ღირებულება და შესრულება
Blue-Green აორმაგებს ინფრასტრუქტურას (გამოშვების დროს ან მუდმივად) - დააწესეთ ბიუჯეტი.
უფრო ეკონომიური, მაგრამ მოითხოვს სადამკვირვებლო და საინჟინრო დროს ავტომატიზაციისთვის.
ოპტიმიზაცია: ავტო სკეილინგი, ephemeral გარემო, ვერსიების პარალელური არსებობის ფანჯრის შემცირება.
15) ჩეკის ფურცლები
გამოსვლამდე
- სურათი/ბილეთი ერთი წყაროდან არის დაფიქსირებული, ხელმოწერები გადამოწმებულია.
- ტესტის გეგმა, ალერტები და SLO კარიბჭეები მორგებულია.
- BD მიგრაცია - ექსპანსიის რეჟიმში, ხელმისაწვდომია downgrade გეგმები.
- დაბრუნების გეგმა - შემოწმებულია staging/production-like.
გამოშვების დროს
- მეტრიკები და ლოგები შედარებულია ბასელინთან.
- კანარისთვის - ნაბიჯები და ბარიერები დაფიქსირდა; Blue-Green- ისთვის - flip-back- ის მზადყოფნა.
- ბრძანებები ცნობილია, არის უკუკავშირის ფანჯარა.
გამოსვლის შემდეგ
- SLO არ ჩაიძირა, error budget ნორმალურია.
- პოსტ-გამოშვებული მიგრაციები/გაწმენდა დასრულებულია.
- რეტროსპექტივა და ფლეიბუკების განახლება.
16) ხშირი შეცდომები და საწინააღმდეგო ნიმუშები
გამოაგდეს მეტრიკის გარეშე: არ არსებობს მონაცემები - არ არსებობს კონტროლირებადი გამოსავალი.
შეუთავსებელი DD სქემების ნაზავი, dowgrade სტრატეგიის არარსებობა.
შემთხვევითი ტრეფიკის შერევა: არ არსებობს უსაფრთხოება, მომხმარებლები „გადახტებიან“ ვერსიებს შორის.
ფარული stateful დამოკიდებულებები (ადგილობრივი დისკები, სამახსოვრო ქეში).
გრძელი DNS-TTL ერევა სწრაფი flip (Blue-Green).
ავტო კარიბჭეების ნაკლებობა: სახელმძღვანელო „თვალწინ“ გადაწყვეტილებები აფერხებს და ზრდის რისკებს.
17) კომბინირებული მიდგომები
Blue-Green + Canary: ჯერ Green to Green, შემდეგ კი Green- ის შიგნით გადაიტანეთ კანარი ინდივიდუალური მომსახურებისთვის.
Shadow/გადამფრენი ტრაფიკი: კანარის წინ, ჩვენ სარკის ტრაფიკს ახალ ვერსიაში ვაყენებთ.
Feature flags: ფუნქციონირება მოიცავს სტაბილურ ვერსიას „მუქი“ დროშებით სეგმენტების მიხედვით.
18) სცენარების მაგალითები (ესკიზები)
Blue-Green (web+api):1. განვაგრძოთ მწვანე (v2) ახალი Listener/Ingress.
2. ჩვენ ვათბობთ ქეშებს, ვასრულებთ readonly ტესტებს, smoke.
3. წონაში გადართვა Green = 100% -ით.
4. ჩვენ ვაკვირდებით SLO 30-60 წუთს; თუ ყველაფერი კარგი - გამორთეთ ცისფერი.
Canary (გადახდის მიკრო სერვისი):1. გამომცხვარი შემდეგი (რეპლიკები 5%).
2. ჩვენ მოიცავს 5% ტრაფიკს შიდა ანგარიშებისთვის/ტესტის სეგმენტისთვის.
3. Autogate: error rate - baseline + 0. 3%, p95 ≤ +20ms.
4. ჩვენ ვზრდით 10% -ს 25% -დან 50% -მდე ყოველ N წუთში გეითების გავლის დროს.
5. ჩვენ ვაძლევთ 100% -ს ძაფს ყველა სეგმენტში; ამოიღეთ ძველი ვერსია.
19) ვარიაციები სხვადასხვა არქიტექტურისთვის
მონოლითი: ცისფერი-მწვანე უფრო მარტივია, კანარი უფრო რთულია ფიკის განუყოფლობის გამო; გამოიყენეთ ფიჩეფლაგები.
მიკროსერვისი: ბუნებრივი ბუნებრივი; დააკვირდით ოფშორულ კონტრაქტებს (consumer-driven კონტრაქტები).
Stateful სერვისები: უპირატესობა მიანიჭეთ Blue-Green- ს ფრთხილად შემუშავებული მიგრაციებით და საიდუმლოებით.
20) მოკლე შედარება (რეზიუმე)
გამოტოვების სიჩქარე: ცისფერი-მწვანე = მყისიერად; Canary = სწრაფად, მაგრამ წონის შემცირებით.
ინფრასტრუქტურის ღირებულება: Blue-Green; Canary ↔︎/↓.
რისკი მომხმარებლებისთვის: Canary უფრო დაბალია (აკონტროლებს წილს).
განხორციელების სირთულე: ცისფერი-მწვანე დაწყება უფრო ადვილია; კანარი მოითხოვს ძლიერ დაკვირვებას და ავტომატიზაციას.
მონაცემთა/სქემების თავსებადობა: ორივე კრიტიკულია; დაგეგმეთ ექსპანსია-მიმღები-კონტრაქტი.
21) შედეგი
Blue-Green და Canary არ არის ურთიერთგამომრიცხავი სტრატეგიები, არამედ პროგრესული მიწოდების ელემენტები. არჩევანი დამოკიდებულია ფასის შეზღუდვებზე, დაკვირვების სიმწიფეზე და ცვლილებების ბუნებაზე. მიუხედავად მიდგომისა, სტაბილური გამოშვება ემყარება ოთხ საყრდენს: ავტომატიზაციას, დაკვირვებას, საპირისპირო თავსებადობას და სწრაფ დაბრუნებას.