Benchmarking va unumdorlikni taqqoslash
Qisqacha xulosa
Benchmarking - bu tajriba, «5 daqiqa davomida wrk ishga tushirish» emas. Asosiy prinsiplar:1. Faraz va metrikani shakllantiring.
2. Oʻzgaruvchilarni (temir, yadro, quvvat, fon shovqinini) nazorat qiling.
3. Yetarli ma’lumotlarni to’plang (nusxalar, ishonchli oraliqlar).
4. Profillashni o’tkazing - usiz «sababini» tushunib bo’lmaydi.
5. Repro: skriptlar, versiyalar va artefaktlarni tuzatish.
Benchmark va biznes metrika maqsadlari
O’tkazish qobiliyati (throughput): RPS/QPS/CPS, yozuvlar/sek.
Kechikish (latency): p50/p95/p99/dumlar zichligi.
Samaradorligi: Cost-per-1k RPS, har bir tranzaksiya uchun vatt, $/millisekund yaxshilash.
Barqarorlik: jitter, sikllar/nodlar orasidagi o’zgaruvchanlik.
Elastiklik: N × resurs (Amdahl/Gustafson mo’ljallari) da ko’rsatkichlar qanday kattalashtiriladi.
Metodologiya: eksperiment dizayni
Gipoteza: «Envoy HTTP/3 bilan p95 TTFB ni bir xil RPS bilan 10-15% ga kamaytiradi».
Solishtirish birligi: temir bild/ /instans versiyasi.
A/B-sxema: bir xil muhitda parallel yugurish; yoki drift taʼsirini kamaytirish uchun ABAB/Latin maydoni.
Takrorlar soni: barqaror baholash uchun konfiguratsiyaga 10 ta qisqa + 3 ta uzun progonlar ≥.
Statistika: mediana, MAD, butstrep bilan ishonchli oraliqlar; «dumli» taqsimotlar uchun parametrik bo’lmagan testlar (Mann-Whitney).
DoE (minimal): bir vaqtning o’zida bitta o’zgaruvchini (OVAT) yoki 2-3 omillar uchun fraksiyaviy faktor rejasini o’zgartiring (masalan, TLS profili × HTTP versiyasi × yadro).
O’zgaruvchan va shovqinlarni nazorat qilish
CPU governor: `performance`; «power save» oʻchirish.
Turbo/Throttling: chastotalar, harorat va trottling monitoringi (aks holda isitish noto’g’ri yutuq beradi).
NUMA/Hyper-Threading: IRQ va jarayonlarni (’taskset/numactl’) oʻrnating, xotiraning joyini oʻlchang.
C-states/IRQ balance: moslamalarni tuzating; tarmoq testlari uchun - aniq yadrolarga pin IRQ.
Orqa fon jarayonlari: sof nod, oʻchirish cron/backup/antivirus/updatedb.
Tarmoq: barqaror yo’llar, MTU/ECN/AQM o’rnatilgan yo’llar, kanal flatteri yo’qligi.
Ma’lumotlar: bir xil to’plamlar, kardinallik va taqsimotlar.
Kesh: «sovuq» (birinchi o’tish) va «issiq» (takroriy) rejimlarni ajrating, aniq belgilang.
Benchmarklar klasslari
1) Mikro-benchmarklar (funksiya/algoritm)
Maqsad: aniq kod/algoritmni o’lchash.
Asboblar: o’rnatilgan bench-freymvorkalar (Go’testing. B`, JMH, pytest-benchmark).
Qoidalar: JIT isitish, millisekundlar → nanokendlar; GC izolyatsiyasi; belgilangan seed.
2) Mezo-benchmarki (komponent/servis)
HTTP-server, kesh, broker, bitta node DB.
Asboblar: wrk/wrk2, k6 (open model), vegeta, ghz (gRPC), fio, sysbench, iperf3.
Qoidalar: ulanishlar/fayllar, pullar limitlari; CPU/IRQ/GC to’g "risidagi hisobot.
3) Makro-benchmarklar (e2e/so’rov yo’li)
To’liq yo’l: CDN/edge → proxy → servis → DB/kesh → javob.
Instrumentlar: k6/Locust/Gatling + RUM/OTel treysing; marshrutlarning realistik aralashmasi.
Qoidalar: haqiqatga yaqinroq («iflos» ma’lumotlar, tashqi tizimlar laglari), retralar bilan ehtiyotkorlik bilan.
Qatlamlar boʻyicha metriklar toʻplami
Test namunalari va buyruqlari
Tarmoq (TCP/UDP):bash iperf3 -s # server iperf3 -c <host> -P 8 -t 60 # parallel, stable bandwidth
HTTP-server (barqaror yuk, wrk2):
bash wrk2 -t8 -c512 -d5m -R 20000 https://api. example. com/endpoint \
--latency --timeout 2s
Open-model (k6, arrival-rate):
javascript export const options = {
scenarios: { open: { executor: 'constant-arrival-rate', rate: 1000, timeUnit: '1s',
duration: '10m', preAllocatedVUs: 2000 } },
thresholds: { http_req_failed: ['rate<0. 3%'], http_req_duration: ['p(95)<250'] }
};
Disk (fio, 4k random read):
bash fio --name=randread --rw=randread --bs=4k --iodepth=64 --numjobs=4 \
--size=4G --runtime=120 --group_reporting --filename=/data/testfile
BD (sysbench + PostgreSQL namunaviy g’oya):
bash sysbench oltp_read_write --table-size=1000000 --threads=64 \
--pgsql-host=... --pgsql-user=... --pgsql-password=... prepare sysbench oltp_read_write --time=600 --threads=64 run
Xotira/CPU (Linux perf + stress-ng):
bash perf stat -e cycles,instructions,cache-misses,L1-dcache-load-misses \
-- <your_binary> --bench
Statistika va validlik
Takrorlash: kamida 10 ta progon, outliers (robastno: mediana/MAD) chiqarib tashlansin.
Ishonchli oraliqlar: p95/p99 va o’rta uchun 95% CI butstrep.
Effekt-o’lchami: nisbiy o’zgarish va uning CI (masalan, − 12% [− 9%; − 15%]).
Amaliy ahamiyati: p95 ni + 30% CPU narxida 10% ga kamaytirish - bunga arziydimi?
Grafiklar: taqsimlash uchun violin/ECDF, «toʻyinish egri chiziqlari» (RPS → latency).
Tor joyni profillash va mahalliylashtirish
CPU: `perf`, `async-profiler`, eBPF/pyroscope; flamegraph oldin va keyin.
Alloc/GC: runtime (Go pprof/Java JFR) profillari.
I/O: `iostat`, `blktrace`, `fio --lat_percentiles=1`.
Сеть: `ss -s`, `ethtool -S`, `dropwatch`, `tc -s qdisc`.
БД: `EXPLAIN (ANALYZE, BUFFERS)`, pg_stat_statements, slowlog.
Kesh: top-kalitlar, TTL, eviction sabab.
Hisobot va artefaktlar
Nimani tuzatish kerak:- git SHA bilda, kompilyatsiya/optimallashtirish bayroqlari.
- Yadro/tarmoq konfigurasi (sysctl), drayverlar versiyasi/NIC/firmware.
- Topologiya (vCPU/NUMA/HT), governor, harorat/chastota.
- Ma’lumotlar: o’lchami, kardinalligi, taqsimlanishi.
- p50/p95/p99 jadvallari, xato/sek, throughput, resurslar (CPU/RAM/IO), CI.
- Artefaktlar: dastur skriptlari, grafiklar, flamegraph, xom JSON/CSV natijalari, atrof-muhit protokoli.
Halol taqqoslashlar (fair benchmarking)
Bir xil cheklovlar (conn pool, keepalive, TLS zanjirlari, OCSP stapling).
Kelishilgan taymautlar/retraylar va HTTP versiyasi (h2/h3).
Harorat balansi: muvozanatgacha isitish (turbo-katta effektsiz).
Adolatli keshlar: ikkalasi ham «sovuq» yoki ikkalasi ham «issiq».
Tarmoq simmetriyasi: bir xil yo’nalishlar/MTU/ECN/AQM.
Vaqt byudjeti: DNS/TLS/connect - aniq sanash yoki bir xilda chiqarib tashlash.
Anti-patternlar
Bitta chiqish → «chiqish».
Rejimlarni (sovuqning bir qismi, issiqning bir qismi) bir seriyada aralashtirish.
Internet yuklamasi uchun ochiq o’rniga yopiq model → soxta «barqarorlik».
Hisobga olinmagan retrajlar → «RPS o’sib bormoqda» dubl va kaskadli 5xx.
Turli temirlarda/yadrolarda/energiya xemalarida taqqoslash.
Profillashning yo’qligi → «ko’r-ko’rona» maqbullashtirish.
Profillarni tahlil qilmasdan GC/heap bilan o’yin → dumlar regressiyasi.
Amaliy retseptlar
Eng kam bench payplaynning qadamlari:1. Muhit (skript’env _ capture. sh`).
2. Qizdiring (5-10 daqiqa), chastota/haroratni qayd qiling.
3. Qisqa + 1 ta uzoq pog’onani N takrorlash.
4. Profillarni (CPU/alloc/IO) choʻqqida olib tashlash.
5. CI/grafiklarni sanash, artefaktlarni yig’ish.
6. Yechim: farazni qabul qilish/rad etish, next steps shakllantirish.
Qiyalik (capacity curve):- RPS bosqichlari (10% qadam) → p95/xatolarni aniqlaymiz → tizzani topamiz.
- Biz RPS → latency va RPS → CPU grafigini yaratmoqdamiz: chegara va keyingi% qiymatini ko’ramiz.
iGaming/fintech uchun o’ziga xos
Millisekund qiymati: $ -effekt bo’yicha yaxshilanishlarni (konvertatsiya/chiqish/PSP limitlari) reytinglang.
Piki (o’yinlar/turnirlar): spike + plateau benchmarklari TLS/CDN/kesh bilan isitiladi.
To’lovlar/PSP: sandbox-limitlar bilan end-to-end, idempotentlik va tanazzulga bo’lgan munosabatlarni o’lchang; Time-to-Wallet proxy metrlari bilan tuzating.
Antifrod/bot-filterlar: qoidalar profilini (false-positive-rate, latency ilova) makro-banchga kiriting.
Etakchilar/jekpotlar: issiq kalitlarni/reytingni, blokirovkani, atomarlikni sinovdan o’tkazing.
Benchmarking chek-varaqasi
- Faraz/metrika/muvaffaqiyat mezoni.
- Oʻzgaruvchini boshqarish (quvvat/NUMA/IRQ/tarmoq/kesh).
- Progonlar rejasi (nusxalari, davomiyligi, isishi).
- «Sovuq/issiq» rejimlarni ajratish.
- Profil oʻrnatilgan (CPU/alloc/IO/DB).
- Statistika: CI, ahamiyat testlari, grafiklar.
- Repozitoriyadagi artefaktlar va repro skriptlar (stend uchun IaC).
- «Yaxshilash qiymati» va tavsiyalar bilan hisobot.
- Optimallashtirishdan keyin retest (regression perf).
Mini-hisobot (shablon)
Maqsad: API p95 ni 15% ga, CPU> 10% ga kamaytirish.
Usul: A/B, k6 open-model 1k rps, 10 × 3 progon, warm cache.
Jami: p95 − 12% [− 9%; − 15%], CPU + 6%, 5xx o’zgarishsiz.
Flamegraph: ↓ JSON serializatsiya (− 30% CPU), tor joy DBga o’tdi.
Qaror: optimallashtirishni qabul qilish; keyingi qadam - DB so’rovlarini batchlash.
Artefaktlar: grafiklar, profillar, konfiglar, xom JSON.
Jami
Yaxshi benchmarking - bu qat’iy metodologiya + halol taqqoslash + statistik haqiqiylik + profillash + takrorlanuvchanlik. Gipotezalarni qo’ying, atrof-muhitni nazorat qiling, ishonchli oraliqlarni hisoblang, artefaktlarni nashr qiling va yaxshilanish uchun qarorlar qabul qiling. Shunday qilib, siz taqdimotda chiroyli raqamni emas, balki platformaning tezligi va oldindan aytilishi mumkin bo’lgan haqiqiy o’sishni olasiz.