Donanım ve kaynakların optimizasyonu
Kısa Özet
Optimizasyon'bir şeyi hızlandırmak'değil, performansı maliyet ↔ güvenilirlik ↔ enerji ↔ dengelemektir. Temel adımlar: SLI/SLO ve profilleri ölçün, darboğazları bulun, kapasiteleri "uygun şekilde boyutlandırın", ölçeklemeyi otomatikleştirin ve görüntü/grafik/politikalardaki iyileştirmeleri sabitleyin.
Hedefler ve ilkeler
UX'den donanıma: SLO'dan başlayarak (p95 gecikme süresi, işlemlerin başarısı) - sınırlayıcı bir kaynak arıyor.
Rightsizing: yükün niteliği için kaynaklar ve örnek türleri.
Nakit ve yakınlık: Depolama ve ağlara "pahalı" seyahatleri azaltın.
Otomasyon: otomatik ölçeklendirme, yaşam döngüsü politikaları, IaC.
Gözlemlenebilirlik: Dört sinyal metriği, CPU/alloc profilleri, izleme.
Güvenlik = performans: mTLS/imzalar/limitler - mümkün olduğunda donanım hızlandırılır.
CPU ve zamanlama
Görevler: Içeriği en aza indirin ve önbellek özlüyor, NUMA ve kesintileri dikkate alın.
NUMA farkındalığı: düğümlerle sabitleme ('numactl --cpunodebind --membind'), veritabanları/brokerler için - düğüm üzerinde sabitleme.
IRQ/softirq: çekirdekler (RSS/RPS) ile dağıtın, işçilerle rekabet etmeden CPU için güvenli sıcak kuyruklar oluşturun.
Hiperflow: "gecikmeye duyarlı" için - işçileri fiziksel çekirdeklere sabitleyin.
Bağlam anahtarları: uzun kuyruklar/kasaplar/asynchron ile azaltın.
Derleyiciler/JIT: PGO/LTO (C/C + +), Graal/HotSpot profilleri (Java), 'GOMAXPROCS've işçi ayırma (Go) içerir.
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
Bellek ve Ayırma Yönetimi
THP/HugePages: JVM/DB için - genellikle THP'yi devre dışı bırakır ve hugepages'i manuel olarak kullanır (TLB'yi azaltır).
NUMA dengesi: durum bilgisi için - belleği yerel düğüme işlet.
- JVM: G1/ZGC, '-Xms = -Xmx' eşit, makul 'MaxGCPauseMillis'.
- Git: 'GOGC' (100-200 ile başlayın), gereksiz tahsislerden kaçının, 'pprof' profilleri.
- Python: 'uvloop', 'asyncio', C uzantıları, bağlantı havuzu kullanın.
- Swap/zswap: satışta, genellikle kritik hizmetler için swap kapalı; Genel amaçlı düğümler - "yumuşak" yükler için zswap.
Depolama ve I/O
Disk türleri: Sıcak yol için NVMe, günlükler/kontrol noktaları/tempo için ayrı havuzlar.
FS: Büyük dosyalar/DB günlükleri için XFS; Küçük/çok yönlü için ext4.
RAID/EC: Düşük gecikme süresi için RAID10, soğuk veri için RAID6/EC.
I/O zamanlayıcıları: NVMe için 'none'/' mq-deadline'.
Async/Batch: grup kayıtları, Write-Behind/Group-Commit kullanın.
bash fio --name=randread --filename=/data/test --size=20G --bs=4k \
--iodepth=64 --rw=randread --ioengine=libaio --numjobs=4 --time_based --runtime=60
Ağ
MTU ve boşaltma: Veri merkezinde 9000 MTU (uçtan uca), izin verildiğinde GRO/LRO'yu etkinleştirin.
RSS/RPS/RFS: NIC'deki çok kanallı kuyruklar, çekirdeklere göre dağıtım; irqbalance - kontrol altında.
SO_REUSEPORT: çekirdekler arasında dağıtılan ölçeklenebilir dinleme soketleri.
İstemci zaman aşımları ve çekmeler: kısa TCP keepalive, açık bağlantıların sınırı, geri basınç.
TLS: TLS 1. 3, AES-NI donanım talimatları, oturum devam ettirme, OCSP zımbalama.
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 (uygun olduğunda)
GPU: dolandırıcılık karşıtı çıkarım, öneriler, CV; Monitor 'util', 'mem', 'sm _ efficiency'.
SmartNIC/eBPF/DPDK: L4/L7 boşaltma, filtreleme, çekirdeğe geçiş olmadan telemetri.
Enerji profilleri: kararlı gecikme için sabit frekanslar; Agresif güç tasarrufu yapmaktan kaçının.
Uygulamalar ve RDBMS
Bağlantı havuzları: 'max _ conns' değerini sınırlayın, bağlantı havuzu uygulayın (PgBouncer/Hikari).
İndeksler/zamanlayıcılar: İndeksleri kapsayan EXPLAIN/ANALYZE profilleri, bölümleme.
Önbelleğe alma: Redis/in-process cache, statics için CDN, hot API'ler için edge cache.
Idempotence ve kuyruklar: geri çekilme basamaklarından kaçının, dedup'u açın.
Gzip/Brotli: CPU maliyetini dikkate alarak yanıtların sıkıştırılması; dengeyi seçin.
Konteynerler ve Kubernetes
İstekler/Sınırlamalar и bin paketleme
İstekler = "garanti", Limitler = "tavan. CPU tarafından Yanlış Limitler - kısma ve p99.
Patlama yüklerini (turnuva/maç zirveleri) düşünün - p95'te marj.
Bin-ambalaj: ayrı ana havuzlar (gecikme-crit, toplu, GPU, spot). Topolojiyi kullan (anti-afinite, spread).
Otomatik ölçekleme
Özel metriklere göre HPA (RPS/p95, CPU değil).
"Uzun ömürlü've" yoğun olmayan "işçiler için VPA.
Küme Otomatik Alıcı + bireysel düğüm grupları (isteğe bağlı/spot).
Olay yükleri için KEDA (kuyruklar, Kafka, cron).
Zamanlayıcı ve Yöneticiler
CPU Yöneticisi: Tam çekirdekleri gecikme açısından kritik beslemelere sabitlemek için 'statik'.
Topoloji Yöneticisi NUMA hizalaması.
HugePages/Device Plugins: DB/düşük gecikme ve GPU/FPGA için.
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 ve maliyet
Tarife profilleri: CPU/RAM/disk/ağ örneklerini seçin (hesaplama için optimize edilmiş, bellek için optimize edilmiş, depolama için optimize edilmiş).
Spot/Preemptible: Çok bölgeli artıklık ile toplu/evreleme/önbellekler için.
Rezervasyon/Tasarruf: "Kalıcı" kısım için 1-3 yıllık rezervler.
Sıcak/soğuk: katmanlı depolama, arşiv nesnesi, günlük tutma.
Atıl kaynaklar: Kritik olmayan ortamların gece/hafta sonu durakları.
Enerji Verimliliği (GreenOps)
Güç profilleri: Performans ve servis dengesi.
Birlikte konum: soğuk saatlerde sıkıştırma, kullanılmayan düğümleri kapatma.
KPI: istek başına watt, p95/watt, CO₂ - sağlayıcı metrikleri.
Gözlemlenebilirlik ve test
Метрики: CPU çalma/gaz verme, 'döngüler/talimatlar', LLC özledim, RSS/çalışma seti, sayfa hataları, disk lat p95/99, NIC damlaları, yeniden iletimler.
İzleme: "altın yollar" için dağıtılmış yollar.
Profilleme: eBPF/Perf/Flamegraphs, 'pprof'/YourKit/JFR.
Yük testleri: SLO odaklı, gerçek bir operasyon karışımı, "ısınma" fazı, hata enjeksiyonu.
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)
Optimizasyon kontrol listesi
- SLO'lar ve Altın Yollar (API'ler/Ödemeler/Ödemeler) tanımlanmıştır.
- CPU/alloc/IO/ağ profilleri toplandı, üst-N darboğazları bulundu.
- NUMA/IRQ/RSS, gecikme kritik düğümlerinde yapılandırılmıştır.
- THP kapalı (gerekirse), DB/Java hizmetleri için hugepages.
- Sıcak veri için NVMe, XFS/IO-sched yapılandırılmış, fio-bench onaylandı.
- Ağ yığını: MTU, RPS/RFS, SO_REUSEPORT; zaman aşımları/havuzlar.
- Kubernetes: İstekler doğru, Limitler boğmuyor, HPA iş metriklerine göre, VPA/CA dahil.
- "Pahalı" yollarda önbelleğe alma ve CDN; Redis/edge önbellek.
- FinOps: rightsizing/reserves/spot havuzları; boşta ortamları durdurmak.
- CI'de performans ototestleri, p95/p99'da regresyonlar.
iGaming/fintech'e özel
Planlanan zirveler: turnuvalar/maçlar/promosyonlar - ön cephelerin "elastik" havuzu, önbellek/CDN, HPA'nın RPS/gecikme ile önceden ısınması.
Ödemeler ve ödemeler: bireysel "altın" IP/etki alanları, öncelik sıraları, kaynak yalıtımı (sızıntı/tolerans), temel rezerv.
Antibot/antifraud: ağır modeller - GPU işçileri üzerinde; Çevrimiçi puanlama ≤ 50 ms p95; Özelliklerin önbelleği.
Düzenleyici: değiştirilemeyen günlükler ve şifreleme SLO'yu bozmamalıdır - donanım hızlandırmalarını ve eşzamansız boru hatlarını açın.
Mini oyun kitapları
Serbest bırakıldıktan sonra ↑ gecikme:1. Yanma oranı SLO'yu kontrol edin; 2) 'cpu/alloc' profilleri; 3) geri alma/özellik bayrağı; 4) çoğaltma/API önbelleğini artırmak; 5) RCA ve test fiksasyonu.
En yüksek yük (maç/turnuva):1. CDN/önbelleği ısıtın; 2) minReplicas'ı kaldırın; 3) patlama sınırlarını içerir; 4) yazı kuyrukları; 5) ikincil işlevler için salt okunur modu etkinleştirin.
Yaygın hatalar
CPU "boğucu" tepe iş yüklerini sınırlar - yüksek p99.
Geçersiz düğüm havuzu: mix latency-critical ve batch.
Veritabanlarında/brokerlerde NUMA/IRQ ayarlarının bulunmaması.
Algoritmaları/önbellekleri/SQL'i düzeltmek yerine "semptomları tedavi etme" (CPU ekleme).
RPS/gecikme yerine CPU tarafından HPA - geç ölçeklenir.
CI'da performans testi yok - prod'da regresyon.
Toplam
Optimizasyon sistematik bir iştir: SLI/SLO'yu ölçün, profil, düzeltme algoritmaları, ayar donanımı (NUMA/IRQ/IO/network), kaynakları doğru "boyutlandırın've ölçeklemeyi otomatikleştirin. Şablonlardaki (resimler, grafikler, politikalar) iyileştirmeleri yakalayın, maliyeti ve enerjiyi kontrol edin - platformunuz aşırı zirvelerde bile hızlı, ekonomik ve sürdürülebilir kalacaktır.