GH GambleHub

Կայունության փորձարկումը

1) Հիմնական հասկացությունները և նպատակները

Մոսկվան (reliability) հնարավորության հավանականությունն է։ կայունությունը (resilience) վարքագծն է ձախողումից հետո։

SLO/սխալ բյուջե 'դեգրադացիայի «ընդունակության» չափանիշներ։

Steady-state hypothesis: կայուն մետրիկի պաշտոնական սպասումը (օրինակ, p95 <200 ms, error rate <0։ 5%). Փորձը համարվում է հաջողակ, եթե հիպոթեզը պահպանված է։

Ձախողումների տեսակները ՝ ցանցային (լատենտ, կորուստ/դուբլի, բացթողումներ), հաշվարկային (CPU, հիշողություն), սթորիջը (I/O, սկավառակի սպառումը), կախվածությունը (5xx, timeouts, rate-limit), տրամաբանական (մասնակի միջադեպեր, "բժշկական դեգրադացիա"), վիրահատական (ռելիզացիա, դիֆերենցիալ), մուգ) "(split-brain, ժամացույցի հերթափոխեր)։

2) Կայունության բուրգը

1. Unit-թեստերը տրամաբանության (retrai, idempotenty, timauta)։

2. Fox-inject ադապտերների հետ (Testcontainers/tc-netem)։

3. Ինտեգրացիոն/ինտեգրված ցանցը/BD/cashams և real-world պրոֆիլներ։

4. Haos-փորձարկումները pre-2019-ում (հետո սահմանափակ վաճառքով) runbook 'am-ով։

5. Գեյմ դեյը թիմի բեմական ուսուցումներն են (մարդիկ + գործիքներ)։

3) Դիտարկումը որպես հիմք

SLI 'p50/p95/p99, error rate, saturation (CPU/heap/FD/IOPS), drop/timeout, queue depth։

Հետքերը '«նեղ տեղեր» գտնելու համար մերժման տակ։

Սեմանտիկ կայունության չափումները 'հաջողակ graceful-degrade, shed հարցումների մասնաբաժինը, ինքնազարգացման արագությունը (MTTR)։

Փորձարկումների մակնշումը '"chaos. experiment _ id ', «phant = inject/recover» իրադարձությունների/լոգարանների մեջ։

4) Մերժումների միգրացիայի կատալոգը (faul.ru)

Ցանցը 'ուշացում/ջիտթեր, կորուստ/կրկնօրինակներ/ռեդերինգ, աշխատանքային կարողությունների սահմանափակում, փաթեթային «փոթորիկներ», TIM բեկորներ։

Իսպանիան 'CPU սահմանափակումը, արտահոսքը/հիշողության լիմիտները, GC-ի դադարները, ձայնագրիչների սպառումը, «clock skew» -ը։

Պահեստը 'լատենտության աճը, EROFS, ENOSPC, կրկնապատկման դեգրադացիա, առաջնորդի կորուստ։

Կախվածություն ՝ 5xx/429, դանդաղեցում, ֆլամպինգ III, հնացած հավաստագրեր, rate-limit, «մասնակի պատասխաններ»։

Տվյալները 'ձայնագրման վնասվածքը, հոսքերի «աղեղները», իրադարձությունների կրկնությունը, տարբերակների հակամարտությունները։

Վիրահատությունները 'ձախողված թողարկումը, ֆիչի դրոշը, քրոնգ դրեյֆը, ձեռքի սխալը (սիմուլյացիայի մեջ)։

5) Կայունության պատրանքները (ինչ ստուգել)

Retrai ջիթերի և թայմաուտների հետ յուրաքանչյուր RPC-ում։

Circuit Breaker (բացահայտում/կիսագունդը, էքսպոնենցիալ վերականգնումը)։

Bulkheads (փամփուշտների/հերթերի մեկուսացում կրիտիկական օրինագծերի վրա)։

Load Shedding (նետում ենք ցածր պրիմիտիվ հարցումները հագուստի ժամանակ)։

Backpressure (ազդանշաններ վերևի շղթայի վրա, զուգահեռ լիմիտներ)։

Idempotency (idempotenty բանալիները «կողմնակի էֆեկտների» վրա)։

Կեշալիզացիան և ածխաջրածինները աղբյուրի քայքայման դեպքում։

