GH GambleHub

Երկաթի և ռեսուրսների օպտիմիզացումը

Live ռեզյումե

Օպտիմիզացիան ոչ թե «մեկ բան արագացնելը» է, այլ արտադրողականությունը նվազեցնել ռուսական էներգիայի արժեքը։ Հիմնական քայլերը 'չափել SLI/SLO և պրոֆիլները, գտնել նեղ տեղեր, «ճիշտ չափել» կարողությունները, ավտոմատացնել մասշտաբը և ամրացնել բարելավումները պատկերներում/գծապատկերներում/քաղաքականություններում։

Նպատակներն ու սկզբունքները

UX-ից մինչև երկաթը, սկսենք SLO-ից (p95 latency, վիրահատությունների հաջողությունը), մենք փնտրում ենք սահմանափակող ռեսուրս։

Ճիշտ չափսը (rightsizing) 'ռեսուրսները և ինստանսների տեսակները բեռի բնույթի տակ։

Քեշը և հարևանությունը 'նվազեցրեք «թանկ» քայլերը պահեստների և ցանցերի համար։

Ավտոմատիզացիա 'autoscaling, կյանքի ցիկլի քաղաքականություն, IaC։

Դիտարկումը '«չորս ազդանշաններ», CPU/alloc, թրեյսինգ։

Անվտանգություն = արտադրողականություն: mTSA/ստորագրություններ/լիմիտներ - ապարատային արագացումով, որտեղ հնարավոր է։

CPU և պլանավորումը

Առաջադրանքները 'նվազագույնի հասցնել և քեշի բացթողումները, հաշվի առնել NUMA-ը և ընդհատել։

NUMA-տեղեկությունը 'pinning-ը հանգույցների վրա («numactl--cpunodebind--membind»), BD/brocers-ի համար - ամրագրել։

IRQ/sportirq: բաժանել միջուկներով (RFC/RPS), ամրացնել տաք գծերը CPU-ի համար առանց մրցակցության վորկերների հետ։

Հիպերպեռնությունը '«զգայուն լատենտության» համար, ֆիզիկական միջուկների վորկերները ամրագրելն է։

Ենթատեքստը 'նվազեցնել երկար գծերի/բատչինգի/ասինխրոնի միջոցով։

Կազմողները/JIT: Ներառել PGO/LTO (C/C + +), Graal/HotSpot պրոֆիլները (Java), «GOMAXPROCS» և գողերի (Go)։

Linux-Tuning-ի օրինակները (բեկորներ)

bash
IRQ affinity: bind NIC queue to specific CPU echo 2 >/ proc/irq/XX/smp_affinity # kernel mask
Softirq balance on sysctl -w net network cores. core. netdev_budget=600 sysctl -w net. core. netdev_max_backlog=5000

Հիշողությունը և ալոկացիաների կառավարումը

THP/HugePages: JVM/DB-ի համար սովորաբար անջատել THP-ը և օգտագործել hugepages ձեռքով (նվազեցնում է TLB-propachi)։

NUMA-հավասարակշռությունը 'stateful-ի համար, տեղադրեք հիշողությունը տեղական խմբագրության վրա։

GC/allocator:
  • JVM: G1/ZGC, «-Xim = -Xmx» հավասար, խելացի «WinGCPauseMillis»։
  • Go: 'GOGC' (սկսել 100-200-ից), խուսափել ավելորդ ալոկացիաներից, ավելցուկներից 'edrof'։
  • Python 'օգտագործել «uvloop», «asyncio», C-ընդարձակումը, փամփուշտը։
  • Swap/zswap: Վաճառքի ժամանակ սովորաբար swap off-ը կրիտիկական ծառայությունների համար։ ընդհանուր նշանակման հանգույցներում zswap-ն է «փափուկ» բեռների համար։

Պահեստավորում և I/O

Սկավառակների տեսակները ՝ NVMe-ը hot-path-ի տակ, առանձին շուլեր լոգարանների/chekapoints/տեմպի համար։

ՖՍ: XIV մեծ ֆայլերի/BD ամսագրերի համար; ext4 փոքր/համընդհանուր համար։

MS/EC: RAID10 ցածր ուշացման համար, RAID6/EC - սառը տվյալների տակ։

I/O պլանավորողները '"none '/" mq-dead.ru" NVMe-ի համար։

Async/Batch: Խմբավորեք ձայնագրությունները, օգտագործեք Write-Behind/Group-Commit-ը։

Ֆիո գնահատման համար (օրինակ)

bash fio --name=randread --filename=/data/test --size=20G --bs=4k \
--iodepth=64 --rw=randread --ioengine=libaio --numjobs=4 --time_based --runtime=60

Ցանցը

MTU-ը և www.load: 9000 MTU-ն Դանաչենտրում (եթե end-to-end), միացրեք GRO/LRO-ն, որտեղ թույլատրելի է։

