GH GambleHub

Chaos Engineering 'համակարգերի կայունություն

Chaos Engineering 'համակարգերի կայունություն

1) Ինչու՞ քաոս ինժեներիան

Նպատակը 'ապացուցել պրոդ ճարտարապետության կայունությունը ոչ թե բառերով և դիագրամներով, այլ փորձերով։ Մենք միտումնավոր ստեղծում ենք վերահսկվող ձախողումներ, որպեսզի

ստուգել համակարգի վարքագծի և SLO-ի մասին վարկածները։

հայտնաբերել թաքնված SPOF, սխալ թայմաուտներ/ռետտա, կասկադային էֆեկտներ։

թիմերը 'game-days, runbook' s, հաղորդակցություն;

ձևավորել «լռելյայն կայունություն» մշակույթը, ոչ թե «հույս ունենք լավագույնին»։

Կարևոր է, որ Chaos Engineering-ը «կոտրել ամեն ինչ»։ Սա գիտական մեթոդ է: steady-state-state-ի վարկածը բացատրում է տեխնոլոգիական բարելավման վերջնական եզրակացության փորձը։

2) Փորձի հիմնական ցիկլը

1. Steady-state (ռուսական գիծ) 'ի՞ նչ SLI կայուն է։ (օրինակ, հաջողությունը կազմում է 500 մզ 99-ում։ 95%).
2. Վարկածը 'մեկ AZ p95 կորստի ժամանակ կաճի <10 տոկոսը, իսկ հասանելիությունը ՝ 3699։ 9%.

3. Փորձը 'պլանավորված ֆոլտ, սահմանափակ blast radius և stop-չափանիշներով։

4. Դիտարկումը 'metrics/treiss/logs, burn-rate SLO, բիզնես-SLI (օրինակ, հաջողակ դեպոզիտները)։

5. Բարելավումներ 'մենք գրանցում ենք գտածոները, փոխում ենք թայմաուտները/լիմիտները/միկրոօրգանիզացիան, թարմացնում ենք runbook-ը։

6. Ավտոմատիզացիա/ռելիզացիա 'կրկնում ենք գրաֆիկում, ավելացնում ենք CI/CD և game-days օրացույցները։

3) Պերիլա անվտանգության (safety first)

Blast radius: Մենք սկսում ենք նեղ 'մեկ pod/instans/երթուղի/namespace։

Guardrails: Alerts SLO burn-rate (արագ/դանդաղ), ռետրերի սահմանները, QPS սահմանափակումը, բյուջեն։

Stop-չափանիշներ. «Եթե error-rate> X% կամ p99> Y ms N րոպե - անմիջապես stop և rollback»։

Պատուհաններ 'on-call աշխատանքային ժամացույցներ, որոնք տեղեկացված են steikholders, սառեցված օրինագծեր։

Հաղորդակցություն ՝ IC/Tech lead/Comics, պարզ ջրանցք (War-room), հաղորդագրությունների ձև։

4) Մերժումների դասերը և վարկածների գաղափարները

Ցանցը 'ուշացում/ջիտթեր/կորուստ, մասնակի դիֆերենցիալ, ծառայությունների/PSA-ի միջև «ֆլիպող» կապը։

Կոմպյատ/108 ՝ գործընթացների սպանությունը, վերագրանցելով CPU-ն, սպառելով ալյումինե ձայնագրիչները, նեղ փամփուշտները։

Պիտեր և BD 'latency սկավառակների աճը, lag կրկնօրինակը, մեկ շարդի/առաջնորդի կանգառը, split-brain։

Կախվածությունը 'արտաքին API-ի քայքայումը, պրովայդերների սահմանները, 5xx/429 աճը։

Փոփոխությունների կառավարումը 'ձախողված թողարկումը, վատ ֆիչի դրոշը, partial rollout։

Պարիմետրը 'CDN-ը դեգրադացնում է, CSA/Anycript, WAF/bot-պաշտպանության ձախողումը։

