GH GambleHub

Ռեսուրսների պլանավորողը և ավտո-սկեյլինգը

Ռուսական ռեզյումե

Կայուն սկեյլինգը պահվում է չորս հենարանների վրա

1. Ճիշտ հարցումներ/լիմիտներ և QoS դասարաններ։

2. Ճիշտ տեղադրումը (տեղաբանություն, աֆինիտներ, գերակայություններ, նախապաշարում)։

3. Բազմաստիճան մեքենա-սկեյլինգը 'HPA/MSA/KEDA + Cluster/Node autoscaler + warm poope։

4. SLO կողմնորոշված տրամաբանությունը (latency/queue depth) anti flappings և ալյումիններով։


Ռուսական ռեսուրսների մոդել

Reques.ru/Limits դասարաններ և QoS դասարաններ

Reques.ru = ծրագրավորողի երաշխիքներ; Limits = առաստաղներ runtime-ի համար։

QoS: Guaranted (req = lant CPU/Memory), Burstable (մասամբ), BestEffect (ոչինչ)։

Արտադրողական ծառայություններ կոշտ SLO-ի հետ - Guaranteed/Burstable; ֆոնային - Burstable/BestEffect։

CPU/Հիշողություն/IO/Ցանց

CPU-ն առաձգական (time-sharing) է, հիշողությունը կոշտ է (OFC-kill, երբ ավելանում է)։

IO/ցանցում տեղադրեք սահմաններ/գերակայություններ առանձին (cgroups/TC), հակառակ դեպքում «աղմկոտ հարևանները»։

GPU/աքսելերատորներ

Խնդրեք վեկտորորեն (GPU = 1, VSA ավելցուկի միջոցով), օգտագործեք nodeDirector/tainment և PodPriority քննադատության համար։

Ինֆիսի համար 'batch size-ը և մոդելները տաքացնելով։


Տեղադրման քաղաքականությունները (Scheduling)

Առաջնահերթություններ, կանխատեսում և PDB

Priorts Class-ը կրիտիկական ճանապարհների համար (վճարումներ, լոգիններ), թույլատրված է։

PodMedrup.ru Budget-ը պաշտպանում է նվազագույն կրկնօրինակները ռոտացիայի/ապդեյթի ժամանակ։

Affiniti/Technology

node/pod affinity գաղութների/դեկոլոիզացիայի համար (օրինակ, մի կտոր կրկնօրինակեք)։

topologySpreadConstrainment-ը հավասարեցնում է օձերը/AZ։

NUMA/տեղաբանություն ՝ pin-CPU/hugepages, որտեղ կարևոր է ցածր լատենտ։

Թեյինթ և տոլերանսներ

Բուծեք փամփուշտները '«108», «batch», «gpu», «108»։ Քննադատությունը ավելի քիչ հարևաններ է հանդուրժում։


Auto scailing 'մակարդակներ և ազդանշաններ

1) HPA (Horizontal Pod Autoscaler)

Skeilite pods-ը մետրերով 'CPU/Memory/castory (Prometheus Adapter)։

Լավ ազդանշաններ ՝ latency p95/p99, queue length/lag, RPS per pod, consumer lag։

Anti flupping: կայունացում (stabilizae System), նվազագույն քայլ, cooldown։

HPA (latency-driven) օրինակ

yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: { name: api-hpa }
spec:
scaleTargetRef: { apiVersion: apps/v1, kind: Deployment, name: api }
minReplicas: 6 maxReplicas: 120 behavior:
scaleUp:
stabilizationWindowSeconds: 60 policies: [{ type: Percent, value: 100, periodSeconds: 60 }]
scaleDown:
stabilizationWindowSeconds: 300 policies: [{ type: Percent, value: 20, periodSeconds: 60 }]
metrics:
- type: Pods pods:
metric:
name: http_server_request_duration_seconds_p95 target:
type: AverageValue averageValue: "0.25" # 250ms

2) VPA (Vertical Pod Autoscaler)

Tuninguet reques.ru/limits իրական սպառման համար (թարմացնում է առաջարկությունները)։

