GH GambleHub

Blue-Green და Canary Deple

Blue-Green და Canary Deple

1) ამოცანა და ძირითადი იდეები

Blue-Green და Canary არის უწყვეტი წარმოების სტრატეგიები, რომლებიც ამცირებენ განხორციელების რისკს:
  • Blue-Green: ჩვენ ორი პარალელური ვერსია გვაქვს (ცისფერი - აქტიური, მწვანე - ახალი), გადართეთ ტრაფიკი ატომურად. სწრაფი გამოტოვება დაუყოვნებლივ დაბრუნდება Blue.
  • Canary: ჩვენ ჩართავთ ახალ ვერსიას ეტაპობრივად (1%) 5% - 25% - 50% - 100%), ვაკვირდებით SLO მეტრებს და ვჩერდებით/ვტოვებთ დეგრადაციის დროს.

ზოგადი პრინციპი: „არტეფაქტის მიწოდება“ „ტრაფიკის ჩართვისგან“ და დაკვირვების + გამოტოვების ავტომატიზაცია.

2) არჩევნის გაკეთებისას

Blue-Green შესაფერისია, როდესაც:
  • თქვენ გჭირდებათ მყისიერი გადართვა (მყარი RTO), მარტივი სახელმწიფო სერვისები;
  • არსებობს მკაცრი გამოშვების/გაყინვის ფანჯრები და გასაგები smoke შემოწმებები;
  • ძვირია გრძელი ორმაგი კონტეინერის შენარჩუნება - მაგრამ მოკლედ შეგიძლიათ.
კანარი შესაფერისია, როდესაც:
  • რთული ცვლილებები, საჭიროა რეალურ ტრაფიკზე ეტაპობრივი მონიტორინგი;
  • აქ არის სექსუალური ტელემეტრია (SLO, ბიზნეს მეტრიკა), მანქანის გაჩერების შესაძლებლობა;
  • კრიტიკულად შეზღუდულია დამარცხების სხივი (fintech/iGaming Stream).

Combo aptern: the Green- ის გადატანა და მასზე გადასვლა კანარის საფეხურებზე (Blue-Green, როგორც ჩარჩო, კანარი, როგორც ტრეფიკის გადაცემის მეთოდი).

3) ტრეფიკის არქიტექტურა

გადართვის/ჭალის პარამეტრები:

1. L4/L7 დაბალანსება (ALB/NLB, Cloud Load Balancer) - შეჩერებული target groups.

2. API კარიბჭე/WAF - მარშრუტი/შაბათ ვერსიების, სათაურების, ქუქი-ფაილების, რეგიონების მიხედვით.

3. Service Mesh (Istio/Linkerd/Consul) - პროცენტული განაწილება, fault ინექცია, Taimauts/Retraev/შეზღუდვები.

4. Ingress/NGINX/Envoy - upstream წონა და მარშრუტიზაცია ატრიბუტით.

5. Argo Rollouts/Flagger - კონტროლერის ოპერატორი, ავტომატური პროგრესი, ინტეგრაცია Prometheus/New Relic/Datadog- თან.

4) Kubernetes: პრაქტიკული შაბლონები

4. 1 ცისფერი-მწვანე (სერვისის სელექტორის მეშვეობით)

Два Deployment: `app-blue` и `app-green`.
ერთი სერვისი 'app-svc' სელექტორით სასურველი 'ვერსიისთვის ".

yaml apiVersion: apps/v1 kind: Deployment metadata: { name: app-green, labels: { app: app, version: green } }
spec:
replicas: 4 selector: { matchLabels: { app: app, version: green } }
template:
metadata: { labels: { app: app, version: green } }
spec:
containers:
- name: app image: ghcr. io/org/app:1. 8. 0 apiVersion: v1 kind: Service metadata: { name: app-svc }
spec:
selector: {app: app, version: blue} # ← switch to green - change ports: [{port: 80, targetPort: 8080}]

გადართვა - სელექტორის (ან ეტიკეტების) ატომური ცვლილება კონტროლირებადი დასხივებით.

4. 2 Canary (Istio VirtualService)

yaml apiVersion: networking. istio. io/v1beta1 kind: VirtualService metadata: { name: app }
spec:
hosts: ["app. example. com"]
http:
- route:
- destination: { host: app. blue. svc. cluster. local, subset: v1 }
weight: 90
- destination: { host: app. green. svc. cluster. local, subset: v2 }
weight: 10

შეცვალეთ 'კვირის' ნაბიჯები; დაამატეთ retry, timeout, outlier detector DestinationRule- ზე.

4. 3 Argo Rollouts (მანქანის კანარის პროგონი)

