GH GambleHub

Blue-Green жана Canary деплой

Blue-Green жана Canary деплой

1) Милдет жана негизги идеялар

Blue-Green жана Canary - ишке ашыруу коркунучун азайтуу үзгүлтүксүз релиздер стратегиясы:
  • Blue-Green: Биз эки параллелдүү версияларды (Blue - активдүү, Green - жаңы) кармап, трафикти атомдук түрдө которуп жатабыз. Тез артка → дароо Blue кайтып.
  • Canary: этап-этабы менен жаңы нускасын (1% → 5% → 25% → 50% → 100%), SLO-метрика мониторинг жана токтотуу/деградация учурунда тебүү.

Жалпы принцип: "трафикти күйгүзүүдөн" "артефактты жеткирүүнү" бөлүү жана байкоону + артка кайтарууну автоматташтыруу.

2) Качан тандоо керек

Blue-Green ылайыктуу, качан:
  • заматта которуу керек (катуу RTO), жөнөкөй state-less кызмат;
  • катуу бошотуу/тоңдуруу терезелери жана түшүнүктүү smoke текшерүүлөр бар;
  • узакка созулган кош сыйымдуулукту сактоо кымбат - бирок кыска убакытка болушу мүмкүн.
Canary качан келет:
  • татаал өзгөрүүлөр, реалдуу трафикте этап-этабы менен валидациялоону талап кылат;
  • жетилген телеметрия бар (SLO, бизнес-метрика), авто-токтоо мүмкүнчүлүгү;
  • критикалык жоготуу радиусу (fintech/iGaming-агымдар).

Combo-үлгү: Green тоголотуп жана canary-тепкичтери аркылуу ага өтүү (Blue-Green алкагы катары, Canary жол которуу ыкмасы катары).

3) Жол кыймылын багыттоо архитектурасы

Жол которуу/толтуруу параметрлери:

1. L4/L7 баланстагыч (ALB/NLB, Cloud Load Balancer) - салмактуу максаттуу топтор.

2. API-шлюз/WAF - версиялары, аталыштары, кукилери, аймактары боюнча route/weight.

3. Service Mesh (Istio/Linkerd/Consul) - пайыздык бөлүштүрүү, fault-инъекция, убакыт туткалары/retraights/чектөөлөр.

4. Ingress/NGINX/Envoy - upstream-салмагы жана сапаттары боюнча багыттоо.

5. Argo Rollouts/Flagger - контроллер оператору, автоматтык прогрессия, Prometheus/New Relic/Datadog менен бириктирүү.

4) Kubernetes: практикалык үлгүлөрү

4. 1 Blue-Green (Service selector аркылуу)

Два Deployment: `app-blue` и `app-green`.
Бир Service 'app-svc' каалаган 'version' селектору менен.

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}]

Которуу - башкарылуучу drain менен атомдук селектор (же белги) өзгөртүү.

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

баскычтарында 'weight' өзгөртүү; DestinationRule боюнча retry, timeout, outlier-detector кошуу.

4. 3 Argo Rollouts (auto-канарейка чуркоо)

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-Гейтс жана Auto-Roll

Корголгон метриктер (мисалдар):
  • Техникалык: 'p95 _ latency', '5xx _ rate', 'error _ budget _ burn', 'CPU/Memory throttling'.
  • Азык-түлүк: 'CR (депозит)', 'төлөмдөрдүн ийгилиги', 'скоринг-фрод', 'ARPPU' (муздак терезелерде).
Бут саясаты (мисал):
  • Эгерде '5xx _ rate' жаңы версиясы> 0. 5% 10 мин ичинде - пауза жана rollback.
  • Эгерде '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: кош жазуу/окуу, кайра толтуруу.
  • Contract: 100% трафик чыккандан кийин эски талааларды/кодду алып салуу.
  • Окуя/кезек: payload (v1/v2) чыгаруу, idempotency колдоо.
  • Кэш/сессиялар: ачкычтарды чыгаруу; формат шайкештигин камсыз кылуу.

7) CI/CD жана GitOps менен бириктирүү

