Da li ste upoznati sa prosečnim vremenom odziva vaše internet stranice? Da li znate koliko istovremenih korisnika vaša veb lokacija može da podnese?
Testiranje opterećenja je ključno kako bi veb aplikacije mogle da razumeju kapacitet veb sajta. Ako ste u procesu odabira veb servera, testiranje opterećenja je jedan od prvih koraka koji treba preduzeti kako biste utvrdili koji server najbolje odgovara vašim potrebama.
Analiza performansi vam može pomoći da odlučite:
- Koji veb server postiže najbolje rezultate
- Koliko servera vam je potrebno da biste opslužili određeni broj zahteva
- Koja konfiguracija daje optimalne rezultate
- Koje tehnološke kombinacije pružaju superiorne performanse
- U kom trenutku će vaš sajt početi da radi sporije ili čak da se ruši
Na internetu postoji nekoliko alata za testiranje opterećenja, međutim, ukoliko preferirate interno rešenje ili želite da analizirate samo performanse veb servera, možete koristiti ApacheBench ili neki od alata koji su navedeni u nastavku.
Ja sam koristio Apache i Nginx veb servere hostovane na DigitalOcean radi testiranja.
ApacheBench
ApacheBench (ab) je open-source program koji se koristi preko komandne linije i kompatibilan je sa svim veb serverima. U ovom tekstu ću objasniti kako instalirati ovaj koristan program i kako izvršiti test opterećenja radi poređenja rezultata.
Apache
Instalirajmo ApacheBench koristeći yum komandu.
yum install httpd-tools
Ukoliko već imate instalirane httpd-tools, možete preskočiti ovaj korak.
Sada, pogledajmo rezultate za 5000 zahteva sa 500 istovremenih konekcija.
[[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] ~]#
Kao što možete videti, Apache je obradio 373 zahteva u sekundi, a ukupno vreme za obradu svih zahteva je iznosilo 13.389 sekundi.
Sada znate da standardna konfiguracija može da podnese ovoliki broj zahteva. Ukoliko u budućnosti budete vršili izmene konfiguracije, možete ponovo testirati performanse radi poređenja rezultata i odabrati optimalnu konfiguraciju.
Nginx
Hajde da testiramo Nginx na isti način kao što smo testirali Apache, kako biste mogli da uporedite njihove performanse.
[[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] ~]#
Vau!
Da li ste to videli?
Nginx je obradio 6593 zahteva u sekundi! Nginx je pobednik.
Iz ovog poređenja samo dva veb servera, možete dobiti jasniju sliku o tome koji server odabrati za vašu veb aplikaciju.
Gore navedeni test je sproveden na CentOS 6.8, 64-bit operativnom sistemu. Možete testirati i druge kombinacije operativnog sistema i veb servera radi dobijanja optimalnih rezultata.
Ne preferirate ApacheBench iz bilo kog razloga? Ne brinite, postoji još mnogo drugih alata za testiranje HTTP opterećenja.
SIEGE
SIEGE je HTTP alat za testiranje opterećenja koji je podržan na UNIX sistemima. Možete uneti više URL adresa u tekstualni fajl za testiranje opterećenja. Siege možete instalirati pomoću yum komande.
# yum install siege
Pokrenimo test sa 500 istovremenih zahteva u trajanju od 5 sekundi.
[[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] ~]#
Hajde da analiziramo parametre.
-q – pokretanje u tihom režimu (ne prikazuje detalje zahteva)
-t – testiranje u trajanju od 5 sekundi
-c – 500 istovremenih zahteva
Kao što možete videti, dostupnost je 100%, a vreme odziva je 0.04 sekunde. Parametre testiranja opterećenja možete podesiti prema vašim potrebama.
Ali
Ali je relativno nov alat za testiranje opterećenja koji nudi analizu u realnom vremenu. Podržava više platformi za instalaciju, uključujući i Docker.
Nakon instalacije, pokrenite ali kako biste videli detalje o upotrebi.
[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]:~#
Kao što vidite, imate opciju da šaljete HTTP zaglavlja, podešavate trajanje testa, ograničenje brzine, vremensko ograničenje i još mnogo toga. Ja sam uradio brzi test na vdzvdz alatima i ovo je rezultat:
Izveštaj je interaktivan i daje detaljne informacije o kašnjenju.
Gobench
Gobench je napisan u Go programskom jeziku i predstavlja jednostavan alat za testiranje opterećenja dizajniran za analizu performansi veb servera. Podržava više od 20.000 istovremenih korisnika, što ApacheBench ne podržava.
Apache JMeter
JMeter je jedan od najpopularnijih open-source alata za merenje performansi veb aplikacija. JMeter je Java aplikacija i možete ga koristiti ne samo za testiranje veb servera, već i za testiranje PHP, Java, ASP.net, SOAP, REST aplikacija itd.
JMeter ima intuitivni grafički interfejs. Najnovija verzija 3.0 zahteva Java 7 ili noviju verziju za pokretanje aplikacije. Ako vam je cilj optimizacija performansi veb aplikacije, svakako isprobajte JMeter.
wrk
wrk je još jedan moderan alat za analizu performansi koji opterećuje vaš veb server i daje detalje o kašnjenju, zahtevima u sekundi, brzini prenosa podataka itd.
Sa wrk možete podesiti test opterećenja sa određenim brojem niti.
Uzmimo primer pokretanja testa u trajanju od 5 minuta sa 500 istovremenih korisnika sa 8 niti.
wrk –t8 –c500 -d300s http://localhost
Autocannon
Inspirisan sa wrk, autocannon je napisan u Node.js. Možete ga koristiti programski, preko API-ja ili kao samostalni uslužni program. Sve što vam treba je instaliran Node.js.
Možete kontrolisati broj konekcija, zahteve, trajanje, radnike, vremensko ograničenje, brzinu konekcije i nudi mnoštvo opcija za analizu performansi vaše veb aplikacije.
curl-loader
curl-loader je napisan u C-u i služi za simulaciju opterećenja aplikacija i podržava SSL/TLS. Osim testiranja veb stranica, ovaj open-source alat možete koristiti i za testiranje FTP servera.
Možete kreirati plan testiranja sa kombinacijom HTTP, HTTPS, FTP i FTPS unutar jedne serije konfiguracija.
httperf
httperf je alat visokih performansi koji se fokusira na mikronivo i makronivo analize. Podržava HTTP/1.1 i SSL protokole.
Ako imate očekivan broj istovremenih korisnika i želite da testirate da li vaš veb server može da podnese određeni broj zahteva, možete koristiti sledeću komandu:
httperf --server localhost --port 80 --num-conns 1000 --rate 100
Gore navedena komanda će testirati sa 100 zahteva u sekundi za 1000 HTTP zahteva.
Tsung
Tsung je multi-protokol alat za testiranje opterećenja koji podržava HTTP, SOAP, PostgreSQL, LDAP, XAMP, MySQL servere. Podržava HTTP/1.0 i HTTP/1.1 i automatsku obradu kolačića.
Generisanje izveštaja je takođe moguće uz pomoć Tsunga.
Zaključak
Nadam se da će vam gore navedeni alati za analizu performansi pomoći da steknete uvid u performanse vašeg veb servera i da odlučite koji server najbolje odgovara vašem projektu.
Pored toga, ne zaboravite da pratite performanse vaše veb lokacije.