RSA/RPS/RSA 'NIC-ի բազմաբնույթ գծերը, միջուկների բաշխումը։ irqbal.ru - վերահսկողության տակ։

SO _ REUSE.RU 'լայնածավալ listen-սոկետներ, որոնք տարածվում են միջուկներով։

Հաճախորդների թայմաուտները և գնդացիրները 'կարճ TCP-keepalive, բաց կոննեկտների սահմանը, backpressure։

TLS: TLS 1. 3, ապարատային հրահանգներ AES-NI, session resumption, OCSA stapling։

Ցանցային թյունինգը (բեկորներ)

bash sysctl -w net. core. rmem_max=268435456 sysctl -w net. core. wmem_max=268435456 sysctl -w net. ipv4. tcp_rmem="4096 87380 134217728"
sysctl -w net. ipv4. tcp_wmem="4096 65536 134217728"

GPU/FPGA/SmartNIC (որտեղ տեղին է)

GPU 'հակաֆրոդի հինֆիս, առաջարկություններ, CV; վերահսկել «util», «mem», «sm _ efficiency»։

SmartNIC/eBPF/DPK ՝ L4/L7 բեռնումը, ֆիլտրը, հեռաչափությունը առանց միջուկի անցման։

Էներգպրոֆիլ 'ամրագրել հաճախականությունները կայուն լատենտության տակ։ խուսափել ագրեսիվ-save-save-ից։

Ծրագրեր և RNUBD

Պուլները ՝ սահմանափակել «max _ conns», օգտագործել connational pooling (PgBouncer/Hikari)։

Ինդեքսներ/պլանավորողներ 'SNAIN/ANMS ZE պրոֆիլներ, որոնք ծածկում են ինդեքսները, կուսակցությունը։

Քեշինգը 'Redis/in գործընթացը, CDN ստատիկայի համար, edge-քեշը «տաք» API-ի համար։

Իդեմպոտենտություն և հերթեր. Խուսափեք գետերի կասկադներից, միացրեք dedup։

Gzip/Brotli: Պատասխանների թեմը հաշվի առնելով CPU արժեքը։ հավասարակշռություն ընտրեք։

Բեռնարկղերը և Kubernetes-ը

Requests/Limits и bin-packing

Reques.ru = «երաշխիք», Limits = «առաստաղը»։ Սխալ Limits-ը CPU-ում wwww.throtling-ը և p99-ը։

Հաշվի առեք burst բեռը (տրամագծերի պիկի/105) - p95։

Bin-packing: բաժանեք հանգույցների պուլերը (latency-crit, batch, GPU, spot)։ Օգտագործեք տեղաբանություն (anti-affinity, spread)։

Ավտոմլյացիան

HPA-ն կաստոմային մետրիկների վրա (RPS/p95, ոչ թե CPU)։

MSA-ն «երկար» և «անպիտան» գողերի համար։

Cluster Autoscaler + առանձին node խմբեր (on-demand/spot)։

KEDA-ը իրադարձական բեռների համար (հերթեր, Kafka, com)։

Պլանավորող և ղեկավարներ

CPU International: «Static» լրիվ latency-քննադատական ենթատեսակների համար։

Topology You 'NUMA-ի հավասարումը։

HugePages/Device Plugins: BD/ցածր լատենտության և GPU/FPGA-ի համար։

HPA-ի օրինակը (latency-aere, մեթրիկի ադապտերի միջոցով)

yaml apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: { name: api-gw }
spec:
scaleTargetRef:
apiVersion: apps/v1 kind: Deployment name: api-gw minReplicas: 6 maxReplicas: 60 metrics:
- type: Pods pods:
metric:
name: http_latency_p95_ms target:
type: AverageValue averageValue: 120

FinOps և արժեքը

Սակագների ավելցուկ 'ընտրել instans CPU/RAM/Disco/ցանցի (compore-optimized, memory-optimized, storage-optimized)։

Spot/Systemptible: batch/steiging/kashey-ի համար անջատողական ավելցուկ։

Reservation/Savings: 1-3 տարի «մշտական» մասի համար։

Տաք/ցուրտ 'tiered-storage, արխիվների օբյեկտ, retenshn logs։

Idle-ռեսուրսներ 'գիշերային/uicend-կանգառներ ոչ կրիտիկական միջավայրերում։

Էներգաարդյունավետություն (GreenOps)

Eurofiles: performensvs balanced ծառայություններ։

Ko-տեղադրումը '«սառը» ժամացույցի հեռացումը, չօգտագործված հանգույցների անջատումը։

KPI: Watt հարցման, r95/watt, CO-ը պրովայդերի չափորոշիչները։

Դիտարկումը և փորձարկումը

