Veebiserverite tarkvara vordlus

From ICO wiki
Jump to navigationJump to search


Veebiserverite tarkvara võrdlus

Autor: Priit Pääsukene

Lühidalt veebiserveritest

Veebiserverid on protsessid, mis oskavad vastata HTTP ja HTTPS päringutele. Tavakasutaja poolt vaadatuna paistab veebiserveri töö välja sel viisil, et brauseri ekraanile kuvatakse ilus ja värviline veebileht. Surfates brauseriga internetis, tähendab pea iga hiireklõps, et sinu brauser saadab veebiserverile päringuid, veebiserver vastab neile, ning tulemuseks on järjekordne lehekülg internetti kasutaja brauseri ekraanil.

Veebiserverite kõige tavalisemaks ülesandeks on erinevate failide serveerimine. See on veebiserverite hingeelust aru saamiseks hädavajalik teadmine. Veebiserverid ei joonista pilte, ei kuva flash videoid ega raputa su brauseriakent. Veebiserveri ülesandeks on vastata päringule "GET /index.php/Main_Page" vastava HTML .

Lisaks oskavad tänapäevased veebiserverid lisaks failide serveerimisele käivitada ka erinevates keeltes (php, java, .net) kirjutatud programme, kontrollida, kas antud kasutajale on õigus seda faili serveerida jms.

Võrdluse metoodikast

Lisaks subjektiivsele serverite kirjeldusele jooksutan läbi ka väikese koormustesti erinevate veebiserverite vastu. Testi käigus jälgin serverite koormust ja mälukasutust. Testimiseks kasutana apache poolt loodud utiliiti "ab" ehk apache benchmark. Et testida veebiserverit koormatuse tingimustes kasutan ühe veebiserveri testimiseks vähemalt kahte klienti. Platvormiks on Linuxi distributsiooni Debian viimane versioon (lenny).

Jõudlustesti keskkond:

[ klient1 ] <----- 1Gbit ethernet ------> [ server ]
[ klient2 ]

Veebiserverid

Apache httpd 2.2

Paigaldus:

lähtekoodi, dokumentatsiooni ja palju muud huvitavat leiab aadressilt http://httpd.apache.org

lahtipakkimine:

cd /usr/src/
tar zxvf /root/httpd-2.2.15.tar.gz
cd httpd-2.2.15

algne konfiguratsioon, kompileerimine, paigaldus: ise kompileerimiseks on vaja paljusid utiliite ja teeke. lisavõimaluste (php, geoip, ssl jms.) kompileerimiseks tuleb linux keskkonnas lisada -dev lõpuga pakke, näiteks libssl-dev. põhifunktsionaalsuse kompileerimiseks on vaja c komilaatorit gcc ja utiliiti make.

apt-get install gcc make
./configure
make
make install

vaikimisi installitakse veebiserver kataloogi /usr/local/apache2 konfiguratsioon asub failis /usr/local/apache2/conf/httpd.conf see konfiguratsioon serveerib apache dokumentatsiooni katalogist /usr/local/apache2/htdocs

Et kõik veebiserverid oleksid võrdses seisus, tekitan lihtsa kodulehekülje kausta /opt/www ja sellele vastava virtuaalse hosti:

<VirtualHost *:80>
        DocumentRoot /opt/www/
        <Directory /opt/www>
                Allow from all
        </Directory>
</VirtualHost>

Vaikimisi on kasutab apache prefork moodulit. See tähendab, et iga sissetuleva ühenduse kohta tekitatakse protsess. Jõudluse suurendamiseks suurendan maksimaalset kliente teenindavate protsesside arvu 200 paralleelse ühenduseni:

MaxClients 200

Apache Tomcat 6.0

Apache tomcat on java-s kirjutatud veebirakenduste server. Tema jooksutamiseks peab olema masinasse installeeritud java. Debiani all saab java interpretaatori pakist sun-java-jre6. Tomcat ei ole klassikaline veebiserver. Lisaks failide serveerimisele kasutatakse teda java rakenduste serveerimisel. Tegemist on applikatsiooniserveriga. Mõistlik on tomcati ette ühendusi puhverdama panna mõni muu veebiserver, näiteks httpd või nginx. Tark on ka lubada applikatsiooniserveri vastuste puhverdamine.

Tomcati installeerimiseks ja käivitamiseks on vaja lihtsalt tomcat lahti pakkida ja käivitada. Täsemad konfiguratsioonid asuvad .xml failidena kataloogis conf/. Mõistlik on tomcati jooksutamiseks tekitada eraldi kasutaja. mina valisin selleks kasutajaks "java". Kui seadistustes kõik muutmata jätta, kuulab tomcat pordis 8080.

Käsud, mis viivad tomcati käivitamiseni vaikekonfiguratsiooniga:

useradd -m java
su - java
tar zxvf apache-tomcat-6.0.26.tar.gz
cd apache-tomcat-6.0.26
rm -r webapps/ROOT
ln -s /opt/www webapps/ROOT
bin/startup.sh

