Темір мен ресурстарды оңтайландыру
Қысқаша түйіндеме
Оңтайландыру - бұл «бірдеңені жеделдету» емес, өнімділікті теңгерімдеу, құны, сенімділігі, энергиясы. Негізгі қадамдар: SLI/SLO және профильдерді өлшеу, тар жерлерді табу, қуатты «дұрыс өлшеу», масштабтауды автоматтандыру және бейнелерде/чарттарда/саясаттарда жақсартуларды бекіту.
Мақсаттары мен қағидаттары
UX-тен темірге: SLO-дан бастаймыз (p95 latency, операциялардың табысы) → шектеуші ресурсты іздейміз.
Дұрыс өлшем (rightsizing): жүктеме сипатындағы инстанциялардың ресурстары мен түрлері.
Кэш және жақындық: сақтау орындары мен желілерге «қымбат» сапарларды азайтыңыз.
Автоматтандыру: autoscaling, өмірлік цикл саясаты, IaC.
Бақылау қабілеті: «төрт сигнал» өлшемдері, CPU/alloc профильдері, трейсинг.
Қауіпсіздік = өнімділік: mTLS/қолтаңбалар/лимиттер - мүмкін болған жерде аппараттық жылдамдатумен.
CPU және жоспарлау
Міндеттер: контеншен мен кэш-қателерді азайту, NUMA және үзілістерді ескеру.
NUMA-хабардарлығы: түйіндер бойынша pinning ('numactl --cpunodebind --membind'), БД/брокерлер үшін - түйіндерде белгілеу.
IRQ/softirq: ядролар бойынша тарату (RSS/RPS), воркерлермен бәсекелеспей CPU үшін ыстық кезектерді бекіту.
Гиперпотоктылық: «жасырындылыққа сезімтал» үшін - воркерлерді физикалық ядроларға бекіту.
Контекст-свитчилер: ұзын кезектер/батчингтер/асинхрон арқылы азайту.
Жинағыштар/JIT: PGO/LTO (C/C + +), Graal/HotSpot профильдерін (Java), 'GOMAXPROCS' және воркерлерді таңдауды (Go) қосу.
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 қателіктерін азайтады).
NUMA балансы: stateful үшін - жады жергілікті торапта тіркеледі.
- JVM: G1/ZGC, '-Xms = -Xmx' тең, ақылға қонымды 'MaxGCPauseMillis'.
- Go: 'GOGC' (100-200 бастап), артық аллокацияларды болдырмау, 'pprof' профильдері.
- Python: 'uvloop', 'asyncio', C-кеңейту, қосылымдар пулын пайдалану.
- Swap/zswap: сыни сервистер үшін әдетте swap off; жалпы мақсаттағы тораптарда - «жұмсақ» жүктемелер үшін zswap.
Сақтау және I/O
Дискілердің түрлері: NVMe hot-path, логтарға/чекапоинттерге/қарқынға арналған жеке пулдар.
ФС: Үлкен файлдар/ДҚ журналдары үшін XFS; ext4 шағын/әмбебап.
RAID/EC: төмен кідірістер үшін RAID10, суық деректер үшін RAID6/EC.
I/O-жоспарлаушылар: NVMe үшін 'none '/' mq-deadline'.
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 және offload: 9000 MTU датацентрде (егер end-to-end), GRO/LRO рұқсат етілген жерде қосу.
RSS/RPS/RFS: NIC көп арналы кезектер, ядролар бойынша тарату; irqbalance - бақылауға алынады.
SO_REUSEPORT: ядролар бойынша үлестірілетін масштабталатын listen-сокеттер.
Клиенттік таймауттар мен пуллингтер: қысқа TCP-keepalive, ашық коннектілер лимиті, backpressure.
TLS: TLS 1. 3. AES-NI, session resumption, OCSP 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/DPDK: ядроға өтпей L4/L7 түсіру, сүзу, телеметрия.
Энергия профильдері: жиіліктерді тұрақты латенттілікке тіркеу; агрессивті power-save болдырмау.
Қосымшалар және ҚРШС
Қосылыс пулдары: 'max _ conns' шектелсін, connection pooling (PgBouncer/Hikari) қолданылсын.
Индекстер/жоспарлаушылар: индекстерді, партиялануды қамтитын EXPLAIN/ANALYZE профильдері.
Кэш: Redis/in-процессі кэш, статика үшін CDN, «ыстық» API үшін edge кэш.
Демпотенттік және кезек: Ретрациялардың каскадынан аулақ болыңыз, dedup қосыңыз.
Gzip/Brotli: CPU-құнын ескере отырып, жауаптарды компрессиялау; теңгерімді таңдаңыз.
Контейнерлер мен Kubernetes
Requests/Limits и bin-packing
Requests = «кепілдік», Limits = «төбе». CPU → throttling және p99 бойынша қате Limits.
burst-жүктемелерді (турнирлердің/матчтардың шыңдары) ескеріңіз - p95-тегі қор.
Bin-packing: түйін пулдарын бөліңіз (latency-crit, batch, GPU, spot). Топологияны (anti-affinity, spread) пайдаланыңыз.
Автоматты түрде масштабтау
HPA (CPU емес, RPS/p95).
VPA «ұзақ өмір сүретін» және «кік емес» ворклоадтарға арналған.
Cluster Autoscaler + жеке node-топтар (on-demand/spot).
Оқиғалық жүктемелер үшін KEDA (кезектер, Kafka, cron).
Жоспарлаушы және менеджерлер
CPU Manager: latency-критикалық бағандарға толық ядроларды пиннингтеу үшін 'static'.
Topology Manager: NUMA бойынша теңестіру.
HugePages/Device Plugins: БД/төмен латенттілік және GPU/FPGA үшін.
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 және құны
Тариф бейіндері: CPU/RAM/диск/желі (compute-optimized, memory-optimized, storage-optimized) арқылы инстанцияларды таңдау.
Spot/Preemptible: batch/стейджинг/кештер үшін мультизонды артық.
Reservation/Savings: «тұрақты» бөлік үшін 1-3 жылға арналған резервтер.
Ыстық/суық: tiered-storage, архивке арналған нысан, логтардың ретеншн.
Idle-ресурстар: күрделі емес ортаның түнгі/демалыс-аялдамалары.
Энергия тиімділігі (GreenOps)
Power profiles: performance vs balanced services.
Ко-орналастыру: «суық» сағаттарда тығыздау, пайдаланылмайтын тораптарды ажырату.
KPI: сұранысқа арналған ватт, p95/ватт, CO ₂ - провайдер өлшемдері.
Бақылау және тестілеу
Метрики: CPU steal/throttle, `cycles/instructions`, LLC miss, RSS/working set, page faults, disk lat p95/99, NIC drops, retransmits.
Трейсинг: «алтын жолдар» үшін бөлінген трестер.
Профильдеу: eBPF/Perf/Flamegraphs, 'pprof '/YourKit/JFR.
Жүктеме тестілері: SLO-бағдарланған, нақты операциялардың mix, «жылыту» фазасы, fault-инъекциямен.
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/желі профильдері жинақталған, топ-N тар жерлер табылды.
- NUMA/IRQ/RSS latency-критикалық тораптарда орнатылған.
- THP off (қажет болған жағдайда), БД/Java-сервистері үшін hugepages.
- NVMe ыстық деректер, XFS/IO-sched теңшелген, fio-бенч расталған.
- Желілік стек: MTU, RPS/RFS, SO_REUSEPORT; таймауттар/пулдар.
- Kubernetes: Requests дұрыс, Limits тұншықтырмайды, бизнес-метриктер бойынша HPA, VPA/CA қосылған.
- «Қымбат» жолдарда кэштеу және CDN; Redis/edge кэш.
- FinOps: rightsizing/резервтер/spot пулдар; idle-ортаны тоқтату.
- CI-дегі өнімділік автотестері, p95/p99 регрессиясы.
iGaming/финтех ерекшелігі
Кесте бойынша шыңдар: турнирлер/матчтар/акциялар → «икемді» фронт пулы, алдын ала жылыту кэштері/CDN, HPA RPS/жасырындылық бойынша.
Төлемдер мен төлемдер: жекелеген «алтын» IP/домендер, басым кезектер, ресурстарды оқшаулау (taints/tolerations), база бойынша резерв.
Антибот/антифрод: heavy-модельдер - GPU-воркерлерде; онлайн-скоринг ≤ 50 мс p95; фич кэші.
Реттегіш: өзгермейтін логтар мен шифрлау SLO бұзбауы тиіс - аппараттық үдеткіштер мен асинхрондық пайплайндарды қосыңыз.
Шағын ойнатқыштар
Жарияланғаннан кейінгі жасырындылық ↑:1. Burn-rate SLO салыстыру; 2) 'cpu/alloc' профильдері; 3) шегініс/фичфлаг; 4) репликаларды/API-кэшті ұлғайту; 5) RCA және қамырды бекіту.
Ең жоғары жүктеме (матч/турнир):1. CDN/кэшті жылыту; 2) minReplicas көтеру; 3) burst-лимиттерді енгізуге; 4) кезек бөлуге; 5) екінші дәрежелі функциялар үшін read-only режимін қосу.
Типтік қателер
Limits CPU ең жоғары ворклоадтарды → жоғары p99 «тұншықтырады».
Дұрыс емес тораптар пулы: latency-критикалық және batch араластырады.
БД/брокерлерде NUMA/IRQ параметрлерінің болмауы.
Алгоритмдерді/кэштерді/SQL түзетудің орнына «симптомдарды емдейміз» (CPU қосамыз).
RPS/latency → орнына CPU бойынша HPA кеш.
СІ → регрессияда өнімділік сынақтары жоқ.
Жиынтығы
Оңтайландыру - бұл жүйелі жұмыс: SLI/SLO өлшеңіз, профильдеңіз, алгоритмдерді түзетіңіз, темірді баптаңыз (NUMA/IRQ/IO/желі), ресурстарды «дұрыс өлшеңіз» және масштабтауды автоматтандырыңыз. Үлгілердегі жақсартуларды (суреттер, чарталар, саясаттар) бекітіңіз, құн мен энергияны бақылаңыз - және сіздің платформаңыз тіпті төтенше шыңдарда да жылдам, үнемді және тұрақты болып қалады.