Cum se efectuează un benchmark de performanță a serverului web?

Cunoașteți timpul mediu de răspuns al site-ului dvs.? Știți câți utilizatori concurenți poate gestiona site-ul dvs.?

Testarea de încărcare este esențială pentru ca aplicațiile web să cunoască capacitatea site-ului web. Dacă doriți să alegeți serverul web, atunci unul dintre primele lucruri pe care doriți să le faceți este să efectuați testarea de încărcare și să vedeți care dintre ele funcționează bine pentru dvs.

Benchmarking-ul vă poate ajuta să decideți;

  • Care server web funcționează cel mai bine
  • Numărul de servere de care aveți nevoie pentru a servi x număr de cereri
  • Ce configurație vă oferă cele mai bune rezultate
  • Care stive de tehnologie au rezultate mai bune
  • Când site-ul dvs. va funcționa mai lent sau defect

Există mai multe instrumente online pentru a efectua un test de stres; totuși, dacă sunteți în căutarea unei soluții interne sau doriți să evaluați doar performanța serverului web, atunci puteți utiliza ApacheBench și, alternativ, unele dintre instrumentele enumerate mai jos.

Am folosit serverul web Apache și Nginx găzduit pe DigitalOcean pentru a-l testa.

ApacheBench

ApacheBench (ab) este un program de linie de comandă open-source care funcționează cu orice server web. În această postare, voi explica cum să instalez acest mic program și să efectuez testul de încărcare pentru a evalua rezultatele.

Apache

Să instalăm ApacheBench folosind o comandă yum.

yum install httpd-tools

Dacă aveți deja httpd-tools, atunci puteți ignora acest lucru.

Acum, să vedem cum funcționează pentru 5000 de solicitări cu o concurență de 500.