Nginx

Nginx on väike, järjest suuremat populaarsust võitev veebiserver, mille saab alla laadida aadressilt http://www.nginx.org/ dokumentatsioon ja koodinäidised asuvad aadressil http://wiki.nginx.org

algseadistamine ja kompileerimine:

Vaikimisi tahetakse kompileerimisel regulaaravaldiste teeki ja räside arvutamiseks openssl teeki. debiani all saab need pakkidest libpcre3-dev ja libssl-dev . Lisaks on vajalik ka gcc ja make olemasolu.

käsud:

tar zxvf nginx-0.7.65.tar.gz
cd nginx-0.7.65
./configure
make
make install

Vaikimisi installeeritakse veebiserver kausta /usr/local/nginx konfiguratsioon asub failis /usr/local/nginx/conf/nginx.conf

konfiguratsioonimuudatused:

user www;
worker_processes 10;

server {
        listen 83;
        location / {
            root   /opt/www;
            index  index.html index.htm;
        }
}

veebiserveri käivitamine:

/usr/local/nginx/sbin/nginx

Lighttpd

vaikimisi kompileerumiseks vajas lighthttpd pakki libbz2-dev. käsud:

tar zxvf lighttpd-1.4.26.tgz
cd lighttpd-1.4.26
./configure
make
make install

vaikimisi installeerus lighthttpd binaar /usr/sbin/ kataloogi käivitumiseks tuli käsitsi tekitada käivitusskript ja konfifailid. Lighthttpd veebilehel olev dokumentatsioon pakkus töötavaid näiteid.

sed -e 's/FOO/lighttpd/g' doc/rc.lighttpd > /etc/init.d/lighttpd
chmod a+rx /etc/init.d/lighttpd
install -Dp ./doc/lighttpd.conf /etc/lighttpd/lighttpd.conf
# update-rc.d lighttpd defaults
mkdir /var/log/lighthttpd
chown www /var/log/lighthttpd

muudatused vaikimisi konfiguratsioonis -

server.document-root        = "/opt/www/"
server.port                = 84
server.username            = "www"

Koormustest

Testimiseks kasutan utiliiti ab (apache benchmark) mis tuleb kaasa apache httpd veebiserveriga. koormustesti tegemiseks kasutan fäikest, suurt ja keskmist faili - 1b, 500kb ja 10Mb.

testin ka erinevate koormustega - 5, 100 ja 500 paralleelset ühendust.

Testi tulemused

5 paralleelset ühendust, väike fail:

httpd:

Requests per second:    5090.12 [#/sec] (mean)
Time per request:       0.982 [ms] (mean)     
Transfer rate:          1237.76 [Kbytes/sec] received
Connection Times (ms)
              min  mean[+/-sd] median   max
Total:          0    1   0.6      1      42

load average: 0.1

tomcat

Requests per second:    4866.63 [#/sec] (mean)
Time per request:       1.027 [ms] (mean)     
Transfer rate:          1154.90 [Kbytes/sec] received  
              min  mean[+/-sd] median   max
Total:          0    1   2.8      1     269

Load average: 0.15

nginx

Requests per second:    5027.52 [#/sec] (mean)
Time per request:       0.995 [ms] (mean)     
Transfer rate:          1035.94 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          0    1   0.2      1       8

Load average: 0.15

lighttpd

Requests per second:    5894.75 [#/sec] (mean)
Time per request:       0.848 [ms] (mean)     
Transfer rate:          1347.04 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          0    1   0.2      1       4

Load average: 0.15


50 paralleelset ühendust, väike fail

httpd:

Requests per second:    17104.57 [#/sec] (mean)
Time per request:       2.923 [ms] (mean)      
Transfer rate:          4159.22 [Kbytes/sec] received 
              min  mean[+/-sd] median   max
Total:          2    3   0.6      3      21

load average: 0.5

tomcat

Requests per second:    11376.29 [#/sec] (mean)
Time per request:       4.395 [ms] (mean)      
Transfer rate:          2699.75 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          2    4   4.8      4     109

Load average: 1.38

nginx

Requests per second:    12119.90 [#/sec] (mean)
Time per request:       4.125 [ms] (mean)      
Transfer rate:          2497.71 [Kbytes/sec] received 
              min  mean[+/-sd] median   max
Total:          2    4   1.2      4     137

Load average: 0.20

lighttpd

Requests per second:    12389.67 [#/sec] (mean)
Time per request:       4.036 [ms] (mean)      
Transfer rate:          2831.23 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          1    4   1.0      4      14

Load average: 0.13

500 paralleelset ühendust, väike fail:

httpd

Requests per second:    13777.05 [#/sec] (mean)
Time per request:       36.292 [ms] (mean)     
Transfer rate:          3350.83 [Kbytes/sec] received 
              min  mean[+/-sd] median   max
Total:         10   36 180.6     22    9030

load average: 5.6

tomcat

Requests per second:    10483.95 [#/sec] (mean)
Time per request:       47.692 [ms] (mean)     
Transfer rate:          2496.95 [Kbytes/sec] received 
              min  mean[+/-sd] median   max
Total:          1   39 265.6      9    3080

Load average: 0.66

nginx

Requests per second:    9437.40 [#/sec] (mean)
Time per request:       52.981 [ms] (mean)    
Transfer rate:          1944.70 [Kbytes/sec] received 
              min  mean[+/-sd] median   max
Total:          9   41 193.9     25    3639

Load average: 0.17

lighttpd

Requests per second:    12923.12 [#/sec] (mean)
Time per request:       38.690 [ms] (mean)     
Transfer rate:          3008.65 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:         21   38   3.1     37      48

Load avg: 0.09

5 paralleelset ühendust, keskmine fail (28 kilobaiti)

httpd

Requests per second:    1638.31 [#/sec] (mean)
Time per request:       3.052 [ms] (mean)     
Transfer rate:          42644.10 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          2    3   0.7      3      40

load average: 0.8

tomcat

Requests per second:    1583.27 [#/sec] (mean)
Time per request:       3.158 [ms] (mean)     
Transfer rate:          41204.07 [Kbytes/sec] received 
              min  mean[+/-sd] median   max
Total:          2    3   3.3      3     314

Load average: 0.21

nginx

Requests per second:    1619.20 [#/sec] (mean)
Time per request:       3.088 [ms] (mean)     
Transfer rate:          42081.87 [Kbytes/sec] received 
              min  mean[+/-sd] median   max
Total:          2    3   0.4      3      17

Load avg: 0.19

lighttpd

Requests per second:    1743.40 [#/sec] (mean)
Time per request:       2.868 [ms] (mean)     
Transfer rate:          45348.79 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          2    3   0.3      3       6

Load avg: 0.10

50 paralleelset ühendust, keskmine fail

httpd

Requests per second:    1871.80 [#/sec] (mean)
Time per request:       26.712 [ms] (mean)    
Transfer rate:          48723.66 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          2   26 229.8      6    4128

Load average: 0.55


tomcat

Requests per second:    1735.21 [#/sec] (mean)
Time per request:       28.815 [ms] (mean)    
Transfer rate:          45158.72 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          2   28 245.9      6    5018

Load Average: 0.52

nginx

Requests per second:    1794.50 [#/sec] (mean)
Time per request:       27.863 [ms] (mean)    
Transfer rate:          46640.41 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          2   27 238.4      6    3214

Load avg: 0.30

lighttpd

Requests per second:    2406.26 [#/sec] (mean)
Time per request:       20.779 [ms] (mean)    
Transfer rate:          62628.00 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          2   18 182.6      6    3010
Load avg: 0.15

500 paralleelset ühendust, keskmine fail

httpd

Requests per second:    1241.74 [#/sec] (mean)
Time per request:       402.660 [ms] (mean)   
Transfer rate:          32327.12 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          2  359 1667.7      8   26764

load average: 0.2

tomcat

Requests per second:    2098.40 [#/sec] (mean)
Time per request:       238.277 [ms] (mean)   
Transfer rate:          54612.97 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          1   86 567.8      6   13859

Load average: 1.12

nginx

Requests per second:    1776.33 [#/sec] (mean)
Time per request:       281.479 [ms] (mean)   
Transfer rate:          46174.92 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          1  216 779.2      7   21007

Load avg: 0.32

lighttpd

Requests per second:    1859.79 [#/sec] (mean)
Time per request:       268.848 [ms] (mean)   
Transfer rate:          48394.98 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:          2  185 690.2      7    4916

Load avg: 0.11

50 paralleelset ühendust, suur fail (10Mb)

httpd

Requests per second:    4.59 [#/sec] (mean)
Time per request:       10896.638 [ms] (mean)
Transfer rate:          49652.71 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:        208 9541 5294.6   9858   20593

load average: 0.0

tomcat

Requests per second:    4.76 [#/sec] (mean)
Time per request:       10502.895 [ms] (mean)
Transfer rate:          53123.11 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:       3372 7963 2031.2   8257   14881

Load 0.21

nginx

Requests per second:    4.94 [#/sec] (mean)
Time per request:       10114.699 [ms] (mean)
Transfer rate:          52130.08 [Kbytes/sec] received 
              min  mean[+/-sd] median   max
Total:       4791 8610 2151.8   8533   14057

Load avg: 0.10

nginx

Requests per second:    5.10 [#/sec] (mean)
Time per request:       9804.952 [ms] (mean)
Transfer rate:          55050.30 [Kbytes/sec] received
              min  mean[+/-sd] median   max
Total:       2071 7095 3019.6   6678   16009

Load avg: 0.04

lighttpd

Requests per second:    5.11 [#/sec] (mean)
Time per request:       9778.541 [ms] (mean)
Transfer rate:          57477.14 [Kbytes/sec] received 
              min  mean[+/-sd] median   max
Total:       2802 8198 3605.2   7041   15664

Load average: 0.04