yaml apiVersion: argoproj. io/v1alpha1 kind: Rollout metadata: { name: app }
spec:
replicas: 6 strategy:
canary:
canaryService: app-canary stableService: app-stable steps:
- setWeight: 5
- pause: {duration: 300} # 5 min observation
- analysis:
templates:
- templateName: slo-guard
- setWeight: 25
- pause: { duration: 600 }
- analysis:
templates: [{ templateName: slo-guard }]
- setWeight: 50
- pause: {}
trafficRouting:
istio:
virtualService:
name: app routes: ["http-route"]

შაბლონის ანალიზი დაკავშირებულია მეტრიკებთან (იხ. ქვემოთ).

5) SLO კარიბჭე და მანქანა

დაცული მეტრიკა (მაგალითები):
  • ტექნიკური: 'p95 _ latence', '5xx _ rate', 'error _ budget _ burn', 'CPU/Memory throttling'.
  • სასურსათო: 'CR (ანაბარი)', 'გადახდების წარმატება', "მორიელის ფროდა", 'ARPPU "(ცივ ფანჯრებზე).
ფეხის პოლიტიკა (მაგალითი):
  • თუ '5xx _ rate' ახალი ვერსია> 0. 5% 10 წუთში - სახლი და როლბაკი.
  • თუ 'p95 _ latency'> ბაზის 20% - rollback.
  • თუ კანარის პოპულარიზაცია ხდება, მაგრამ ბიუჯეტის SLO იწვის> 2 %/საათში - hold.
Argo AnalysisTemplate (გამარტივებული):
yaml apiVersion: argoproj. io/v1alpha1 kind: AnalysisTemplate metadata: { name: slo-guard }
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]))

6) მონაცემები და თავსებადობა (ტკივილის ყველაზე გავრცელებული მიზეზი)

გამოიყენეთ expand - migrate - contract სტრატეგია:
  • Expand: დაამატეთ ახალი nullable სვეტები/ინდექსები, მხარი დაუჭირეთ ორივე სქემას.
  • Migrate: ორმაგი ჩანაწერი/კითხვა, სარეზერვო ფილმი.
  • კონტრაქტი: ძველი ველების/კოდის ამოღება 100% ტრაფიკის მიღწევის შემდეგ.
  • ღონისძიება/რიგები: ვერსია payload (v1/v2), მხარი დაუჭირეთ idempotence.
  • ქეში/სესიები: კლავიშების ვერსია; უზრუნველყავით ფორმატის თავსებადობა.

7) ინტეგრაცია CI/CD და GitOps

CI: ერთი არტეფაქტის შეკრება, გამოსახულების ხელმოწერა, SBOM, ტესტები.
CD: არტეფაქტი დაწინაურდა გარემოთი; Blue-Green/Canary მართავს მანიფესტებს.
GitOps: mergMR კონტროლერი (Argo CD/Flux) იყენებს წონას/სელექტორს.
Environments/Approvals: სარეკლამო სტეპებისთვის - სახელმძღვანელო გეტა + გადაწყვეტილებების აუდიტი.

8) NGINX/Envoy და ღრუბლოვანი LB: სწრაფი მაგალითები

8. 1 NGINX (აფსიდის წონა)

nginx upstream app_upstream {
server app-blue:8080 weight=90;
server app-green:8080 weight=10;
}
server {
location / { proxy_pass http://app_upstream; }
}

8. 2 AWS ALB (Weighted Target Groups)

TG-Blue: 90, TG-Green: 10 - შეცვალეთ წონა IaC/CLI- ს მეშვეობით.
მიიპყრო CloudWatch ალერტები rollback მანქანის სკრიპტებზე (წონის შეცვლა 0/100).

9) უსაფრთხოება და შესაბამისობა

Zero trust ვერსიებს შორის: განასხვავეთ დაშიფვრის საიდუმლოებები/როლის გასაღებები.
Policy-as-Code: გაუგებარი სურათების ზეპირი აკრძალვა, 'no latest'.
საიდუმლოებები და კონფისკაცია, როგორც ვერსიის არტეფაქტები; გამოტოვება მოიცავს ჩამორთმევის დაბრუნებას.
აუდიტი: ვინ, როდესაც მან წონა/სელექციონერი ასწია, რომელი თიკეტით.

10) ღირებულება და მოცულობა

Blue-Green მოითხოვს ორმაგ სიმძლავრეს გამოშვების პერიოდისთვის - დაგეგმეთ ფანჯარა.
Canary- ს შეუძლია უფრო დიდხანს მიაღწიოს ტელემეტრიის/დაკვირვების ღირებულებას, ორი ვერსიის პარალელურ შინაარსს.
ოპტიმიზაცია: HPA/VPA autoscaling, მოკლე Blue-Green ფანჯრები, ღამის გამოშვებები „მძიმე“ სერვისებისთვის.