Ռեժիմները ՝ «Off» (հավաքումը), «J» (վերագործարկումը), «Initial» (միայն սկսելիս)։

Պրակտիկա 'ներառել' Off 'ww.orld հավաքել վիճակագրությունը ծրագրավորման ժամանակ։

3) KEDA/հիմնավորված սկեյլինգ

Արձագանքում է արտաքին ազդանշաններին ՝ Kafka lag, MSS depth, Redis length, Prometheus։

Իդեալական է իրադարձությունների/հերթերի կոնսուլների համար (EDA)։

KEDA ScaledObject (Kafka lag):
yaml apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: { name: consumer-scale }
spec:
scaleTargetRef: { name: txn-consumer }
minReplicaCount: 2 maxReplicaCount: 200 cooldownPeriod: 120 pollingInterval: 5 triggers:
- type: kafka metadata:
bootstrapServers: broker:9092 consumerGroup: tx-cg topic: payments lagThreshold: "10000"

4) Cluster/Node Autoscaler (CA) + Warm Pools

CA-ն ավելացնում է/մաքրում է նոդները դեֆիցիտի/ավելցուկի դեպքում։

Warm pooics: նախապես տաքացված նոդներ/պատրաստված պատկերներ (արագացնում են cold start)։

Պիկի համար 'step-scaling և ավելացված minNodes-ը նախապես։


Արձագանքի արագությունը և տաքացումը

SLO-ուշացում 'առջևի շերտը 241-2 րոպե, backends/BD - առանձին և նախօրոք։

Պրեգեև 'TIM/IV/կոննեկտներ, մոդելների բեռնումը, տաքացնելով և JIT-ը։

Shadow-2019-ը կոլդ-ճանապարհի «պոկելու» համար մինչև իրադարձությունը։


Anti Flapping և 2019

Gistereae-ը մետրիկների վրա, հարթեցումը (108)։ միջին)։

Stabilization windows HPA-ում, մեծ «scaleDown» -ում։

Step-skeiling փոխարեն «pel»; rate-limite-ը կրկնօրինակի փոփոխության վրա։

Budget-Skailing-ը 'սահմանափակել մեկ րոպեում ավելացված տոկոսները/կրկնօրինակը։


Դիտարկումը և SLO

Հիմնական SLI

Ալերտա

Pending pods, unschedulable իրադարձությունները, IP/ենթատեքստերի պակասը, image pox երկար, evictions։

p95/99 latency, error rate, throughput, queue depth/lag, CPU/Memory saturation, pod pending time, node pressure.

Թրեյզները ՝ tail-based sampling-ը պոչի վրա p99-ի վրա տեսնում ենք նեղ տեղեր սկեյլում։


FinOps: Առաձգականության արժեքը

Մետրիկները ՝ $/1000 RPS, դոլար/ms p95, դոլար/ժամ պահուստ։

Mics: on-demand + reserved + spot (քննադատության համար)։

Scaila-ի շեմն կապված է սխալի արժեքի հետ, երբեմն էլ ձեռնտու է պահել warm-պահուստը։


Հատուկ iGaming/fintech

Picki 108/Redia: նախապես բարձրացնել «minReplicas» և minNodes, ներառել warm poom և տաքացնել/մոդելներ։

Հիբրիդային վահանակներ ՝ KEDA lag + idempotenty, պրովայդերների լիմիտներ (PSA) որպես արտաքին դեգրադացիայի հարվածներ։

Անտիբոտ 'առանձին փամփուշտը, կանոնների արագ մասշտաբը, «մոխրագույն» երթուղիները։

Կարգավորիչ ՝ PDB-ն կոմպլեքս ծառայություններում, գերակայությունները ավելի բարձր են, քան batch-ը։


Chek-lists