Graceful Degradation (հեշտ պատասխաններ, stale տվյալները, ֆիչի անջատումը)։

Timeout-budget (ընդհանուր ժամանակը զանգերի շղթայի վրա)։

Ատոմականություն/փոխհատուցում (Saga/Disbox/Transactional Inbox)։

Քվորումները և կրկնօրինակումը (R/W քվորումները, կոնսիստենցիայի դեգրադացիան հասանելիության համար)։

Anti-entropy/reple (վերականգնումը իրադարձությունների «անցքերի» ժամանակ)։

6) Միգրացիայի և սպասումների բաղադրատոմսերը (կեղծ)

Ռետրեյը ջիթթերի և բրեյքերի հետ


for attempt in 1..N:
if breaker. open(): return fallback()
res = call(dep, timeout = base 0. 8)
if res. ok: return res sleep(exp_backoff(attempt) jitter(0. 5..1. 5))
if attempt == N: breaker. trip()
return fallback()

Շեյդինգը և բեքփրեշերը


if queue. depth() > HIGH          cpu. load() > 0. 85:
if request. priority < HIGH: return 503_SHED limiter. acquire () # constrain concurrency

Idempotenty


key = hash("payout:"+external_id)
if store. exists(key): return store. get(key)
result = do_side_effect()
store. put(key, result, ttl=30d)
return result

7) Փորձարկումներ ՝ սցենարներ և վարկածներ

7. 1 «Պղնձի կախվածությունը»

Միգրացիա ՝ + 400 ms p95 արտաքին API-ի մոտ։

Սպասումը 'թայմաուտների աճը' X%, բրեյքերի հայտնաբերումը, fallback-պատասխանները, p99 մգ

7. 2 «Քեշի մասնակի կորուստ»

Միգրացիա 'Redis/Kes-Shard հանգույցների 50 տոկոսը հրաժարվելը։

Սպասումը 'մեծացված miss, բայց առանց ավալանշի աղբյուրի (request coalescing/իմբուտաբելային TTL), ավտո-տաքացում և վերականգնում։

7. 3 «Split-brain BD»

Միգրացիան 'առաջնորդի կորցնելը, կրկնօրինակման անցումը։

Սպասումը 'կարճ deny ձայնագրություններ, կարդում ենք քվորումից, տվյալների կորստի բացակայությունը, Direbox-ը չի կորցնում հաղորդագրությունները։

7. 4 «ENOSPC/սկավառակը լցված է»

Միգրացիա 'սկավառակը 95-100 տոկոսով։

Սպասումը 'լոգարանների վթարային ռոտացիաները, ոչ արգելափակող փուչիկների մերժումը, քննադատական ամսագրերի պահպանումը (WAL), ալերտերը և ինքնանունը։

7. 5 «Burst Express»

Միգրացիա: 353 RPS տաք էնդպոինտին 10 ռուբլիա

Սպասումը ցածր գերակայություն է, կայուն p95 «միջուկային» ճանապարհներ, սահմանների սահմաններում հերթերի աճը, DLQ փոթորիկների բացակայությունը։

7. 6 «Clock Skew»

Միգրացիա ՝ ժամանակի բարձրացումը +/242 ռուբլով

Սպասումը 'ճիշտ TTL/ստորագրություն (leeeway), միապաղաղ թայմերներ գետերում, վալիդային հոսանքները թույլատրելի դրեյֆով։

8) Փորձերի միջավայրը և անվտանգությունը

Սկսեք pre-105-ից, սինթետիկ տվյալները, որոնք ամենամոտ են դելգայի/տեղաբանության երկարությանը։

Երկարության մեջ միայն վերահսկվող պատուհաններն են, ֆիչի դրոշները, շրջադարձային ամպլիտուդները, Auto-racat-ը, կարմիր կոճակը։

Guardrails: RPS/սխալների սահմանափակումներ, SLO-պաշտպաններ, կրիտիկական հանդիպումների ժամանակ օրինագծերի արգելափակում։

Պարտական է runbook-ին, թե ինչպես արձագանքել, ում զանգահարել, որտեղ դիտել։

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

Փորձարկումների կատալոգը որպես կոդ (YAML/DSL) 'նպատակներ, ներարկումներ, մետրեր, շեմեր, «կոճակներ»։

