Chaos Engineering: системалардын туруктуулугу
Chaos Engineering: системалардын туруктуулугу
1) Эмне үчүн башаламандык-инженердик
Максаты - прод-архитектуранын туруктуулугун сөздөр жана диаграммалар менен эмес, эксперименттер менен далилдөө. Биз атайылап төмөнкүлөр үчүн көзөмөлдөнгөн мүчүлүштүктөрдү жаратабыз:- системанын жүрүм-туруму жөнүндө гипотезаларды текшерүү жана SLO тастыктоо;
- жашыруун SPOF, туура эмес убакыт/retrains, каскаддык таасирлерин аныктоо;
- командаларды үйрөтүү: оюн-күн, runbook's иштеп чыгуу, байланыш;
- маданиятты түзүү "демейки туруктуулук" эмес, "жакшы үмүт".
Маанилүү: Chaos Engineering ≠ "баарын сындыруу". Бул илимий ыкма: steady-state → гипотеза → эксперимент → жыйынтык → жакшыртуу.
2) Эксперименттин негизги цикли
1. Steady-state (негизги сызык): кайсы SLI туруктуу? (мисалы, ийгилик ≤ 500 ms 99. 95%).
2. Гипотеза: бир АЗ p95 жоготуу <10% өсөт, ал эми жеткиликтүүлүгү ≥ 99. 9%.
3. Эксперимент: чектелген blast radius жана stop критерийлери менен пландаштырылган folt.
4. Байкоо: метриктер/соода/логи, бурн-rate SLO, бизнес-SLI (мисалы, ийгиликтүү депозиттер).
5. Жакшыртуулар: табылгаларды оңдоп, убакытты/лимиттерди/маршрутту өзгөртүп, runbook жаңыртабыз.
6. Automation/регресс: күн тартибинде кайталап, CI/CD жана оюн-күн календарлары кошуу.
3) Коопсуздук тосмо (safety first)
Blast radius: тар менен башталат - бир pod/бийлик/маршрут/namespace.
Guardrails: SLO burn-rate боюнча алерталар (тез/жай), retray чеги, QPS чектөө, окуя бюджети.
Stop-критерийлери: "эгерде error-rate> X% же p99> Y ms N мүнөт - заматта stop жана rollback".
Терезелер: on-call жумуш сааттары, эскертилген стейкхолдерлер, тоңдурулган релиздер.
Байланыш: IC/Tech lead/Comms, так канал (War-room), билдирүү шаблон.
4) Ийгиликсиз класстары жана гипотеза идеялары
Тармак: кечигүү/життер/жоготуулар, порттордун жарым-жартылай кыйроо, кызматтардын/PSP ортосундагы "флапинг" байланыш.
Compute/түйүндөр: өлтүрүү жараяндар, CPU ысып, файлдык дескрипторлордун түгөнүшү, тар байланыш пулдары.
Сактоо жана DD: өсүш latency дисктер, lag реплика, бир чард/лидер токтотуу, split-brain.
Көз карандылык: тышкы API деградациясы, провайдерлердин лимиттери, 5xx/429 жарылуулар.
өзгөрүүлөрдү башкаруу: ийгиликсиз бошотуу, жаман Ficha желек, partial rollout.
Периметри: CDN начарлап, DNS/Anycast drift, WAF/бот коргоо ката.
Аймак/AZ: толук жоготуу же "жарым-жартылай" окуя (бир аз жаман жана күтүүсүз).
5) Аспаптар жана техникалар
Kubernetes: Chaos Mesh, Litmus, PowerfulSeal, kube-monkey.
Булуттар: AWS Fault Injection Simulator (FIS), булуттардын жанында Fault Domains.
Тармак/прокси: Toxiproxy (TCP-уу), tc/netem, iptables, Envoy fault (delay/abort), Istio fault injection.
Процесстер/түйүндөр: 'stress-ng', cgroups/CPU-throttle, disk fill.
Traffic багыттоо: GSLB/DNS weights, canary/blue-green Feylover текшерүү үчүн которуу.
6) Сценарий мисалдары (Kubernetes)
6. 1 Delay/аборт маршруту боюнча (Istio VirtualService)
yaml apiVersion: networking. istio. io/v1alpha3 kind: VirtualService metadata: { name: api-chaos }
spec:
hosts: ["api. internal"]
http:
- route: [{ destination: { host: api-svc } }]
fault:
delay: { percentage: { value: 5 }, fixedDelay: 500ms }
abort: { percentage: { value: 1 }, httpStatus: 503 }
Гипотеза: кардар таймауттар/retrailer жана CB p95 <300 ms жана error-rate <0 кармап турат. 5%.
6. 2 Pod Kill (Chaos Mesh)
yaml apiVersion: chaos-mesh. org/v1alpha1 kind: PodChaos metadata: { name: kill-one-api }
spec:
action: pod-kill mode: one selector:
namespaces: ["prod"]
labelSelectors: { "app": "api" }
duration: "2m"
Гипотеза: Балансировщик жана HPA p99> 20% өсүү жок бир нускада жоготуу ордун толтурат.
6. 3 Тармактык башаламандык (DD кечигүү)
yaml apiVersion: chaos-mesh. org/v1alpha1 kind: NetworkChaos metadata: { name: db-latency }
spec:
action: delay mode: all selector: { namespaces: ["prod"], labelSelectors: {"app":"payments"} }
delay: { latency: "120ms", jitter: "30ms", correlation: "25" }
direction: to target:
selector: { namespaces: ["prod"], labelSelectors: {"role":"db"} }
mode: all duration: "5m"
Гипотеза: пулдар/таймауттар/кэш таасирин азайтат; p95 төлөмдөр SLO ≤ калат.
6. 4 диск толтуруу
yaml apiVersion: chaos-mesh. org/v1alpha1 kind: IOChaos metadata: { name: disk-fill-logs }
spec:
action: fill mode: one selector: { labelSelectors: {"app":"ingest"} }
volumePath: /var/log size: "2Gi"
duration: "10m"
Гипотеза: Логдордун/квоталардын/алерттердин айланышы маршруттардын деградациясына чейин иштейт.
7) эксперименттер K8s
7. 1 Toxiproxy (жергиликтүү/интеграция)
bash toxiproxy-cli create psp --listen 127. 0. 0. 1:9999 --upstream psp. prod:443 toxiproxy-cli toxic add psp -t latency -a latency=200 -a jitter=50 toxiproxy-cli toxic add psp -t timeout -a timeout=1000
7. 2 Envoy HTTP fault (периметри/mesh)
yaml fault:
delay: { fixed_delay: 0. 3s, percentage: { numerator: 10, denominator: HUNDRED } }
abort: { http_status: 503, percentage: { numerator: 1, denominator: HUNDRED } }
7. 3 AWS FIS (идея мисал)
Эксперимент "өлтүрүү" N% EC2 Auto Scaling Group, жасалма EBS-latency жогорулатуу, бир AZ боюнча NAT-GW өчүрүү.
CloudWatch SLO-метриктер боюнча орнотулган токтоо критерийлери.
8) башаламандык учурунда байкоо параметрлери
SLO/SLI: fraction of good requests, p95/p99, burn-rate.
RED-модель критикалык жолдор боюнча (Rate, Errors, Duration).
Pool: p95 байланыш күтүү, утилизация.
BD: lag реплика, locks, p95 суроолор.
Тармак: retransmits, RTT, dscp/ecn жүрүм-туруму.
Бизнес-SLI: транзакциялардын ийгилиги (депозиттер/чекаут),% кайтарымдар/каталар.
Trace: тандалма соода (exemplars), релиз-аннотацияларды корреляциялоо.
9) SLO/Error-budget менен бириктирүү
ката бюджеттин алкагында эксперименттерди пландаштырып: башаламандык чейректик максаттарды "бузууга" тийиш эмес.
Burn-rate автоматтык kill-switch катары алерт.
Отчеттуулук: "канча бюджет өрттөлгөн", "кандай девиация steady-state".
10) Game-days (машыгуу)
Сценарий: кыскача уламыш (мисалы, "аймак-Чыгыш жоголгон"), инъекция кадамдары, SLO максаттары, ролдору, убактысы.
Баалоо: RTO/RPO иш жүзүндө, сапаттуу байланыш, туура runbook.
Retro: ээлери жана мөөнөттөрү менен жакшыртуулардын тизмеси, документтерди/дашборддорду жаңыртуу.
11) Automation жана CI/CD
Smoke-chaos: ар бир чыгарылышында staging боюнча кыска тесттер (мисалы, 1 pod-kill + 200 ms бир каттам боюнча delay).
Түнкү/жумалык: оор жагдайлар (5-15 мин) отчет менен.
Промо-Гейтс: p95/каталар> canary босого болсо - auto артка.
тажрыйба каталогу менен сактоо (YAML + runbook + SLO-thresholds).
12) Анти-үлгүлөрү
"Таянычсыз прод сындыруу": эч кандай stop-критерийлер, жок on-call → чыныгы окуя коркунучу.
Процесстин ордуна бир жолку акция.
Steady-state жок башаламандык: ийгилик/ийгиликсиздик деп эсептей турган нерсе түшүнүксүз.
Ашыкча Retray → өзүн-өзү DDoS Injection кечигүү.
Бизнес-SLI четке кагуу: төлөмдөр/буйрутмалар аткарылбай калганда "техникалык" ийгиликтер.
пост-талдоо жана жакшыртуу ээлери жоктугу.
13) киргизүү чек-тизмеси (0-45 күн)
0-10 күн
steady-state SLI аныктоо (колдонуучу + бизнес).
Тандоо куралы (Chaos Mesh/Litmus/Toxiproxy/FIS).
тосмолорду сүрөттөө: blast radius, stop-критерийлер, терезелер, ролдору.
11-25 күн
Биринчи эксперименттерди баштоо: pod-kill, 100-200 ms delay боюнча критикалык агымы, drop 1% пакеттер.
burn-rate alerty орнотуу, stop-критерийлер менен kill-switch байланыштыруу.
Биринчи оюн-күнүн өткөрүү, ретро жана фикстер чогултуу.
26-45 күн
АЗ/көз карандылык деңгээлиндеги сценарийлерди кошуу (тышкы PSP, BD-lag).
staging боюнча түнкү башаламандыкты автоматташтыруу; "сезондук" сценарийлерди (чокуларды) даярдоо.
Колдонмо/SRE үчүн эксперименттер каталогу жана үзгүлтүксүз отчеттор.
14) Жетилүү метрикасы
≥ 80% критикалык маршруттардын сүрөттөлгөн эксперименттер жана туруктуу мамлекеттик метрика бар.
Auto kill-switch p99/error-rate чегинен ашкан учурда иштейт.
Чейрек сайын - AZ/аймак деңгээлиндеги game-day; ≥ 1 жолу/ай - көз карандылыктын максаттуу сценарийи.
MTTR өркүндөтүү айлампасы кийин төмөндөйт, корреляция "релиздик окуя" азаят.
Чыныгы каталар учурунда "күтүүсүз" түшүүлөрдүн үлүшү → нөлгө умтулат.
Дашборддор KPI катары "туруктуулукту" көрсөтөт (burn-rate, калыбына келтирүү убактысы, ийгиликтүү DR иш-аракеттердин үлүшү).
15) guardrails жана триггер stop мисалдар
Stop: 'http _ req _ failed> 1%' 3 мүнөт, 'p99> 1000 ms' 3 терезелер, 'deposit _ success <99. 5%`.
Blast radius кыскартуу: auto-артка манифест, GSLB таразасын кайтаруу, fault-инъекцияларды өчүрүү.
Команда stop: себептери логин менен бир баскычы/скрипт.
16) Маданият жана процесстер
Башаламандык - бул "экстремалдык" эмес, SRE ритминин бир бөлүгү.
Ачык отчеттор, алсыздыктарды таануу, оңдоочу аракеттер.
On-call окутуу, кардарлар/өнөктөштөр менен байланыш симуляциялоо.
SLA/SLO жана бюджеттер менен байланыш: башаламандык ишенимдүүлүктү бузууга эмес, жогорулатуу керек.
17) Корутунду
Chaos Engineering далилденген туруктуулукка "тогуз үмүт" бурат. Туруктуу статусту формулировкалоо, тосмолорду коюу, кичине жана башкарылуучу, SLO жана бизнес-SLIди байкоо, оңдоп-түзөө жана жакшыртууларды автоматташтыруу. Андан кийин реалдуу каталар башкарылуучу иш-чаралар болуп калат: алдын ала RTO, корголгон error-budget жана команда паника жок иш-аракет кылууга даяр.