Նախագծումը

  • Reques.ru/limits-ը տեղադրված է ավելացման տվյալների համաձայն։ QoS-ն ընտրվել է։
  • Priorts Class, PDB, taints/toler.ru և topologySpread - վճռական։
  • HPA-ը SLO-metric-ում, ոչ միայն CPU-ն։
  • MSA-ն «Off» -ում հավաքելու համար (բողոքարկումը «J 'planovo»)։
  • KEDA/հերթեր իրադարձական բեռների համար։
  • CA + warm poope, պատկերները (image pre-pro)։

Վիրահատություն

  • Stabilization windows և cooldowns (ֆլամպինգը բացառված է)։
  • Ալերտները pending/unschedulable, lag, p95, error-rate։
  • Runbooks: «nod», «image չի ձգվում», «OFC/evict», «retrav փոթորիկ»։
  • Capacity-review-ը ամեն ամիս.

Տիպիկ սխալներ

HPA-ն միայն CPU-ի վրա է, որ IO/BD-ի սահմաններում։

PDB-ի բացակայությունը և ռուսական քննադատությունը առաջինը։

Քննադատության և batch-ի խառնուրդը մեկ փամփուշտի վրա առանց tain.ru-ի «աղմկոտ հարևանների»։

Զրոյական տաքացումը պիկի վրա ցուրտ է։

Ագրեսիվ «scaleDown» -ը և thrash բեռնարկղերը։

KEDA-ն առանց idempotenty-ի ավելացնում է հաղորդագրությունների կրկնօրինակները փոթորկի ժամանակ։


Մինի պլեյբուկներ

1) Պիկի իրադարձությունից առաջ (T-30 րոպե)

1. Ավելացնել 'minReplicas '/minNodes, ակտիվացնել warm poope։

2. Տաքացնել CDN/CSA/TSA/կոնեկտները, ներբեռնել մոդելները։

3. Միացրեք «մոխրագույն» երթուղիները/լիմիտները բոտերի համար։

4. Ստուգել dashboards: pending/lag/p95։

2) Նոդի պակասը (unschedulable)

1. Ստուգել CA, ամպերի քվոտաները, ենթահող/IP։

2. Ժամանակավորապես նվազեցնել batch-ի լիմիտները, ներառել կանխատեսումը ցածր գերակայությունների համար։

3. Բարձրացնել ժամանակավորապես ավելի մեծ instans տիպը կամ երկրորդ փամփուշտը։

3) Lag աճը հերթում

1. KEDA: scale up-ի վրա։ 2) բարձրացնել կոնսյուսմերի սահմանները.

2. միացրեք idempotency-keys և backpressure dowsers։

4) Պիլա կրկնօրինակը

1. Ավելացնել stabilization/cooldown; 2) գնալ step-skeiling;

2. հարթեցնել մետրը էքսպոնենցիալ միջին։


Քրեյգ-փուչիկները

MSA (հյուրանոցների հավաքումը)

yaml apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: { name: api-vpa }
spec:
targetRef: { apiVersion: "apps/v1", kind: Deployment, name: api }
updatePolicy: { updateMode: "Off" } # собираем рекомендации

Cluster Autoscaler (դրոշների գաղափարներ, հասկացություն)


--balance-similar-node-groups
--expander=least-waste
--max-empty-bulk-delete=10
--scale-down-utilization-threshold=0.5
--scale-down-delay-after-add=10m

Topology spread (գոտիների հավասարությունը)

yaml topologySpreadConstraints:
- maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: DoNotSchedule labelSelector: { matchLabels: { app: api } }

Արդյունքը

Պլանավորողը և Auto-scailing-ը ճիշտ հարցումներ/limits + խելացի տեղադրում + բազմաշերտ սկեյլինգ (HPA/SNA/KEDA/CA) + պրոտեզներ և հակատիպինգ, որոնք կապված են SLO-ի և միլիոնավոր սեկունդների արժեքի հետ։ Ամրագրեք քաղաքականությունը IaC-ում, դիտարկեք «ճիշտ» մետրերը (latency/lag), պահեք warm-պահուստը պիկի տակ, և պլատֆորմը կլինի առաձգական, կանխատեսելի և տնտեսական։

Contact

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

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

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

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

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

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