Վիրահատություն և Ծառայության կախվածության կառավարման
Ծառայությունների կախվածությունը
1) Ինչո՞ ւ է դա անհրաժեշտ
Ցանկացած վաճառական պլատֆորմ գրաֆիկ է ՝ օգտագործողները, Edge/API-ի օգտագործողները, wwww.BD/kashi-ը, արտաքին պրովայդերները (վճարումները, KYC, խաղերի պրովայդերներ)։ Count-ի մի կողոսկրում սխալը հաճախ «քայլում» է ամբողջ ցանցում 'ձգձգումներ, ռելսեր են աշխատում, հերթերը մոռանում են, տեղի են ունենում կասկադային մերժումներ։ Կախվածության կառավարումը նվազեցնում է «պայթուցիկ շառավիղը» և կանխատեսելի է դարձնում։
Նպատակները
Տեսնել զանգերի ամբողջական գրաֆիկը և հասկանալ, թե ով է կախված։
Կանխել կասկադային ձախողումները և «գետերի փոթորիկը»։
Պլանավորել օրինագծերը, հաշվի առնելով ռուսական և SLO-քարոզչությունը։
Բարձրացնել MTTR 'ավելի արագ գտնել իրական առաջադիմական հանգույցը (root cause)։
2) Կախվածության տեսակներ
Սինխրոն (RPC: REST/gRPC/GraphQL), լատենտության/հասանելիության կոշտ կապը։ Մեզ անհրաժեշտ են թայմաուտներ, բրեյքերներ, գետերի բյուջե։
Ասինխրոն (Event/Stream: Kafka/Rabbit/Pulsar) 'ավելի կայուն կապ, բայց կան lag/backlog և առաքման սեմանտիկան (at-leport-once, idempotency)։
Express (DB/Cache/Object store) ՝ բաժանված ռեսուրսներ wwww.connects, connects/IOPS, eviction, կրկնօրինակումը։
Արտաքին պրովայդերները (PFC/KYC/խաղային պրովայդերներ) 'քվոտաներ, վճարովի զանգեր, սպասարկման պատուհաններ, իրավաբանական SLA։
Վիրահատական (ալգորիթմներ, ֆիչեֆլագներ, դելեգներ) 'անուղղակի կախվածություններ ռուսական, գաղտնիքների, շեմա ռեգիստրի միջոցով։
3) Ծառայությունների կատալոգը և կախվածության գրաֆիկը
Ինչ ենք գրանցում (Backstage/Windows Catalog/CMDB)
Սեփականատերերը (Squad/chat/On-call rota), ռեպոն, չորեքշաբթի, արտեֆակտները։
API պայմանագրերը (OpenAPI/AsyncAPI), տարբերակները, համատեղելիությունը (back/forward)։
Ներառված/ծագող կախվածությունները (upstream/downstream) տիպով (www.nc/async), քննադատությունը, SLO սպասումները։
Թայմաուտների/ռետրերի, բրեյքերների, bulkhead-puls բյուջեն։
Քվոտաների և արտաքին ինտեգրիաների սահմանների մասին տվյալները։
Քարտի մինի-օրինակ
`service: payments-api`
Upstream: `user-profile` (sync), `risk-score` (async).
Downstream: `PSP-X` (sync, квота 2k RPS), `ledger` (async).
SLO: p99 24300 ms, 99։ 9% uptime.
Թայմաուտները ՝ 200 մզ «PMS-X», 150 մզ դեպի «user-profile»։
Retrai: 2 էքսպոնենցիալ ուշացումով, ջիտտերը։
Բրեյկեր 'բաց 30-ով 5 տոկոսով սխալների/10 վրկ։
4) SLO-քարոզչությունը և «լատենտության բյուջեն»
Սինխրոն զանգերի շղթայի դեպքում, տեղադրված SLO-ն ձևավորվում է ձերբակալությունների գումարից և ձախողումների հավանականությունից։
Սկզբունքները
Հարցման բյուջեն կոտրվում է ներքև 'առջևի SLO 500 ms wwww.Edge 50 ms www.API 150 MS-ով, 200 MS-ի վճարային ծառայություններով, 100 մզ պրովայդեր։
Թայմաուտները «դուրս են գալիս ավելի կարճ, քան ներսից», պատճառող թայմաուտը ավելի քիչ ներքին է, որպեսզի ռեսուրսները թարմացվեն, և ոչ թե զոմբիի մարտահրավերները։
Retrai միայն անվտանգ միգրանցների/բացառությունների և ջիթերի հետ։ առանց հետքի նեղ տեղերի թայմաուտների վրա (հակառակ դեպքում «փոթորիկ»)։
5) Պայմանագրեր և համատեղելիություն
API տարբերակումը 'SemVer-ը մրցույթի համար; backward-compatible փոփոխությունը «optional» դաշտի միջոցով, սխեմայի ընդլայնումը։ հեռացումը միայն «ավանդի ժամանակահատվածի» միջոցով է։
Consumer-driven drac.ru (CDC) 'սպառողների թեստերը (Pact-նման) սկսվում են CI-ի պրովայդերի դեմ։ թողարկումը արգելափակված է անհամատեղելիության դեպքում։
Սխեմայի գրանցումը (Async) 'տոպիկների/իրադարձությունների տարբերակը, սխեմաների էվոլյուցիան (Avro/JSON-Schema), «can-read-old/can-write-new» քաղաքականությունը։
6) Ինժեներական արտոնագրեր կայունության համար
Timeouts: Մենք առանձնացնում ենք SLA բիզնեսը տեխնիկական սպասումներից։ յուրաքանչյուր բանալին ակնհայտ թայմաութ է։
Retries + backoff + jitter: Ոչ ավելի քան 2-3 փորձեր, հաշվի առնելով գաղափարախոսությունը։
Circuit Breaker: «արագ անկում» դաունստրիման քայքայման ժամանակ։ half-բաց փորձարկումներ։
Bulkhead (փամփուշտների մեկուսացում) 'տարբեր դաունստրիմների համար' հոսքերի/ենթատեսակների առանձին փամփուշտներ։
Rate-limit/Leaky-bucket: որպեսզի չսպանի dounstrims պիկի ժամանակ։
Idempotency & deduplication 'idempotenty բանալին հարցման/հաղորդագրության մակարդակում։ պապիկ լեյտենանտներ և ռետրո-հերթեր։
Քեշինգը և ֆոլբեկները 'տեղական/բաշխված քեշներ, «stale-wile-revalidate» արձանները, բովանդակության քայքայումը։
Կեղծ-2019 (գաղափարը)
outbound:
psp-x:
timeout_ms: 200 retries: 2 retry_on: [5xx, connect_error]
backoff: exponential jitter: true circuit_breaker:
error_rate_threshold: 0. 05 window_s: 10 open_s: 30 pool: dedicated-psp (max_conns: 200)
7) Կախվածության զգացում
Բաշխված ուղիները (Trance ID, Baggage) 'տեսնել հղումների հարցման ճանապարհը։ քնած են թեգերի հետ առաջացող մարտահրավերների վրա։ service`, `retry`, `timeout`.
Метрики per-dependency: `outbound_latency_p99`, `outbound_error_rate`, `open_circuit`, `retry_count`, `queue_lag`.
Dashbords Upstream/Downstream
Ծառայության քարտեզը գույնի ինդիկացիայով SLO և սխալ կողոսկրներ։
«Top N խնդրահարույց կախվածությունը» վերջին շաբաթվա ընթացքում։
«Blast radius» -ը ծառայությունների ցուցակ է, որոնք վնասվում են X- ի անկման ժամանակ։
Հարաբերակցության լոգները 'ներառել «trace _ id »/« բանաձև _ id» ամսագրերում։
8) Թողարկումների կառավարումը ՝ հաշվի առնելով կախվածությունը
Dependency-ault-pline: պրովայդերի թողարկումը արգելափակված է, եթե CDC-ի սպառողների թեստերը կարմիր են։
Աստիճանական տերմինալը (ֆիչեֆլագներ) 'նոր դաշտեր/էնդոինտներ, սպառողների 1 տոկոսի համար 10 տոկոսը 24100 տոկոսն է։
Կանարյան օրինագծերը 'ստուգում ենք հիմնական կախվածությունը և «լատենտության բյուջեն»։
Սխեմաների համատեղելիությունը 'արտադրողը գրում է «vNew», կոնսյուրները կարդում են «vOld/vNew»; անցնելուց հետո 'հին դաշտերի աղբի հավաքումը։
9) Պատահականներն ու էսկալացիաները գրաֆիկի վրա
Մենք որոշում ենք «իրական մեղավորը» 'al.ru-հարաբերակցությունը, եթե դեգրադացնում է «PMS-X», ոչ թե լանդշաֆտի ամբողջ «արբիտրաժային թուղթը», այլ ձեռնարկության սեփականատերը։
Ավտոմատացումը 'ֆիչեֆլագ «նվազագույն ռեժիմը» (ավելի քիչ ծանր էնդպոինտներ, կտրված խմբեր, ոչ կրիտիկական ֆիգուրի անջատումը)։
Գարդերը կասկադներից. Մենք սահմանափակում ենք զուգահեռականությունը, անջատում ենք գետերը տաք ճյուղի վրա, բացում ենք բրեյքերը նախօրոք (pre-open)։
Runbook ձևանմուշ
Ախտորոշումը 'ինչ dashbords/metriks, ինչպես ստուգել քվոտաները/limita։
Գործողությունները 'նվազեցնել RPS-ը, անցնել պրովայդերի վրա, ժամանակավորապես ներառել քեշի պատասխանները։
Արձագանք և վալիդացիա 'վերադարձնել պարամետրերը, համոզվել p95/p99 և error-rate-ում։
10) Կախվածության քննադատության մատրիցը
Գնահատեք ամեն կապ առանցքների հետ
Կանոնները
«Կրիտիկական» համար կրկնակի պրովայդինգ, բրեյքերներ, առանձին փամփուշտներ, քաոս թեստեր։
«Բարձր» համար, գոնե դեգրադացիա և «կանաչ կոճակ» ֆիչիի անջատման համար։
«Միջին/ցածր» համար ռետրոյի և հերթերի բյուջեի սահմաններն են։
11) Գործընթացը 'գույքագրումից մինչև շահագործումը
1. Գրաֆիկի կառցումը 'հավաքել իրական մարտահրավերներ (ուղիներ) + ռասայական կախվածություններ կղզիներից։
2. Նշանակել սեփականատերերին 'յուրաքանչյուր ծառայության և արտաքին ինտեգրման համար պատասխանատու on-call։
3. Որոշեք SLO և բյուջեները 'լատենտ/սխալներ, թայմաուտներ/ռետրաններ/պուլներ։
4. Պայմանագրեր ձևավորելը 'OpenAPI/AsyncAPI, սխեմաներ և CDC։
5. Միացրեք կայունության արտոնագրերը 'timeouts/retries/circuit/bulkhead։
6. Տեղադրել dashbords և alerta per-dependency։
7. Տեղադրել ռելիզային խաղացողներ 'բլոկը CDC/112/կանարեյկա։
8. Disgame-days: քաոս փորձարկումներ հիմնական կողոսկրների անկման համար։
9. Postmorthems-ը կապի ֆոկուսով, որն ուժեղացրեց կասկադը, ինչպես կապել շառավղը։
12) Ալերտայի կախվածությունը (կանոնների գաղափարները)
Սինխրոն դաունստրիմ
`outbound_error_rate{to="X"} > 3% FOR 10m` → warning; `>5% FOR 5m` → critical.
`outbound_p99_latency{to="X"} > SLO1. 3 FOR 10m` → warning.
- "circuit _ open _ to =" X "= = = 1 FOR 1m 'page սեփականատիրոջը։
- Retrai
- "retry _ rate _ to =" X "=> baseline2 FOR 5M '+ + www.bound _ rps> 0 - ը փոթորկի վտանգն է։
- `consumer_lag{topic="Y"} growth > threshold FOR 10m` + `hpa at max` → крит.
- Արտաքին քվոտաները
- "usage _ delta _ provider =" PMS-X "com> 90% no '- նախազգուշացում, երթուղիների ինքնաբերություն։
13) Anti-patterna
«Մեկ ընդհանուր հոսքի փամփուշտը բոլոր դաունստրիմների վրա»։ Ընդհանուր 'head-of-www.blocking։ Կիսեք փամփուշտները։
Առանց թայմաուտների/անվերջ ելույթների։ Այսպես է ծնվում փոթորիկը։
Կույր վերափոխումներ ոչ գաղափարական վիրահատությունների համար։ Դուրս գրելու դուբլները/2019։
Թաքնված «ընդհանուր BD» որպես կապի կետ։ Ուժեղ մրցակցություն և արգելափակումներ։
API տարբերակը փոխվում է առանց CDC և դեպրեսիտ պլանի։ Բռնեք զանգվածային անկումները։
Դիտարկումը միայն ծառայություններով, ոչ կապերով։ Դուք չեք կարող տեսնել, թե որտեղ է պտտվում շղթան։
14) Dashbords: Նվազագույն հավաքածու
Windom Map: ծառայության ինտերակտիվ քարտեզը կողոսկրերի (latency/error/volume) հետ։
Upstream/Downstream Overview-ի սեփականատիրոջ համար 'կախվածությունները (ովքեր զանգահարում են), որոնք գալիս են (ում համար), «բարձր խնդիրներ»։
Dependency Corilldown: Հատուկ կապի քարտը ՝ p50/p95/p99, դասարանների սխալները, բաց բրեյքերի տոկոսը, ռետրոները, փամփուշտները, քվոտաները/կոստը։
Releault Express-ը 'ածխաջրածինների/ֆիչեֆլագների նույնականացումը կախվածության գծապատկերներում։
15) Ներդրման չեկի ցուցակ
- Ծառայությունների կատալոգը սեփականատերերի և պայմանագրերի հետ (OpenAPI/AsyncAPI)։
- Կախվածության ամբողջական գրաֆիկը ճանապարհներից (ամեն օր թարմացնել)։
- SLO ծառայության և «լատինական բյուջեների» ցանցում ներքև։
- Ակնհայտ թայմաուտներ, ջիթեր, բրեյքերներ, bulkhead մեկուսացում։
- CDC թեստերը CI-ում որպես ռելիզային գեյթ։
- Dashbords per-dependency և քարտեզը։
- Alerts տղաների վրա + supression-ը առաջին հերթին։
- Game-days: պրովայդերի/105/տոպիկի նվազում և քայքայման ստուգում։
- Դեգրադացիայի պլանը 'ո՞ ր ֆիգուրներն ենք անջատում, ո՞ ր քեշերը ենք միացնում։
- Հետմորտիմները կապվածության նվազեցման գործողությունների հետ։
16) KPI կախվածության կառավարման որակը
Dependency MTTR-ը 'ռեբրա վերականգնումն է։
Blast Radius Index-ը 'ավելացված ծառայությունների միջին թիվը, երբ մեկը ընկավ։
Coupling Score-ը 'բոլորի միջև կախվածության մասնաբաժինը։ տենդենցը նվազեցնելու միտում է։
CDC Pass Rate: ածխաջրածինների տոկոսը առանց խախտումների։
Retry Storport/ամիս 'նպատակային արժեքը 240։
Cost of External Calls: Արտաքին զանգերի արժեքը 1k RPS-ով (տեսնել քաշման/ֆոլբեկների էֆեկտը)։
17) Արագ սկիզբը (դեֆոլտներ)
Թայմաուտները ՝ կառավարման բյուջեի 70-80 տոկոսը։ հարցման վերին մասը <ներքին գումար։
Retrai: max 2, միայն idempotent 5x/ցանցային, backoff + jitter-ից։
Բրեյքերը 'սխալների 5 տոկոսը 10-ի, բաց = 30-ի, half-բաց փորձարկումների համար։
Bulkhead: առանձնացված փամփուշտներ/limits պարունակվում են յուրաքանչյուր dounstrim-ի վրա։
CDC 'պարտադիր է բոլոր հանրային API-ի և տոպիկների համար։
Async-նախապատվություն. Որտե՞ ղ կարող եք անցնել իրադարձություններին/հերթին (ժամանակի փոխանակում)։
18) FAQ
Q 'Ի՞ նչն է ավելի կարևոր, թե՞ բրեյքերը։
Ա 'Երկուսն էլ։ Ռետրոյը փրկվում է կարճ ձախողումներից, բրեյքերը պաշտպանում է պերմանենտալ քայքայումից և փոթորիկներից։
Q 'Ինչպե՞ ս հասկանալ, որ կապը չափազանց փխրուն է։
A 'Սխալների բարձր հարաբերակցությունը, թայմաուտների ցածր պաշարները, հաճախակի գետերը, ֆոլբեկների/քեշի բացակայությունը, սինխրոն երկար շղթաները։
Q: Ինչու՞ CDC-ն, եթե մենք ունենք ինտեգրացիոն թեստեր։
A: CDC-ն գրանցում է սպառողի սպասելիքները և կոտրում է պրովայդերի թողարկումը անհամատեղելիության դեպքում, ավելի շուտ, քան կոդը։