Վիրահատությունները և Կառավարումը կատարվում են վիրահատական ենթակառուցվածքի մասշտաբով
Վիրահատական ենթակառուցվածքի մեծացումը
1) Ինչու՞ և ի՞ նչ կարելի է համարել «մեծացում»
Մեծացումը պլատֆորմի համակարգային կարողությունն է մեծացնել (RPS/TPS, կոնեկտներ, IOPS, throughput) և տվյալների ծավալը առանց SLO-ի կորստի և վերահսկվող արժեքի։ IGaming/fintech-ի համար դա ուղղակի փողի մասին է 'դեպոզիտների փոխակերպում/108, խաղային խաղեր և հաշվարկներ։
Նպատակները
Պահել SLO-ը բեռի X-կարճ աճի և սեզոնային գագաթների ժամանակ։
Ապահովել կանխատեսելի մեծացման ժամանակը (minutes, www.t hours)։
Պահպանել տնտեսությունը 'cost/RPS, cost/գործարք, cost/1k իրադարձություններ։
2) Լայնացված պլատֆորմի սկզբունքները
1. Հորիզոնական ալ-նախ 'բաժանումը փոքր, ստալեսսի ծառայություններին։ վիճակը տվյալների կլաստերում է։
2. Back-pressure-ը և հերթերը 'արագությունը հարթելը, պաշտպանությունը փոթորիկներից։
3. Բոլոր շերտերում 'client/edge/ծառայություն/BD։
4. Idempotention-ը և կրկնությունը 'անվտանգ retray, www.box, dedup։
5. Կախված սահմանափակումներից 'թայմաուտներ, բրեյքերներ, bulkhead-մեկուսացում, rate-limits։
6. Դիտարկումը տարաների ազդանշանների վրա 'headrome, p95/p99, lag, connects, քվոտաներ։
7. HPA/MSA/Cluster Autoscaler + stop պայմաններ։
8. Multi-region by design: Անկախ բլոկային գոտիները, տեղական տվյալները, կայուն կեղծարարները։
3) Capacity planning: Ինչպես «հաշվել, թե որքան պետք է»։
Մոդելի մուտքերը ՝ wwww.PS, wwww.D. (ժամ), «կրիտիկական ճանապարհներ», քեշի հիթերի գործակիցներ, միջին payload 'a, SLO և պրովայդերների լիմիտներ։
Արագ գնահատականներ (rule-of-thumb)
RPS wwww.CPU/pods: «pods = RPS p99 _ Time/արդյունավետ _ CPU _ _ ենթա» (30-50% պահեստով)։
Հերթերը '"նվազագույն _ արագություն _ հյուպատոսարան medical _ արագություն _ արտադրողների 1։ 2`.
DB կոննեկտներ ՝ "max _ conns = ակտիվ _ pula _ ծառայություններ միջին _ pool _ size 1։ 3`.
Քաշ 'չափսը = «տաք working-2019 N րոպեում» + 20-30 տոկոսը։
Egress/CDN: egress = հարցումների պիկ միջին պատասխանը (հաշվի առնելով ագրեսիան)։
Headro.ru: Նպատակը 20-40 տոկոսը պիկի վրա (շերտերով)։ 15 տոկոսից ցածր է «capacity uplift»։
4) Մասշտաբի շերտերը և փամփուշտները
4. 1 Edge / CDN / WAF
Քաշումը եզրին (TTL + SWR), գեո հավասարակշռությունը, սեղմումը, HTTP/2/3։
Rate-limits-ը IP/JWT/բանալին պարագծի վրա, պաշտպանություն։
Ֆան-աութ իրադարձությունները (ջեքպոտներ, նախազգուշացում) բրոկերների/pub/sub ալիքների միջոցով։
4. 2 API դարպաս/Backend-for-Frontend
Հորիզոնական մասշտաբը ստատլեսի պոդների վրա, dedicated փամփուշտի վրա։
HPA-ը բիզնես-մետրիկներով 'RPS, p99, հերթը' գողթ-պուլում, ոչ միայն CPU-ում։
4. 3 Ասինխրոն գծեր/սթրիմինգ (Kafka/Rabbit/Pulsar)
Կուսակցության և կոնսումերների մասշտաբները։ խուսափել skew (բանալիներ և բաշխումներ)։
Lag-alerts + վահանակների ավելացում; DLQ-ը և retry-topics-ը։
Retention-ի տակ SLA ռեքոնսիլիայի և ռեպլեյի տակ։
4. 4 Քեշի (Redis/Memcached)
Կլաստերային ռեժիմներ, կրկնօրինակներ, eviction քաղաքականություն (LFU), multiget, pipeline։
Hot-key-ev-ի և ֆոնային խնդիրների բաժանումը, հաճախորդների սահմանները և max-memory policy-ը։
4. 5 Տվյալների հիմքեր
Read-կրկնօրինակները և ընթերցանության ռոտինգը, connational pooling-ը։
Շարդինգը տարածաշրջանի/թենանտի/միջակայքի վրա։
CQRS: Ձայնագրություններ 'վարպետության/առաջնորդի, ընթերցանության վրա' ակնարկներում։
Ինդեքսավորումը և բետա-գրողները (www.box www.stream sink)։
Արխիվացումը և տաք/սառը տվյալները (tiering)։
4. 6 Հիբրիդային/օբյեկտի ձեռնարկություններ
Ուլտրաձայնային, multipart-բեռնումը, CDN-front, ասինխրոն փոխակերպումները։
Պրովայդերի քվոտաները, պոչերի մաքրումը և egress բյուջեն։
4. 7 Պրովայդերներ (PFC/KYC/ստուդիա)
Multi-vendor-ը և kvots/SLO/արժեքը։
Circuit breaker + rate-limit յուրաքանչյուր պրովայդերի վրա, ռետրերի հերթը, «grace-ռեժիմները»։
5) Avto-մեծացումը և hard-Rails-ը
Kubernetes:- HPA: метрики `rps_per_pod`, `queue_depth`, `p99_latency`; `targetAverageValue`.
- MSA 'առաջարկություններ ռեսուրսների վերաբերյալ; թարմացնել գագաթից դուրս։
- Cluster Autoscaler: Nod-Group (spot + on-demand) գերակայություններով։
- PodMedrupics Budget/TopologySpreadConstrainment-ը ՝ գոտիների հավասարություն։
- LimitRange/Resourts Delta 'պաշտպանություն «հարբած» դոպլոներից։
Կեղծ մանիֆեստ HPA
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler spec:
scaleTargetRef: {apiVersion: apps/v1, kind: Deployment, name: api-gw}
minReplicas: 8 maxReplicas: 200 metrics:
- type: Pods pods:
metric:
name: rps_per_pod target:
type: AverageValue averageValue: "120"
- type: Pods pods:
metric:
name: p99_latency_ms target:
type: AverageValue averageValue: "280"
behavior:
scaleUp:
stabilizationWindowSeconds: 90 scaleDown:
stabilizationWindowSeconds: 300
Guardrails (օրինակներ)
«Pause & Rollback», եթե կանարեյքի ժամանակ p99> 1։ 3 baseline 10 րոպե։
«Freeze scale-down» -ը 2019 թվականին, միայն scale-up։
«Stop retries» -ը «open _ circuit = 1» նեղ տեղերում։
6) Multi-region: 108/108 և 108/լոկոմոտիվ/
Blast-մեկուսացված տարածքները 'անկախ կլաստերներ, տեղական գաղտնիքներ/քվոտաներ։
Գլոբալ ռոտինգը 'latency-/geo-based, health-probes, ձեռքով override։
Տվյալները
Տաք 'տեղական + eventium կրկնօրինակումը (strimes)։
Կրիտիկական գործարքները պայմանագրով (ledger/հավասարակշռություն) են։
Failover-Pleybuks-ը 'աղբյուրի կոպիտ փոփոխությունը, TTL-ը, տաքացնելով քեշը։
Վարժությունների ստանդարտը (DR) 'եռամսյակային դասընթացներ RTO/RPO նպատակներով։
7) Ցանցային և ծառայողական արտոնագրեր
Mesh: mTSA, retry/breaker, www.ier det.ru, limita-dunstrim։
EBPF/Observability-ում L4/L7-ում, միավորման սահմանները, պաշտպանությունը head-of-2019-ից։
Ներքին API դռները S2S-ի համար, ընդհանուր rate-limit և աուդիտ։
MSC/black-գոտիների ենթահողերը, NAT/Egress վերահսկողությունը, peering հետ։
8) Արտադրողականություն ՝ թեստեր և ապացույցներ
Load & stress-ի պրոֆիլում + worst-cast-ը։
Soak (երկար) - հիշողության/ձայնագրիչների արտահոսք, latency աճը։
Chaos/game-days 'բրոքերի/պրովայդերի/գոտու անկում, «դանդաղ պրովայդեր»։
Պերֆի ռեգրեսիա CI-ում 'ստանդարտ խաղերի և ավտոմատ խաղերի մի շարք։
Մինի-մատրիցա։
9) Տվյալները և ձեռնարկությունները 'աճի ռազմավարությունները
Ուղղահայաց աճը մինչև «առաստաղը» հորիզոնական/շարդինգ է։
Կարդացեք կրկնօրինակները/քեշը; Batch/asinhron/ամսագիր։
Հիմնական սխեմաները ՝ expand www.migrate www.ract, առանց գլոբալ արգելափակումների։
Արխիվացում 'սառը կուսակցություններ էժան պահեստում + on-demand re-hidae։
Որոնումը 'առանձին ինդեքսներ (OpenSearch/Solr), որոնք ունեն բազմաբնույթ պարամետրեր։
10) պրովայդերների և քվոտաների կառավարումը
Քվոտի քարտեզը (TPS, պատուհաններ, արժեքը); Ալբերտ 'usage _ ratio> 0։ 9`.
Ռոտինգը արժեքով/որակով (smart routing)։
OLA-ի համաձայնությունները SLO-ն են և քվոտաների ավելացման գործընթացը։
Այլընտրանքների փամփուշտը և «տաք» փոխակերպումը։
11) Չափման և մեծացման ազդանշաններ
Մետրիկները (նվազագույն)
Capacity headroom по слоям; `queue_lag/backlog growth`; `kafka ISR`; `db connections`/`repl lag`; `redis evictions`; `open_circuit`/`retry_rate`; `quota_usage`.
Բիզնես մետր 'success rate/դեպոզիտի փոխարկումը, խաղի մեկնարկի ժամանակը։
Արժեքը ՝ cost/RPS, cost/1k calls։
Դաշբորդները
Capacity Overview (headrope, ամենաբարձր ռիսկերը, burn-rate SLO)։
Stream & Queue Panel (lag/backlog, consumer saturation).
DB & Cache (p99, կոնեկտներ, hit/evictions)։
Providers & Prodtas (TPS, timeouts, արժեքը, ռուսական)։
Change Safety (մինչև/թողարկումից հետո, կանարեյկան, ավտոմեքենաները)։
Ալերտա (գաղափարներ)
ALERT HeadroomLowAPI
IF capacity_headroom{layer="api"} < 0. 15 FOR 10m
ALERT KafkaBacklogAtRisk
IF (consumer_lag > 5e6 AND rate(consumer_lag[5m]) > 5e4) AND (hpa_desired == hpa_max) FOR 10m
ALERT DBConnectionsNearMax
IF active_conns / max_conns > 0. 85 FOR 5m
ALERT ProviderQuota90
IF usage_quota_ratio > 0. 9 FOR 5m
12) FinOps 'մեծացնել շահավետ
Արդյունավետության գործակիցները 'cost/RPS, cost/դեպոզիտ, cost/1k իրադարձություններ։
Right-sizing: SNA/առաջարկություններ, «over-provisioned» զեկույցներ։
Spot/Winemptible-ը քննադատական չէ։ Reserved/Committed-ը ռուսական բեռի համար։
Egress բյուջեն և քեշինգը, CDN/edge ofload-ը։
Լոգարանների հավաքումը և արխիվացումը արժեքային մակարդակում (hot vs cold)։
Նախազգուշացման քվոտաները (soft-cap) և Auto-ticets-ը ընդլայնելու համար։
13) Գործընթացներ և մարդիկ
Change Live 'kanareks, ficheflagy, կանգառներ ռեգրեսիայի ժամանակ։
Պատահականության պատրաստակամությունը 'runbook "և" որտեղ ավելացնել հզորությունը "," ինչպես փոխել տարածքը "։
Պիկի պլանավորումը '2019/կիսագնդերի/քարոզարշավների օրացույցը և պրովայդերների պատուհանները։
Disgame-days և DR ուսուցումները։
Սեփականատիրոջ մատրիցը 'ով կարող է «կոճակ ապրել» ֆեյլովերի վրա/քվոտաների ավելացում։
14) Ներդրման թերթերը
Հաճախականության գործարկումը (2-4 շաբաթ)
- Կրիտիկական ճանապարհների և սահմանների քարտեզը (շերտերով), headrope նպատակը 30 տոկոսն է։
- HPA բիզնես չափումների + Cluster Autoscaler; PDB/SpreadConstraints.
- Հերթերը տաք ճանապարհների վրա, idempotency-keys, www.box։
- Քեշի 'hit նպատակները 90%, evictions քաղաքականությունը, հիմնական ինդեքսները։
- DB: read կրկնօրինակներ, ձիերի փամփուշտներ, շարդինգի պլան։
- Պրովայդերներ 'մուլտֆիլմ-վենդոր, քվոտաներ, բրեյքերներ/ռեփեր։
- Dashbords «Capacity/Stream/DB/Providers», Alerts թիվ 11-ից։
- Կանարեյկան և ավտոմեքենաները «մինչև/հետո»։
- DR-pleybuk և մեկ մասնակի ֆեյլովեր դասընթացը։
Մեծ պիկի առջև
- Տաքացնելով քեշը, HPA/ASG, warm-standby կրկնօրինակը։
- Պրովայդերների քվոտի բարձրացումը, ռուսական smart-routing։
- Dinight-mode ճնշումները ոչ ռիթմիկ ալերտների համար։
- Ֆիչեֆլագ «safe mode» պատրաստ է ակնթարթային ներառման համար։
15) Anti-patterna
Ուղղահայաց ապգրեյդը «մինչև հիմքը» հորիզոնական փոխարեն։
Հոսքերի/շարժիչների ընդհանուր փամփուշտը բոլոր դաունստրիմների վրա (head-of-2019)։
Ռետրոյը նեղ վայրերի թայմաուտներում է, ջիտերի բացակայությունը փոթորիկ է։
Ոչ մի հիստերեզիա ալերտներում և scale-քաղաքական գործիչներում «փակցնում» է։
Միասնական գլոբալ ԲԴ-ն առանց շարդինգի և տվյալների բազայի։
Կույր հավատը KPK վենդորի վրա առանց թայմաուտների/ռետրերի/դիտարկման վերահսկման։
DR ուսուցումների բացակայությունը 'ֆեյլովերը «միայն թղթի վրա»։
16) KPI մասշտաբը
SLO պահպանումը պիկի վրա (p95/p99, success rate)։
Headro.ru-ի շերտերը 104-ին։
MTSA (Mean Time To Scale) - մինչև ավելացված ռեսուրսների հայտնվելը։
Backlog/Lag Resolution Time-ը գագաթից հետո հերթերի հավաքման ժամանակն է։
Change Failure Rate-ը ակտիվ աճի ժամանակահատվածում։
Cost/RPS և խնայողություններ քեշից/CDN/edge ofload-ից։
DR Readiness: RTO/RPO վարժություններում։
17) «արագ» ձևանմուշների օրինակներ
Kafka 'վահանակների խմբաքանակ և ավտո սկեյլ (գաղափարներ)
partitions(topic="bets") = ceil(peak_msgs_per_sec / target_msgs_per_partition)
consumers = min(partitions, max_pods); rebalance_on: skew > 1. 5x scale_up_if: lag > 5e5 && rate(lag[5m]) > 5e4
PostgreSQL:
max_connections = poolers pool_size 1. 3 read_routing: primary (write), replicas (read majority)
shard_key: tenant_id or region_id
Redis:
maxmemory-policy: allkeys-lfu cluster-replicas: 1 evict-alert: rate(evictions[5m]) > 0 && used_mem/limit > 0. 8
Կանարեյի ավտոգեյթի քաղաքականությունը (դավադրություն)
guardrails:
- metric: api_p99_ms, threshold: 1. 3 baseline_1d, window: 10m, action: pause_and_rollback
- metric: error_rate, threshold: 2 baseline_1d, window: 5m, action: pause max_step: 10%
step_interval: 15m
18) FAQ
Q 'Ի՞ նչ մեծացնել առաջինը։
A: Նեղ տեղեր ըստ dashbords 'հերթեր/kashi/BD կարդալու։ Տաք ճանապարհները (դեպոզիտ/տոկոսադրույք/խաղի մեկնարկը) առաջնահերթություն են։
Q 'Ինչպե՞ ս կարող եք հասկանալ, որ մեքենայի մասշտաբը «ավելի վատ է դարձնում»։
Նայեք հարաբերակցությանը 'scale-up/, իսկ r99/սխալները չեն բարելավվում, միգուցե դուք «մեծացնում եք խնդիրը» (նեղ dunstrim/քվոտա)։ Միացրեք բրեյքերները/դեգրադացիան։
Q 'Արդյո՞ ք երկրորդ պրովայդերը միշտ կարիք ունի։
Ա 'Քննադատական ճանապարհների համար այո։ Հակառակ դեպքում գոնե «safe mode» -ը պարզեցված սցենարի և քեշի հետ։
Q: Active-active или active-passive?
A: Եթե RTO պահանջները ցածր են և շատ տարածաշրջանային խաղացողներ 'active-action։ Հակառակ դեպքում սկսեք active-passive-ից պատրաստված ֆեյլերի հետ։