Տարածաշրջանը/AZ 'ամբողջական կորուստ կամ «մասնակի» պատահականություն (մի փոքր ավելի վատ և անկանխատեսելի)։

5) Գործիքներ և տեխնոլոգիաներ

Kubernetes: Chaos Mesh, Litmus, PowerfulSeal, kube-monkey.

Ամպերը ՝ AWS Fox Inject Simulae (FIS), Fox Domains ամպերի մոտ։

Ցանցը/wwww.Toxiproxy (TCP-yad), tc/netem, iptables, Envoy fox (wwww.ay/ab.ru), Istio fentinj.ru։

Գործընթացներ/07: «stress-ng», cgroups/CPU-throttle, www.k-l։

Ռուսական-միկրոօրգանիզացիա ՝ GSLB/MSweights, canary/blue-green, ֆեյլովեր ստուգումների համար։

6) Կոդավորման օրինակներ (Kubernetes)

6. 1 Dray/abant երթուղով (Istio Virtium Live)

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 }

Վարկածն այն է, որ հաճախորդների թայմաուտները/ռետրերը և 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-ն փոխհատուցում են loss-ը մեկ օրինակով առանց p99> 20 տոկոսի աճի։

6. 3 Ցանցային քաոս (BD)

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 fox (պարիմետր/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-ում Scaling Group-ում, արհեստականորեն բարձրացնել EMS-latency-ը, անջատել NAT-GW-ը մեկ AZ-ում։

Ներկառուցված stop-չափանիշները CloudWatch SLO-մետրիկների վրա։

8) Քաոսի ընթացքում դիտարկման մեթրիկները

SLO/SLI: fraction of good requests, p95/p99, burn-rate.

RED մոդելը կրիտիկական ճանապարհներով (Rate, Errors, Duration)։

Պուլները 'p95, utilization-ի կապի սպասումը։

ԲԴ ՝ lag կրկնօրինակը, www.ks, dreef p95 հարցումը։

Ցանցը ՝ retransmits, RTT, dscp/ecn վարք։

Բիզնես-SLI 'գործարքների հաջողությունը (ավանդներ/չեկաուտ), վերադարձի/սխալների տոկոսը։

Հետքը 'ընտրովի թրեյսները (exemplars), ռելիզի սենսացիայի հարաբերակցությունը։

9) Ինտեգրումը SLO/Error-budget հետ

Պլանավորեք փորձարկումներ սխալների բյուջեի մեջ 'քաոսը չպետք է «քանդի» զանգվածային նպատակները։

Burn-rate ալերտները որպես ավտոմատ kill-switch։

Հաշվետվություններ. «Քանի՞ բյուջեներ են այրվել», «ինչ նշանաբաններ են steady-state»։

10) Game-days (ուսուցումներ)

Սցենարը ՝ կարճ լեգենդ (օրինակ ՝ «տարածաշրջանը-East»), խմբակցությունների քայլերը, SLO նպատակները, դերերը, ժամանակը։

Գնահատումը ՝ RTO/RPO իրական, հաղորդակցման որակը, runbook ճկունությունը։

Ռետրո 'սեփականատերերի և ժամկետների հետ բարելավումների ցանկը, փաստաթղթերի/դաշբորդի նորարարությունը։

11) Ավտոմատիզացիա և CI/CD

Smoke-chaos: Կարճ թեստեր staging-ի վրա յուրաքանչյուր մոդուլով (օրինակ, 1 pod-kill + 200 ms diay մեկ ուղղությամբ)։

Գիշերային/շաբաթական 'ավելի ծանր սցենարներ (5-15 րոպե) զեկույցով։

Պրոմո-գեյթ 'եթե r95/սխալ> շեմն է canary-avto-ratat-ի վրա։

Փորձարկումներ կատարելով (YAML + runbook + SLO-thresholds)։

12) Anti-patterna

«Կոտրել անցքը առանց փետուրների», չկա stop-չափանիշներ, ոչ on-call-ը իրական ռիսկ է։

Մեկ վարակիչ ակցիան գործընթացի փոխարեն։