Метрики: CPU steal/throttle, `cycles/instructions`, LLC miss, RSS/working set, page faults, disk lat p95/99, NIC drops, retransmits.

Թրեյսինգ 'բաշխված թրեյսներ «ոսկե ճանապարհների» համար։

Ավելացումը ՝ eBPF/Perf/Flamegraphs, «www.rof »/YourKit/JFR։

Բեռային թեստեր ՝ SLO-կողմնորոշված, իրական mix վիրահատությունների հետ, բարդ «տաքացում», fox-միգրացիա։

PromQL (գաղափարներ)

promql
CPU throttling доля sum(rate(container_cpu_cfs_throttled_seconds_total[5m])) by (pod)
/ sum(rate(container_cpu_usage_seconds_total[5m])) by (pod)

Network loss sum (rate (node_net_dropped_total[5m])) by (instance)

Օպտիմիզացման թուղթ

  • SLO-ն և «ոսկե ճանապարհները» (API/վճարումներ/վճարումներ)։
  • CPU/alloc/IO/ցանցերը հավաքված են, հայտնաբերվել են top-N նեղ տեղեր։
  • NUMA/IRQ/RTS-ը տրամադրված է latency-քննադատական հանգույցների վրա։
  • THP off (անհրաժեշտության դեպքում), hugepages BD/Java ծառայությունների համար։
  • NVMe-ը տաք տվյալների տակ, XIV/IO-sched-ը, ֆիո-բենչը ապացուցված է։
  • Ցանցային հոսք ՝ MTU, RPS/RSA, SO _ REUSEIM; թայմաուտներ/փամփուշտներ։
  • Kubernetes: Requesoft-ը ճիշտ չէ, Limits-ը չի հոգում, HPA-ն բիզնես-մետրիկներում, SNA/CA-ում ներառված են։
  • Քեշինգը և CDN-ը «թանկ» ճանապարհների վրա։ Redis/edge-քաշ։
  • FinOps: rightsizing/պահուստներ/spot-puls; սառցադաշտերի կանգառը։
  • CI արտադրողականության ավտոտեստներ, p95/p99 ռեգրեսիա։

Հատուկ iGaming/fintech համար

Պիկի ժամանակացույցով 'RPS/Latters/RPS-ում/CDN, HPA-ում։

Վճարումները և վճարումները 'առանձին «ոսկու» IP/ֆորումը, գերակայական գծերը, ռեսուրսների մեկուսացումը (tainault/toler.ru), բազայի պահուստը։

Անտիբոտ/հակաֆրոդ 'heavy-մոդելներ - GPU-vorkers; Առցանց կոքսինգը 50 ms p95; Քաֆիչի։

Կարգավորիչ, անփոփոխ լոգներն ու կոդավորումը չպետք է կոտրեն SLO-ը, միացրեք ապարատային արագացումները և ասինխրոն փամփուշտները։

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

Լատենտալությունը պատրաստված է թողարկումից հետո

1. Տապալել burn-rate SLO; 2) ավելացրեք 'cpu/alloc'; 3) pratat/ficflag; 4) բարձրացնել կրկնօրինակները/API-kash; 5) RCA-ն և թեստի ամրագրումը։

Պիկ ֆուտբոլ (խաղը/մրցույթը)

1. Տաքացնել CDN/kash; 2) բարձրացնել minReplicas; 3) միացրեք burst-limits; 4) փոփոխել հերթերը. 5) միացրեք read-only ռեժիմը երկրորդական գործառույթների համար։

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

Limits CPU-ն «խեղդում» է պինդ vorclods-ը բարձր p99։

Հանգույցների սխալ փամփուշտը 'խառնեք latency-քննադատական և batch-ը։

NUMA/IRQ-2019 բացակայությունը BD/brocers-ում։

«Մենք բուժում ենք ախտանիշները» (ավելացնում ենք CPU) ալգորիթմների/քեշի/SQL-ի ուղղման փոխարեն։

HPA-ն CPU-ի փոխարեն RPS/latency-ի փոխարեն ավելի ուշ կսկսի։

CI-ում արտադրողականության թեստեր չկան։

Արդյունքը

Օպտիմիզացիան համակարգային աշխատանք է 'չափեք SLI/SLO, ավելացրեք, ուղղեք ալգորիթմները, տեղադրեք երկաթ (NUMA/IRQ/IO/ցանց), «ճիշտ չափեք» ռեսուրսները և ավտոմատիզացրեք։ Ամրացրեք բարելավումները ձևանմուշներում (պատկերներ, գծապատկերներ, քաղաքական գործիչներ), վերահսկեք արժեքը և էներգիան, և ձեր պլատֆորմը կմնա արագ, տնտեսական և կայուն նույնիսկ ծայրահեղ պիկի մեջ։

Contact

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

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

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

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

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

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