[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:        Apache/2.2.15
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        4961 bytes
Concurrency Level:      500
Time taken for tests:   13.389 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Non-2xx responses:      5058
Total transferred:      26094222 bytes
HTML transferred:       25092738 bytes
Requests per second:    373.45 [#/sec] (mean)
Time per request:       1338.866 [ms] (mean)
Time per request:       2.678 [ms] (mean, across all concurrent requests)
Transfer rate:          1903.30 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0   42  20.8     41    1000
Processing:     0  428 2116.5     65   13310
Waiting:        0  416 2117.7     55   13303
Total:         51  470 2121.0    102   13378
Percentage of the requests served within a certain time (ms)
50%    102
66%    117
75%    130
80%    132
90%    149
95%    255
98%  13377
99%  13378
100%  13378 (longest request)
[[email protected] ~]#

Deci, după cum puteți vedea, Apache a gestionat 373 de solicitări pe secundă și a durat un total de 13.389 de secunde pentru a servi cererile totale.

  Cum să vă asigurați routerul împotriva atacurilor Mirai Botnet

Acum știți că configurația implicită poate servi aceste multe solicitări, așa că atunci când faceți modificări de configurare, puteți face din nou testul pentru a compara rezultatele și a alege pe cea mai bună.

Nginx

Să facem testul ce am făcut pentru Apache, astfel încât să puteți compara care dintre ele are performanțe mai bune.

[[email protected] ~]# ab -n 5000 -c 500 http://localhost:80/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 500 requests
Completed 1000 requests
Completed 1500 requests
Completed 2000 requests
Completed 2500 requests
Completed 3000 requests
Completed 3500 requests
Completed 4000 requests
Completed 4500 requests
Completed 5000 requests
Finished 5000 requests
Server Software:        nginx/1.10.1
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        3698 bytes
Concurrency Level:      500
Time taken for tests:   0.758 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      19660000 bytes
HTML transferred:       18490000 bytes
Requests per second:    6593.48 [#/sec] (mean)
Time per request:       75.832 [ms] (mean)
Time per request:       0.152 [ms] (mean, across all concurrent requests)
Transfer rate:          25317.93 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    6  11.0      2      53
Processing:     5   19   8.2     17      53
Waiting:        0   18   8.2     16      47
Total:         10   25  17.4     18      79
Percentage of the requests served within a certain time (ms)
50%     18
66%     21
75%     21
80%     22
90%     69
95%     73
98%     75
99%     76
00%     79 (longest request)
[[email protected] ~]#

WOW!

Ai văzut asta?

Nginx a gestionat 6593 de solicitări pe secundă! Un castigator.

Așa că, doar comparând cu două servere web, veți avea o idee pe care să alegeți pentru aplicația dvs. web.

Testul de mai sus este pe CentOS 6.8, 64 de biți. Puteți încerca mai multe combinații de versiunea OS și Web Server pentru rezultate optime.

Nu-ți place ApacheBench din orice motiv? Nu vă faceți griji, există o mulțime de altele pe care le puteți folosi pentru a efectua încărcarea HTTP.

ASEDIU

ASEDIU este un utilitar de testare a încărcării HTTP acceptat pe UNIX. Puteți pune mai multe adrese URL într-un fișier text pentru a încărca teste. Puteți instala asediu folosind yum.

# yum install siege

Să rulăm testul cu 500 de solicitări simultane timp de 5 secunde.

[[email protected] ~]# siege -q -t 5S -c 500 http://localhost/
Lifting the server siege...      done.
Transactions:                       4323 hits
Availability:               100.00 %
Elapsed time:                       4.60 secs
Data transferred:        15.25 MB
Response time:                    0.04 secs
Transaction rate:       939.78 trans/sec
Throughput:                         3.31 MB/sec
Concurrency:                      37.97
Successful transactions:        4323
Failed transactions:                0
Longest transaction:            1.04
Shortest transaction:            0.00
[[email protected] ~]#

Pentru a defalca parametrii.

  Cum să generați și să utilizați arta AI în mod etic

-q – să-l ruleze în liniște (nu afișează detaliile cererii)

-t – rulați timp de 5 secunde

-c – 500 de cereri concurente

Deci, după cum puteți vedea, disponibilitatea este de 100%, iar timpul de răspuns este de 0,04 secunde. Puteți modifica parametrul testului de încărcare în funcție de obiectivul dvs.

Ali

Ali este un instrument de testare a sarcinii relativ nou pentru a efectua analize în timp real. Suportă mai multe platforme de instalat, inclusiv Docker.

Odată instalat, executați ali pentru a vedea detaliile de utilizare.

[email protected]:~# ali
no target given
Usage:
  ali [flags] <target URL>

Flags:
  -b, --body string         A request body to be sent.
  -B, --body-file string    The path to file whose content will be set as the http request body.
      --debug               Run in debug mode.
  -d, --duration duration   The amount of time to issue requests to the targets. Give 0s for an infinite attack. (default 10s)
  -H, --header strings      A request header to be sent. Can be used multiple times to send multiple headers.
  -k, --keepalive           Use persistent connections. (default true)
  -M, --max-body int        Max bytes to capture from response bodies. Give -1 for no limit. (default -1)
  -m, --method string       An HTTP request method for each request. (default "GET")
  -r, --rate int            The request rate per second to issue against the targets. Give 0 then it will send requests as fast as possible. (default 50)
  -t, --timeout duration    The timeout for each request. 0s means to disable timeouts. (default 30s)
  -v, --version             Print the current version.

Examples:
  ali --duration=10m --rate=100 http://host.xz

Author:
  Ryo Nakao <[email protected]>
[email protected]:~#

După cum puteți vedea mai sus, aveți opțiunea de a trimite anteturi HTTP, durata testului, limita de rată, timeout și multe altele. Am făcut un test rapid pe tipstrick.ro Tools și iată cum arată rezultatul.

Raportul este interactiv și oferă informații detaliate despre latența.

Gobench

Gobench este scris în limbajul Go și un utilitar simplu de testare a încărcării pentru a evalua performanța serverului web. Acceptă mai mult de 20.000 de utilizatori concurenți, ceea ce ApacheBench nu.

  Cum se sortează valorile în Microsoft Excel

Apache JMeter

JMeter este unul dintre cele mai populare instrumente open-source pentru măsurarea performanței aplicațiilor web. JMeter este o aplicație bazată pe Java și nu doar un server web, dar o puteți folosi împotriva PHP, Java. ASP.net, SOAP, REST etc.

JMeter a primit GUI decent și prietenos, iar cea mai recentă versiune 3.0 necesită Java 7 sau o versiune ulterioară pentru a lansa aplicația. Trebuie să încercați JMeter dacă scopul dvs. este să optimizați performanța aplicației web.

lucrare

lucrare este un alt instrument modern de măsurare a performanței pentru a pune o sarcină pe serverul dvs. web și vă oferă detalii de latență, solicitare pe secundă, transfer pe secundă etc.

Cu wrk, puteți specifica să rulați un test de încărcare cu un număr de fire.

Să luăm un exemplu de rulare a unui test timp de 5 minute cu 500 de utilizatori concurenți cu 8 fire.

wrk –t8 –c500 -d300s http://localhost

Autotun

Inspirat de muncă, tun automat este scris în Node.js. Îl puteți folosi programatic, prin API sau utilitar independent. Tot ce aveți nevoie este instalarea NodeJS ca o condiție prealabilă.

Puteți controla o serie de conexiuni, solicitări, durată, lucrători, timeout, rata de conectare și puteți oferi o mulțime de opțiuni pentru a compara aplicațiile dvs. web.

Curl-loader

curl-loader este scris în C pentru a simula încărcarea aplicației și acceptă SSL/TLS. Împreună cu testul paginii web, puteți utiliza și acest instrument open-source pentru a efectua încărcare pe serverele FTP.

Puteți crea un plan de testare cu o combinație de HTTP, HTTPS, FTP și FTPS într-o singură configurație de lot.

httperf

The httperf este un instrument de înaltă performanță care se concentrează pe benchmark-uri la nivel micro și macro. Acceptă protocoalele HTTP/1.1 și SSL.

Dacă aveți numărul așteptat de utilizatori concurenți și doriți să testați dacă serverul dvs. web poate servi un număr de cereri, puteți utiliza următoarea comandă.

httperf --server localhost --port 80 --num-conns 1000 --rate 100

Comanda de mai sus va testa cu 100 de solicitări pe secundă pentru 1000 de solicitări HTTP.

Tsung

Tsung este un instrument de testare a stresului distribuit multi-protocol pentru a sublinia serverul HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL. Acceptă HTTP/1.0, HTTP/1.1, iar cookie-urile sunt gestionate automat.

Generarea unui raport este fezabilă cu Tsung.

Concluzie

Sper că instrumentele de evaluare comparativă de mai sus vă oferă o idee despre performanța serverului dvs. web și decideți ce funcționează cel mai bine pentru proiectul dvs.

În continuare, nu uitați să monitorizați performanța site-ului dvs.