11) გამოტოვება (runbook)

1. გაყინვა წინსვლა.
2. მწვანე წონის შემცირება 0% -მდე (კანარი )/სელექტორის ცისფერი (ცისფერი-მწვანე) დაბრუნება.
3. შემოწმება: შეცდომები/ლატენტობა დაუბრუნდა ბაზას, დაარღვია ნაერთები.
4. ინციდენტის გახსნა, არტეფაქტების შეგროვება (ლოგოები, ბილიკები, მეტრული შედარება).
5. Fix/reprode სცენაზე, გადაიტანეთ smoke, განაახლეთ პროგრესი.

12) ანტი შაბლონები

არტეფაქტის გადაკეთება სცენაზე და მილის შორის (დარღვევა „მომარაგება“).
„ყრუ“ კანი SLO/მეტრიკის გარეშე არის ფორმალობა და არა დაცვა.
Fich დროშების არარსებობა: გამოშვება იძულებულია ქცევა დაუყოვნებლივ შეიტანოს 100% -ით.
არასამუშაო health-checks/liveness არის „ჩაძირული“ გადასახადები და ცრუ სტაბილურობა.
BD- ს თავსებადობა „Avos- ზე“: კონტრაქტი იშლება გადართვის დროს.
Mutable სურათების ჭდეები/' latest 'გაყიდვაში.

13) განხორციელების სიის სია (0-45 დღე)

0-10 დღე

სტრატეგიის არჩევა სერვისებისთვის: B/G, Canary ან კომბინირებული.
ჩართეთ სურათების ხელმოწერა, health checks, რეალობის ტესტები, 'no latest'.
მოამზადეთ dashbords SLO (latency/error/ბიზნეს მეტრიკა).

11-25 დღე

წონის ავტომატიზაცია (Istio/Argo Rollouts/ALB-weights).
Analysis templates, alertes და auto-rollback კონფიგურაცია.
მანიფესტების შაბლონიზაცია (Helm/Kustomize), ინტეგრირება GitOps- თან.

26-45 დღე

შემოიღეთ BD- სთვის ექსპერიმენტული-საკონტროლო სტრატეგია.
დაფარეთ კრიტიკული flow-switch დროშებით.
გამართეთ „თამაშის დღე“: გამოტოვეთ დაბრუნება და ინციდენტი.

14) სიმწიფის მეტრიკა

% გამოშვებები Blue-Green/Canary- ის საშუალებით (მიზანი> 90%).
გადართვის/გამოტოვების საშუალო დრო (მიზანი <3 წუთი).
SLO (და ინციდენტების გარეშე) მანქანების გაჩერების გამოშვების წილი.
ტელემეტრიული სერვისების დაფარვა (traces/logs/metrics)> 95%.
BD- ს მიგრაციის წილი ექსპანსიური-საკრედიტო-კონტრაქტის სქემის მიხედვით> 90%.

15) პროგრამები: პოლიტიკის შაბლონები და პლაკატები

OPA (გაუგებარი სურათების აკრძალვა)

rego package admission. image

deny[msg] {
input. request. kind. kind == "Deployment"
some c img:= input. request. object. spec. template. spec. containers[c].image not startswith(img, "ghcr. io/org/")
msg:= sprintf("Image not from trusted registry: %v", [img])
}

Helm values for canary (გამარტივებული)

yaml canary:
enabled: true steps:
- weight: 5 pause: 300
- weight: 25 pause: 600
- weight: 50 pause: 900 sloGuards:
max5xxPct: 0. 5 maxP95IncreasePct: 20

GitHub Actions - წონის პოპულარიზაცია (ფსევდო)

yaml
- name: Promote canary to 25%
run: kubectl patch virtualservice app \
--type=json \
-p='[{"op":"replace","path":"/spec/http/0/route/1/weight","value":25}]'

16) დასკვნა

Blue-Green და Canary არ არის ურთიერთგამომრიცხავი, არამედ კომბინირებული სტრატეგიები. ააშენეთ ისინი ხელმოწერილი არტეფაქტების თავზე, დაკვირვებით SLO, ავტომატური კარიბჭეები და GitOps მენეჯმენტი. გამოყავით მიტანა ჩართვისგან, შეინარჩუნეთ სწრაფი დაბრუნება და მიგრაციის დისციპლინა - და გამოშვებები გახდება პროგნოზირებული, უსაფრთხო და სწრაფი.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.