CI: бирдиктүү артефакт (build once) чогултуу, сүрөт кол коюу, SBOM, тесттер.
CD: айлана-чөйрө аркылуу артефакт промоушен; Blue-Green/Canary манифесттер менен башкарылат.
GitOps: MER MR → контроллер (Арго CD/Flux) салмагы/селектор колдонот.
Environments/Approvals: прод-талаа үчүн - кол менен gate + аудит чечимдер.

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-Жашыл: 10 → IaC/CLI аркылуу салмагын өзгөртүү.
Rollback Auto Script үчүн CloudWatch-Alerts байлап (салмагын өзгөртүү 0/100).

9) Коопсуздук жана шайкештик

Zero trust котормолордун ортосунда: сырларды/Rolling ачкычтарын коддоо.
Саясат-as-Code: кол коюлбаган сүрөттөрдү деплой тыюу, 'no latest'.
Сырлар жана конфиги катары артефакт версиялары; артка кайтаруу конфигурациялардын артка кайтарылышын камтыйт.
Аудит: ким, качан салмагын көтөргөн/селектор которгон, кандай тикет менен.

10) Наркы жана кубаттуулугу

Blue-Green бошотуу мезгил үчүн кош күч талап → терезени пландаштыруу.
Canary узакка созулушу мүмкүн → телеметрия/байкоо наркы, эки версиянын параллелдүү мазмуну.
оптималдаштыруу: HPA/VPA autoscaling, Blue-Green кыска терезелер, "оор" кызматтар үчүн түнкү релиздер.

11) Артка кайтаруу (runbook)

1. тоңдуруп жылдыруу (пауза).
2. Green салмагын төмөндөтүү 0% (canary )/Blue (көк-жашыл) боюнча селектор кайтаруу.
3. Текшерүү: каталар/жашыруун негизги кайтып, дренаждык байланыштар.
4. Окуяны ачуу, артефакттарды чогултуу (логи, трассалар, метриканы салыштыруу).
5. Fix/этап репрод, smoke айдап, прогрессти кайра баштоо.

12) Анти-үлгүлөрү

Стаж менен прод ортосундагы артефактты кайра чогултуу ("build once" бузуу).
SLO/метриги жок "дүлөй" канары - бул формализм, коргоо эмес.
Фич-желектердин жоктугу: релизи дароо 100% жүрүм-турумун камтууга аргасыз.
Иштебей калган ден соолук-текшерүү/жашоо → "жабышып" таман жана жалган туруктуулук.
БДнын "кокус" шайкештиги: контракт которулганда бузулат.
Мутабель теги сүрөттөр/' latest 'прод.

13) киргизүү чек-тизмеси (0-45 күн)

0-10 күн

Кызмат үчүн стратегияны тандоо: B/G, Canary же айкалыштырылган.
Кошуу кол сүрөттөр, health-текшерүү, readiness-тесттер, 'no latest'.
Dashboard SLO даярдоо (latency/error rate/бизнес-метрика).

11-25 күн

Салмакты автоматташтыруу (Istio/Argo Rollouts/ALB-weights).
Орнотуу analysis templates, Алерт жана auto-rollback.
Манифесттерди (Helm/Kustomize), GitOps менен интеграциялоо.

26-45 күн

DB үчүн expand-migrate-contract стратегиясын киргизүү.
критикалык Flow kill-switch желектери менен жабуу.
"Оюн күнү" өткөрүү: артка жана окуя окшоштуруу.

14) Жетилүү метрикасы

Blue-Green/Canary аркылуу чыгаруу% (максаты> 90%).
Орточо которуу/чыгаруу убактысы (максат <3 мин).
SLO боюнча авто-бут менен релиздердин үлүшү (жана инциденттерсиз).
Телеметрия менен тейлөө (traces/logs/metrics)> 95%.
expand-migrate-contract схемасы боюнча DD миграциясынын үлүшү> 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 үчүн 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 - бири-бирин жокко чыгаруучу эмес, толуктоочу стратегиялар. Аларды кол коюлган артефакттардын, СЛОнун, автоматтык дарбазалардын жана GitOps башкаруунун үстүнөн куруу. Жүктү кошуудан бөлүңүз, тез артка чегинүүнү жана миграциянын тартибин сактаңыз - жана релиздер алдын ала айтууга болот, коопсуз жана тез болот.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.