Benchmark Webserveren: Finn Den Perfekte For Din Nettside

Viktigheten av Belastningstesting for Nettsteder

Har du innsikt i hvor raskt nettsiden din svarer i gjennomsnitt? Vet du hvor mange brukere som kan være inne på nettsiden din samtidig uten at den krasjer eller blir treg?

Belastningstesting er kritisk for å forstå kapasiteten til en nettside eller nettapplikasjon. Hvis du for eksempel skal velge en ny webserver, vil det å kjøre en belastningstest være et av de første stegene for å se hvilken server som er best egnet for dine behov.

Gjennom benchmarking kan du finne ut:

  • Hvilken webserver som yter best under press.
  • Hvor mange servere du trenger for å håndtere et visst antall forespørsler.
  • Hvilken konfigurasjon som gir deg de beste resultatene.
  • Hvilke kombinasjoner av teknologi som fungerer mest effektivt sammen.
  • Når nettsiden din begynner å jobbe tregere eller eventuelt krasjer.

Det finnes en rekke nettbaserte verktøy for å utføre slike tester. Men dersom du er på jakt etter en intern løsning, eller ønsker å teste ytelsen til webserveren din, kan du vurdere å bruke ApacheBench, i tillegg til noen av verktøyene vi nevner nedenfor.

For å teste ytelsen brukte jeg Apache og Nginx webservere, begge driftet hos DigitalOcean.

ApacheBench: Et Verktøy for Ytelsestesting

ApacheBench (ab) er et kommandolinjeverktøy med åpen kildekode som kan brukes med alle typer webservere. I denne artikkelen vil jeg forklare hvordan du installerer dette programmet og hvordan du utfører belastningstester for å sammenligne resultatene.

Installasjon av ApacheBench

La oss installere ApacheBench ved hjelp av en yum-kommando:

yum install httpd-tools

Hvis du allerede har httpd-verktøyene installert, kan du ignorere dette trinnet.

Utfør en Belastningstest med ApacheBench

La oss teste ytelsen ved å simulere 5000 forespørsler med en samtidighet på 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] ~]#

Som du ser, behandlet Apache 373 forespørsler per sekund, og det tok totalt 13,389 sekunder å fullføre alle forespørslene.

Nå vet du at standardkonfigurasjonen kan håndtere dette antallet forespørsler. Når du gjør endringer i konfigurasjonen, kan du kjøre testen på nytt for å sammenligne resultatene og velge den mest optimale.

Nginx Ytelsestest

La oss gjøre samme test for Nginx, slik at vi kan se hvilken webserver som leverer best ytelse.

[[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
100%    79 (longest request)
[[email protected] ~]#

Imponerende!

Nginx klarte å behandle hele 6593 forespørsler per sekund! Det er klart en vinner i denne testen.

Ved å sammenligne bare to webservere, får du en god indikasjon på hvilken du bør velge for ditt nettsted eller nettapplikasjon.

Testen ovenfor ble utført på CentOS 6.8, 64 bit. For å oppnå optimale resultater kan du prøve ulike kombinasjoner av operativsystem og webserverversjoner.

Hvis du av en eller annen grunn ikke liker ApacheBench, finnes det mange andre alternativer for å utføre HTTP-lasttester.

Siege: Et Annet Belastningstestverktøy

Siege er et HTTP-lasttestverktøy som er kompatibelt med UNIX-systemer. Du kan laste inn flere URL-er fra en tekstfil for å teste med. Du kan installere Siege ved hjelp av yum:

# yum install siege

La oss kjøre en test med 500 samtidige forespørsler i 5 sekunder:

[[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] ~]#

La oss se nærmere på parameterne:

  • -q: Kjører testen i stille modus (viser ikke forespørselsdetaljer).
  • -t: Kjører testen i 5 sekunder.
  • -c: Simulerer 500 samtidige forespørsler.

Som du kan se, er tilgjengeligheten 100 %, og responstiden er 0,04 sekunder. Du kan justere testparameterne basert på dine spesifikke behov.

Ali: Sanntids Belastningstesting

Ali er et relativt nytt verktøy for belastningstesting som tilbyr sanntidsanalyse. Det kan installeres på flere plattformer, inkludert Docker.

Etter installasjon kan du kjøre Ali for å se bruksdetaljer:

[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]:~#

Som du ser, gir Ali deg muligheten til å sende HTTP-hoder, spesifisere testvarighet, hastighetsbegrensninger, tidsavbrudd og mye mer. Jeg kjørte en rask test på tipsbilk.net Tools, og her er resultatene:

Rapporten er interaktiv og gir detaljert informasjon om latens.

Gobench

Gobench er skrevet i Go og er et enkelt verktøy for å teste ytelsen til webservere. Det støtter mer enn 20 000 samtidige brukere, noe ApacheBench ikke gjør.

Apache JMeter

JMeter er et populært verktøy med åpen kildekode for å teste ytelsen til nettapplikasjoner. Det er en Java-basert applikasjon som ikke bare kan teste webservere, men også PHP, Java, ASP.NET, SOAP, REST, og andre.

JMeter har et brukervennlig grensesnitt, og den nyeste versjonen 3.0 krever Java 7 eller høyere for å kjøre. Du bør prøve JMeter hvis målet ditt er å optimalisere ytelsen til dine nettapplikasjoner.

wrk

wrk er et annet moderne verktøy for ytelsestesting som gir deg detaljert informasjon om latens, antall forespørsler per sekund og overføringshastighet.

Med wrk kan du spesifisere å kjøre en belastningstest med et bestemt antall tråder.

La oss ta et eksempel der vi kjører en test i 5 minutter med 500 samtidige brukere og 8 tråder:

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

Autocannon

Inspirert av wrk, er autocannon skrevet i Node.js. Du kan bruke det programmatisk, gjennom et API eller som et frittstående verktøy. Forutsetningen er at du har NodeJS installert.

Du kan kontrollere en rekke tilkoblinger, forespørsler, varighet, arbeidere, tidsavbrudd, tilkoblingshastighet og har mange alternativer for å måle ytelsen til nettapplikasjonene dine.

Curl-loader

Curl-loader er skrevet i C for å simulere applikasjonsbelastning, og det støtter SSL/TLS. I tillegg til å teste nettsider, kan du også bruke dette verktøyet for å belaste FTP-servere.

Du kan lage en testplan med en blanding av HTTP, HTTPS, FTP og FTPS i én enkelt batchkonfigurasjon.

httperf

httperf er et høyytelsesverktøy som fokuserer på mikro- og makronivå benchmarks. Det støtter HTTP/1.1 og SSL-protokoller.

Hvis du har et forventet antall samtidige brukere og ønsker å teste om webserveren din kan håndtere et gitt antall forespørsler, kan du bruke følgende kommando:

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

Denne kommandoen tester med 100 forespørsler per sekund for totalt 1000 HTTP-forespørsler.

Tsung

Tsung er et distribuert verktøy for å teste ytelse med flere protokoller, som HTTP, SOAP, PostgreSQL, LDAP, XAMP og MySQL server. Det støtter HTTP/1.0, HTTP/1.1, og håndterer informasjonskapsler automatisk.

Tsung kan også generere rapporter.

Konklusjon

Jeg håper at disse verktøyene har gitt deg en bedre forståelse av hvordan du kan teste ytelsen til webserveren din, og hva som fungerer best for ditt spesifikke prosjekt.

Husk også å overvåke ytelsen til nettsiden din jevnlig for å sikre optimal drift.