優化鐵和資源
簡短摘要
優化不是「加快速度」,而是平衡性能↔成本↔可靠性↔能源。基本步驟:測量SLI/SLO和配置文件,找到瓶頸,「正確尺寸」功率,自動縮放,並在圖像/圖表/策略中鞏固改進。
目標和原則
從UX到鐵:從SLO開始(p95 latency,操作成功)→尋找有限資源。
正確大小(rightsizing):資源和實例類型以負載為特征。
緩存和接近:減少對存儲和網絡的「昂貴」徒步旅行。
自動化:自動化,生命周期策略,IaC。
可觀察性:「四個信號」度量,CPU/alloc配置文件,跟蹤。
安全=性能:mTLS/簽名/限制-在可能的情況下進行硬件加速。
CPU和計劃
任務:最大限度地減少扭曲和緩存錯誤,考慮NUMA和中斷。
NUMA意識:通過節點(「numactl -cpunodebind -membind」)進行打孔,對於DB/經紀人,在節點上進行固定。
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-將內存固定在本地節點上。
GC/allocator:
JVM:G1/ZGC,「-Xms=-Xmx」相等,合理的「MaxGCPauseMillis」。
Go:「GOGC」(從100-200開始),避免多余的變異,「pprof」配置文件。
Python:使用「uvloop」、「asyncio」、C擴展、連接池。
Swap/zswap:對於關鍵服務,通常在銷售中脫節;在通用節點上,zswap用於「軟」負載。
存儲和I/O
驅動器類型:熱路徑下的NVMe,用於邏輯/支票/節奏的單獨池。
FS:大型文件/DB日誌的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在數據中心(如果端到端),在允許的地方啟用GRO/LRO。
RSS/RPS/RFS:NIC上的多通道隊列,內核分布;irqbalance-控制。
SO_REUSEPORT:可擴展的listen套接字,內核分布。
客戶端taymauts和pullings:短的TCP-keepalive,開放連接極限,backpressure。
TLS: TLS 1.3、AES-NI硬件指令、會話恢復、OCSP穩定。
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,過濾和遙測,而無需過渡到內核。
Energoprofili:將頻率固定為穩定的潛伏期;避免激進的電源保存。
應用程序和RSUBD
連接池:限制「max_conns」,應用連接池(PgBouncer/Hikari)。
索引/調度程序:EXPLAIN/ANALYZE配置文件,涵蓋索引,分期。
緩存:redis/in進程緩存,用於靜態的CDN,用於「熱」API的邊緣緩存。
等效性和隊列:避免退縮級聯,包括退縮。
Gzip/Brotli:根據CPU成本壓縮響應;選擇平衡。
容器和Kubernetes
Requests/Limits и bin-packing
Requests=「保證」,Limits=「天花板」。CPU限制不正確→ throttling和p99。
考慮爆破負荷(錦標賽/比賽高峰)-p95的股票。
Bin-packing:拆分節點池(latency-crit, batch, GPU, spot)。使用拓撲(anti-affinity, spread)。
自動縮放
HPA的定制度量(RPS/p95而不是CPU)。
VPA用於「長壽」和「非高峰」蠕蟲。
Cluster Autoscaler+單獨的節點組(點播/點)。
事件負載(隊列,Kafka,cron)的KEDA。
規劃師和經理
CPU Manager:「靜態」將完整的內核固定在關鍵的後端。
Topology Manager:與NUMA對齊。
HugePages/設備插件:用於DB/低潛伏期和 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/驅動器/網絡(計算優化、內存優化、存儲優化)實例。
Spot/Preemptible:用於多重冗余的擊球/鏟球/腰果。
保留/節省:「永久」部分的1-3年儲備。
熱/冷:分層存儲,存檔對象,重新登錄。
Idle resource:夜間/周末停止非關鍵環境。
能源效率(GreenOps)
Power profiles: performance vs balanced by services。
合並放置:在「冷」時刻密封,關閉未使用的節點。
KPI:每請求瓦,p95/瓦,提供商的CO₂度。
可觀察性和測試
Метрики: CPU steal/throttle, `cycles/instructions`, LLC miss, RSS/working set, page faults, disk lat p95/99, NIC drops, retransmits.
Tracing:「黃金路徑」的分布式路徑。
剖析:eBPF/Perf/Flamegraphs,「pprof」/YourKit/JFR。
載荷測試:SLO導向,具有真實的mix操作,「預熱」階段,故障註射。
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配置為後置關鍵節點。
- THP off(如有必要),hugepages for DB/Java服務。
- NVMe熱數據,XFS/IO-sched配置,fio-bench已確認。
- 網絡堆棧:MTU,RPS/RFS,SO_REUSEPORT;taymauts/池。
- Kubernetes:要求正確,極限不扼殺,HPA按業務指標,VPA/CA包括在內。
- 「昂貴」路徑上的緩存和CDN;Redis/edge緩存。
- FinOps:權利/儲備/點池;停止中間環境。
- CI中的性能自動測試,p95/p99上的回歸。
iGaming/fintech的細節
賽程高峰:錦標賽/比賽/促銷活動→「彈性」前排池,預熱緩存/CDN,HPA RPS/潛伏期。
付款和付款:單獨的「黃金」IP/域,優先排隊,資源隔離(taints/tolerations),基地準備金。
Antibot/antifrod:重型模型-在GPU制造商上;在線得分≤ 50 ms p95;Fichs緩存。
調節:不變的邏輯和加密不應打破SLO-包括硬件加速和異步管道。
迷你花花公子
發布後↑潛伏期:1.鉆探burn-rate SLO;2)「cpu/alloc」配置文件;3)回滾/失誤;4)增加副本/API緩存;5)RCA和測試固定。
高峰負荷(比賽/錦標賽):1.加熱CDN/緩存;2)提高minReplicas;3)包括爆破限制;4)排隊;5)為次要功能啟用僅讀模式。
典型的錯誤
極限CPU「窒息」高峰絨毛→高p99。
不正確的節點池:混合latency關鍵和擊球。
DB/經紀人上沒有 NUMA/IRQ設置。
「治療癥狀」(我們添加CPU) 而不是修復算法/緩存/SQL。
CPU的HPA而不是RPS/latency →遲到。
CI中沒有性能測試→銷售回歸。
底線
優化是系統操作:測量SLI/SLO、分析、校正算法、調整鐵(NUMA/IRQ/IO/網絡)、「正確尺寸」資源並自動縮放。確保模板的改進(圖像、圖表、策略),控制成本和能源-您的平臺即使在極端高峰期也能保持快速、經濟和可持續。