Հաոսը առանց steady-state-ի, պարզ չէ, թե ինչ կարելի է համարել հաջողության/ձախողում։

Ավելցուկ հետքերը ինքնին-DDoS-ն են, երբ հետաձգվում են։

Անտեսելով բիզնես SLI-ը '«տեխնոլոգիական» հաջողությունները վճարումների/պատվերների ձախողման ժամանակ։

Փոստի վերլուծության և կատարելագործման սեփականատերերի բացակայությունը։

13) Ներդրման թուղթ (0-45 օր)

0-10 օր

Որոշել steady-state SLI (օգտագործող + բիզնես)։

Ընտրել գործիք (Chaos Mesh/Litmus/Toxiproxy/FIS)։

Նկարագրել փետուրները ՝ blase radius, stop-չափանիշներ, պատուհաններ, դերեր։

11-25 օր

Առաջին փորձարկումները 'pod-kill, 100-200 ms dray կրիտիկական apstrim, drop 1% ռուբլիա։

Տեղադրել burn-rate ալերտները, կապել kill-switch stop-չափանիշների հետ։

Անցկացնել առաջին game-day-ը, հավաքել ռետրո և ֆիքսներ։

26-45 օր

Ավելացնել AZ/կախվածության մակարդակի սցենարները (արտաքին PSA, BD-lag)։

Ավտոմատիզացնել nightly-քաոսը staging-ում։ պատրաստել «սեզոնային» սցենարներ (պիկի)։

Փորձերի կատալոգը և կազմակերպության համար հաշվետվությունները/SNE-ի համար։

14) Հասունության մետրերը

Կրիտիկական երթուղիների 3880 տոկոսը ունեն ռուսական փորձարկումներ և steady-state մետրեր։

Avto kill-switch-ն աշխատում է p99/error-rate շեմերը ավելացնելիս։

Եժեքվարտալ 'game-day մակարդակի AZ/տարածաշրջանի; 241 անգամ/մես - ռուսական կախվածության սցենարը։

MTTR-ը նվազում է բարելավման ցիկլից հետո, «էքսպոզիցիոն դեպրեսիայի» հարաբերակցությունը նվազում է։

«Անսպասելի» անկումների մասնաբաժինը իրական ձախողումների ժամանակ ձգտում է զրոյի։

Դաշբորդները ցույց են տալիս «կայունությունը» որպես KPI (burn-rate, վերականգնման ժամանակը, հաջողակ DR գործողությունների մասը)։

15) Guardrails-ի և stop-ի ձգողականների օրինակները

Stop 'http _ req _ failed> 1% 3 րոպե, «p99> 1000 ms' 3 պատուհան,» deposit _ success <99։ 5%`.

Blast radius-ի նվազումը 'մանիֆեստի մեքենան, GSLB-ի քաշը, fox-միգրացիայի անջատումը։

Stop-ի թիմը 'մեկ կոճակ/ջութակ տրամաբանական պատճառներից։

16) Մշակույթ և գործընթացներ

Հաոսը MSE-ռիթմի մի մի մասն է, ոչ թե «էքստրիմ»։

Թափանցիկ հաշվետվությունները, խոցելիության ճանաչումը, ուղղիչ գործողությունները։

Դասընթացը on-call, սիմուլյացիոն հաղորդակցություններ հաճախորդների հետ/գործընկերների հետ։

SLA/SLO-ի և ալգորիթմների հետ կապը, քաոսը պետք է բարձրացնի, ոչ թե պայթեցնել։

17) Եզրակացություն

Chaos Engineering-ը «հույսը ինը» վերածում է ապացուցված կայունության։ Ձևակերպեք steady-state, տեղադրեք փետուր, կոտրեք փոքր և վերահսկվող, դիտեք SLO-ը և բիզնես-SLI-ը, գրանցեք և ավտոմատիզացրեք բարելավումները։ Այդ ժամանակ իրական ձախողումները կդառնան կառավարվող իրադարձություններ 'կանխատեսելի RTO, պաշտպանված error-budget և թիմի պատրաստակամությունը առանց խուճապի։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։