Smoke-chaos-ը յուրաքանչյուր ենթախմբում 'կարճ ներարկումներ (օրինակ, 2 րոպե + 200 ms կախվածության) սթեյջում։

Մատրիցայի գիշերային պրոգրեսները 'ծառայությունները մերժման տեսակներ են։

Թողարկման գեյթ 'արգելք, եթե դիմադրությունը ցածր է շեմից (օրինակ ՝ «fallback coverage <95%» «դանդաղ կախվածության տակ»)։

10) Տվյալները և կոնսիստենտալությունը

Ստուգեք փոխհատուցումը (Saga), մասամբ կատարված վիրահատությունները պետք է հասնեն համաձայնեցված վիճակի։

Փորձարկեք իրադարձությունների կրկնությունները/դուբլները, out-of-order առաքումը, «անցքերը» և ծալքերը։

Ստուգեք տիրույթի ինվարանտները ձախողումներից հետո 'հավասարակշռությունը բացասական չէ, գործարքները չեն կրակում ", սահմանները չեն խախտվում։

11) Anti-patterna

Փորձարկել միայն happy-path և բեռը առանց ձախողումների։

Առանց ջիթերի Ռետրայի փոթորիկը քայքայվում է։

Համաշխարհային թայմաութ բյուջեի բացակայությունը բացատրում է կասկադային թայմաուտները։

Բոլոր խնդիրների համար միասնական փամփուշտը բացատրվում է մեկուսացման բացակայությամբ (bulkheads)։

«Անվերջ» հերթերը բացատրում են լատենտության/OOM աճը։

Փորձերի զրոյական հեռուստաչափությունը բացատրում է «կույր» քաոս-պրակտիկան։

Հաոսը վաճառում է առանց պատասխան/լիմիտներ/պատասխանատու սեփականատեր։

12) Ճարտարապետի չեկի թերթիկը

1. Որոշված է steady-state վարկածը և SLO-ն։

2. Յուրաքանչյուր RPC-ում կան թայմաուտներ, ռետտա ջիթերի, բրեյքերների հետ։

3. Իրականացվել են bulkheads, limiters, backpressure, load-shedding?

4. Քեշը 'coalescing, պաշտպանություն քեշի փոթորիկներից, տաքացնելով։

5. Delbox/Saga կողմնակի էֆեկտների համար, idempotent բանալիներ։

6. Քվորումները/կրկնօրինակումը/ֆեյլովերը փորձարկվել են։

7. Կա փորձարկումների կատալոգ, nightly քաոս և խաղեր CI/CD-ում։

8. Մետրիկները/հետքերը նշում են փորձարկումները, կան դաշբորդեր։

9. Runbook "և" կարմիր կոճակը "պատրաստ են, պատասխանատվությունը նշանակված է։

10. Dev/MSE/Supert-ի մասնակցությամբ։

13) Մինի գործիքները և ոճերի օրինակները (YAML-sketchi)

Ցանցը (tc/netem)

yaml experiment: add-latency target: svc:payments inject:
netem:
delay_ms: 300 jitter_ms: 50 loss: 2%
duration: 10m guardrails:
error_rate: "< 1%"
p95_latency: "< 400ms"

CPU/Heap

yaml inject:
cpu_burn: { cores: 2, duration: 5m }
heap_fill: { mb: 512 }

Կախվածությունը

yaml inject:
dependency:
name: currency-api mode: slow p95_add_ms: 500 fallback_expectation: "serve stale rates ≤ 15m old"

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

Կայունության փորձարկումը ոչ թե «քաոսի հնարք» է, այլ մի առարկա, որը կանխատեսելի համակարգ է դարձնում ձախողումների տակ։ Պարզ վարկածները, հեռուստացույցները, կառավարվող փորձարկումների կատալոգը և ներկառուցված պաթերտայի ճարտարապետությունը (թայմաուտներ, բրեյքերներ, մեկուսացում, դիցիցիտացիա) վերածում են պոտենցիալ պատահարների վերահսկվող սցենարների։ Թիմը վստահություն է ստանում, իսկ օգտագործողները կայուն ծառայություն են նույնիսկ ձախողումների պայմաններում։

Contact

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

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

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

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

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

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