Veebiserverite tarkvara vordlus: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Ppaasuke (talk | contribs)
Ppaasuke (talk | contribs)
 
(13 intermediate revisions by the same user not shown)
Line 6: Line 6:
== Lühidalt veebiserveritest ==
== Lühidalt veebiserveritest ==


Veebiserverid on protsessid, mis oskavad vastata HTTP ja HTTPS päringutele.  
Veebiserverid on programmid, 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.
Tavakasutaja näeb veebiserveri töö tulemusel seda, et brauseri ekraanile kuvatakse ilus ja värviline veebileht. Surfates brauseriga internetis, tähendab pea iga hiireklõps, et brauser saadab veebiserverile päringuid, veebiserver vastab neile, ning tulemuseks on järjekordne lehekülg internetti brauseri ekraanil.
AJAX ajastul võidakse veebiserverile päringuid saata pea iga kasutaja poolt esilekutsutud sündmuse puhul - veebilehitseja aktiivseks muutmine, tekstiväljale tähemärgi sisestamine jms. Seega on veebiserveri ülesandeks vastata kasutaja päringule võimalikult kiiresti õige failiga.


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 .
Niisiis, 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 (näiteks "GET /index.php/Main_Page HTTP/1.1") vastava sisuga. See sisu ei pea ilmtingimata tulema failisüsteemis asuvast failist, vaid võib olla genereeritud ka mõne programmi poolt. Tuntumad programmeerimiskeeled mille väljundit me internetis surfates näeme on ''php'', ''asp'', ''java'', ''python'' jms.


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.
Veebiserverite populaarsuse kohta peab arvestust netcraft - [[http://news.netcraft.com/archives/web_server_survey.html]]


== Võrdluse metoodikast ==
== 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''').
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''').


<pre>
<pre>
Line 28: Line 29:
=== Apache httpd 2.2 ===
=== Apache httpd 2.2 ===


Paigaldus:
Apache httpd on kõige populaarsem veebiserver internetis. Ta on saadaval pea igale riistvarale ja operatsioonisüsteemile. Google leiab arvukalt näiteid ja tekkinud vigade korral on üsna lihtne abi saada. Veebiserveri koodi haldamise, vigade parandamise jms-ga tegeleb '''Apache software foundation''' - [http://www.apache.org]
 
'''Paigaldus''':
 
Programmi lähtekoodi, dokumentatsiooni ja palju muud huvitavat leiab apache koduleheküljelt '''httpd''' veebiserveri projekti alt - [http://httpd.apache.org]
Lihtsama vastupanu teed minnes võib leida ka valmispakitud versiooni apache2 servrist. Debiani saab näiteks käsuga '''apt-get install apache2''' installeerida distributsiooni poolt valmis pakitud apache2 serveri. Mina otsustasin kompileerida kõik veebiservrid käsitsi antud süsteemi jaoks.


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


lahtipakkimine:
lahtipakkimine:
<pre>
<pre>
cd /usr/src/
cd /usr/src/
tar zxvf /root/httpd-2.2.15.tar.gz
wget http://apache.com.saidilt.leitud.url
tar zxvf httpd-2.2.15.tar.gz
cd httpd-2.2.15
cd httpd-2.2.15
</pre>
</pre>


algne konfiguratsioon, kompileerimine, paigaldus:
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.
Apache2 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'''.
põhifunktsionaalsuse kompileerimiseks on vaja c komilaatorit '''gcc''' ja utiliiti '''make'''. Käsud vajaliku paigaldamiseks ja veebiserveri kompileerimiseks on:
 
<pre>
<pre>
apt-get install gcc make
apt-get install gcc make libssl-dev
./configure
./configure
make
make
Line 51: Line 58:
vaikimisi installitakse veebiserver kataloogi /usr/local/apache2
vaikimisi installitakse veebiserver kataloogi /usr/local/apache2
konfiguratsioon asub failis /usr/local/apache2/conf/httpd.conf
konfiguratsioon asub failis /usr/local/apache2/conf/httpd.conf
see konfiguratsioon serveerib apache dokumentatsiooni katalogist /usr/local/apache2/htdocs
see konfiguratsioon serveerib apache dokumentatsiooni katalogist /usr/local/apache2/htdocs/. Et Seda käitumist muuta tuleb teha mõned '''muudatused konfiguratsioonifailis'''-


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


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:
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 (kaasa tulnud konfiguratsioonis on see 10):


<pre>
<pre>
Line 72: Line 79:
=== Apache Tomcat 6.0 ===
=== 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'''.
Apache tomcat on '''java'''s kirjutatud veebirakenduste server. Programmeerimise, versioonihalduse ja vigadega tegeleb '''Apache software foundation''' -[http://www.apache.org]
Tomcat ei ole klassikaline veebiserver. Lisaks failide serveerimisele kasutatakse teda java rakenduste serveerimisel. Tegemist on applikatsiooniserveriga.
Dokumentatsiooni, näiteid, uudiseid jms. leiab tomcat projekti koduleheküljelt - [http://tomcat.apache.org]
 
Tomcati jooksutamiseks peab olema masinasse installeeritud '''java'''. Debiani all saab java interpretaatori pakist '''sun-java-jre6''' (apt-get install sun-java-jre6).
Tomcat ei ole klassikaline veebiserver. Lisaks failide serveerimisele kasutatakse teda java rakenduste serveerimisel. Tegemist on nö. applikatsiooniserveriga. Tomcat on vabavaraline kood, mis võimaldab jooksutada '''Java Servlet''' ja '''Java ServerPages''' tehnoloogiat.
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.
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/.
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".
Mõistlik on tomcati jooksutamiseks tekitada eraldi kasutaja. mina valisin selleks kasutajanimeks "java".
Kui seadistustes kõik muutmata jätta, kuulab tomcat pordis 8080.
Kui seadistustes kõik muutmata jätta, kuulab tomcat serveri pordis 8080.


Käsud, mis viivad tomcati käivitamiseni vaikekonfiguratsiooniga:
Käsud, mis viivad tomcati käivitamiseni vaikekonfiguratsiooniga:
Line 84: Line 94:
useradd -m java
useradd -m java
su - java
su - java
wget http://tomcat.apache.org.saidilt.saadud.url
tar zxvf apache-tomcat-6.0.26.tar.gz
tar zxvf apache-tomcat-6.0.26.tar.gz
cd apache-tomcat-6.0.26
cd apache-tomcat-6.0.26
#Vaikimisi kaasatulnud kodulehe kustutamine
rm -r webapps/ROOT
rm -r webapps/ROOT
#Turvalisuse huvides lülitan välja java appletide manageerimise programmi.
chmod 0 webapps/manager webapps/host-manager
#sümboolne link veebiserveri juurkataloogi tekitamiseks -
ln -s /opt/www webapps/ROOT
ln -s /opt/www webapps/ROOT
#Veebiserveri käivitamine
bin/startup.sh
bin/startup.sh
</pre>
</pre>
Line 93: Line 109:
=== Nginx ===
=== 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
Nginx on väike, lihtne ja maailmas järjest suuremat populaarsust võitev veebiserver, mille saab alla laadida aadressilt http://www.nginx.org/.
Dokumentatsioon ja seadistamise näidised asuvad aadressil http://wiki.nginx.org
Nginx eeliseks on tema väiksus. Lisamooduleid on nginx-le hulgim, nimekirja ja konfiguratsiooninäited leiab aadressilt - http://wiki.nginx.org/NginxModules


algseadistamine ja kompileerimine:
'''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.
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 nagu httpd kopeerimisegi puhul.


käsud:
käsud:
<pre>
<pre>
wget http://nginx.org.kodulehelt.leitud.faili.url
tar zxvf nginx-0.7.65.tar.gz
tar zxvf nginx-0.7.65.tar.gz
cd nginx-0.7.65
cd nginx-0.7.65
Line 108: Line 127:
</pre>
</pre>


Vaikimisi installeeritakse veebiserver kausta /usr/local/nginx
Nii toimides installeerisid veebiserveri kausta /usr/local/nginx .
konfiguratsioon asub failis /usr/local/nginx/conf/nginx.conf
Konfiguratsioon asub failis /usr/local/nginx/conf/nginx.conf


konfiguratsioonimuudatused:
'''konfiguratsioonimuudatused''':
 
Et veebiserverid omavahel sassi ei läheks, konfigureerin veebiserveri kuulama porti 83 ja suunan veebiserveri juurkataloogi kausta /opt/www


<pre>
<pre>
Line 126: Line 147:
</pre>
</pre>


veebiserveri käivitamine:
'''veebiserveri käivitamine''':
<pre>
<pre>
/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx
Line 177: Line 198:


<pre>
<pre>
Concurrency Level:      5
Time taken for tests:  9.823 seconds
Complete requests:      50000       
Failed requests:        0           
Write errors:          0           
Total transferred:      12450249 bytes
HTML transferred:      100002 bytes 
Requests per second:    5090.12 [#/sec] (mean)
Requests per second:    5090.12 [#/sec] (mean)
Time per request:      0.982 [ms] (mean)     
Time per request:      0.982 [ms] (mean)     
Time per request:      0.196 [ms] (mean, across all concurrent requests)
Transfer rate:          1237.76 [Kbytes/sec] received
Transfer rate:          1237.76 [Kbytes/sec] received
Connection Times (ms)
Connection Times (ms)
               min  mean[+/-sd] median  max
               min  mean[+/-sd] median  max
Line 195: Line 207:
load average: 0.1
load average: 0.1
</pre>
</pre>
'''tomcat'''
<pre>
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
</pre>
'''nginx'''
<pre>
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
</pre>
'''lighttpd'''
<pre>
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
</pre>


50 paralleelset ühendust, väike fail
50 paralleelset ühendust, väike fail
Line 200: Line 249:
'''httpd''':
'''httpd''':
<pre>
<pre>
Concurrency Level:      50
Time taken for tests:  2.923 seconds
Complete requests:      50000       
Failed requests:        0           
Write errors:          0           
Total transferred:      12450000 bytes
HTML transferred:      100000 bytes 
Requests per second:    17104.57 [#/sec] (mean)
Requests per second:    17104.57 [#/sec] (mean)
Time per request:      2.923 [ms] (mean)       
Time per request:      2.923 [ms] (mean)       
Time per request:      0.058 [ms] (mean, across all concurrent requests)
Transfer rate:          4159.22 [Kbytes/sec] received  
Transfer rate:          4159.22 [Kbytes/sec] received  
 
              min  mean[+/-sd] median  max
Total:          2    3  0.6      3      21
Total:          2    3  0.6      3      21


load average: 0.5
load average: 0.5
</pre>
'''tomcat'''
<pre>
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
</pre>
'''nginx'''
<pre>
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
</pre>
'''lighttpd'''
<pre>
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
</pre>
</pre>


Line 221: Line 295:
'''httpd'''
'''httpd'''
<pre>
<pre>
Concurrency Level:      500
Time taken for tests:  36.292 seconds
Complete requests:      500000       
Failed requests:        0           
Write errors:          0           
Total transferred:      124527888 bytes
HTML transferred:      1000224 bytes 
Requests per second:    13777.05 [#/sec] (mean)
Requests per second:    13777.05 [#/sec] (mean)
Time per request:      36.292 [ms] (mean)     
Time per request:      36.292 [ms] (mean)     
Time per request:      0.073 [ms] (mean, across all concurrent requests)
Transfer rate:          3350.83 [Kbytes/sec] received  
Transfer rate:          3350.83 [Kbytes/sec] received  
 
              min  mean[+/-sd] median  max
Total:        10  36 180.6    22    9030
Total:        10  36 180.6    22    9030


load average: 5.6
load average: 5.6
</pre>
'''tomcat'''
<pre>
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
</pre>
'''nginx'''
<pre>
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
</pre>
'''lighttpd'''
<pre>
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
</pre>
</pre>


Line 242: Line 342:
'''httpd'''
'''httpd'''
<pre>
<pre>
Concurrency Level:      5
Time taken for tests:  30.519 seconds
Complete requests:      50000       
Failed requests:        0           
Write errors:          0           
Total transferred:      1332700000 bytes
HTML transferred:      1320000000 bytes
Requests per second:    1638.31 [#/sec] (mean)
Requests per second:    1638.31 [#/sec] (mean)
Time per request:      3.052 [ms] (mean)     
Time per request:      3.052 [ms] (mean)     
Time per request:      0.610 [ms] (mean, across all concurrent requests)
Transfer rate:          42644.10 [Kbytes/sec] received
Transfer rate:          42644.10 [Kbytes/sec] received
 
              min  mean[+/-sd] median  max
Total:          2    3  0.7      3      40
Total:          2    3  0.7      3      40


load average: 0.8
load average: 0.8
</pre>
'''tomcat'''
<pre>
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
</pre>
'''nginx'''
<pre>
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
</pre>
'''lighttpd'''
<pre>
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
</pre>
</pre>


Line 263: Line 389:
'''httpd'''
'''httpd'''
<pre>
<pre>
Concurrency Level:      50
Time taken for tests:  26.712 seconds
Complete requests:      50000       
Failed requests:        0           
Write errors:          0           
Total transferred:      1332755024 bytes
HTML transferred:      1320054262 bytes
Requests per second:    1871.80 [#/sec] (mean)
Requests per second:    1871.80 [#/sec] (mean)
Time per request:      26.712 [ms] (mean)     
Time per request:      26.712 [ms] (mean)     
Time per request:      0.534 [ms] (mean, across all concurrent requests)
Transfer rate:          48723.66 [Kbytes/sec] received
Transfer rate:          48723.66 [Kbytes/sec] received
 
              min  mean[+/-sd] median  max
Total:          2  26 229.8      6    4128
Total:          2  26 229.8      6    4128


Load average: 0.55
Load average: 0.55
</pre>
'''tomcat'''
<pre>
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
</pre>
'''nginx'''
<pre>
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
</pre>
'''lighttpd'''
<pre>
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
</pre>
</pre>


Line 285: Line 436:


<pre>
<pre>
Concurrency Level:      500
Time taken for tests:  40.266 seconds
Complete requests:      50000       
Failed requests:        0           
Write errors:          0           
Total transferred:      1332924762 bytes
HTML transferred:      1320222476 bytes
Requests per second:    1241.74 [#/sec] (mean)
Requests per second:    1241.74 [#/sec] (mean)
Time per request:      402.660 [ms] (mean)   
Time per request:      402.660 [ms] (mean)   
Time per request:      0.805 [ms] (mean, across all concurrent requests)
Transfer rate:          32327.12 [Kbytes/sec] received
Transfer rate:          32327.12 [Kbytes/sec] received
              min  mean[+/-sd] median  max
Total:          2  359 1667.7      8  26764
Total:          2  359 1667.7      8  26764


load average: 0.2
load average: 0.2
</pre>
'''tomcat'''
<pre>
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
</pre>
'''nginx'''
<pre>
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
</pre>
'''lighttpd'''
<pre>
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
</pre>
</pre>


Line 305: Line 482:
'''httpd'''
'''httpd'''
<pre>
<pre>
Concurrency Level:      50
Time taken for tests:  21.793 seconds
Complete requests:      100         
Failed requests:        0           
Write errors:          0           
Total transferred:      1108065520 bytes
HTML transferred:      1108035654 bytes
Requests per second:    4.59 [#/sec] (mean)
Requests per second:    4.59 [#/sec] (mean)
Time per request:      10896.638 [ms] (mean)
Time per request:      10896.638 [ms] (mean)
Time per request:      217.933 [ms] (mean, across all concurrent requests)
Transfer rate:          49652.71 [Kbytes/sec] received
Transfer rate:          49652.71 [Kbytes/sec] received
 
              min  mean[+/-sd] median  max
Total:        208 9541 5294.6  9858  20593
Total:        208 9541 5294.6  9858  20593


load average: 0.0
load average: 0.0
</pre>
</pre>
'''tomcat'''
<pre>
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
</pre>
'''nginx'''
<pre>
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
</pre>
'''lighttpd'''
<pre>
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
</pre>
=== Kokkuvõte ===

Latest revision as of 09:51, 10 May 2010


Veebiserverite tarkvara võrdlus

Autor: Priit Pääsukene

Lühidalt veebiserveritest

Veebiserverid on programmid, mis oskavad vastata HTTP ja HTTPS päringutele. Tavakasutaja näeb veebiserveri töö tulemusel seda, et brauseri ekraanile kuvatakse ilus ja värviline veebileht. Surfates brauseriga internetis, tähendab pea iga hiireklõps, et brauser saadab veebiserverile päringuid, veebiserver vastab neile, ning tulemuseks on järjekordne lehekülg internetti brauseri ekraanil. AJAX ajastul võidakse veebiserverile päringuid saata pea iga kasutaja poolt esilekutsutud sündmuse puhul - veebilehitseja aktiivseks muutmine, tekstiväljale tähemärgi sisestamine jms. Seega on veebiserveri ülesandeks vastata kasutaja päringule võimalikult kiiresti õige failiga.

Niisiis, 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 (näiteks "GET /index.php/Main_Page HTTP/1.1") vastava sisuga. See sisu ei pea ilmtingimata tulema failisüsteemis asuvast failist, vaid võib olla genereeritud ka mõne programmi poolt. Tuntumad programmeerimiskeeled mille väljundit me internetis surfates näeme on php, asp, java, python jms.

Veebiserverite populaarsuse kohta peab arvestust netcraft - [[1]]

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

Apache httpd on kõige populaarsem veebiserver internetis. Ta on saadaval pea igale riistvarale ja operatsioonisüsteemile. Google leiab arvukalt näiteid ja tekkinud vigade korral on üsna lihtne abi saada. Veebiserveri koodi haldamise, vigade parandamise jms-ga tegeleb Apache software foundation - [2]

Paigaldus:

Programmi lähtekoodi, dokumentatsiooni ja palju muud huvitavat leiab apache koduleheküljelt httpd veebiserveri projekti alt - [3] Lihtsama vastupanu teed minnes võib leida ka valmispakitud versiooni apache2 servrist. Debiani saab näiteks käsuga apt-get install apache2 installeerida distributsiooni poolt valmis pakitud apache2 serveri. Mina otsustasin kompileerida kõik veebiservrid käsitsi antud süsteemi jaoks.


lahtipakkimine:

cd /usr/src/
wget http://apache.com.saidilt.leitud.url
tar zxvf httpd-2.2.15.tar.gz
cd httpd-2.2.15

algne konfiguratsioon, kompileerimine, paigaldus: Apache2 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. Käsud vajaliku paigaldamiseks ja veebiserveri kompileerimiseks on:

apt-get install gcc make libssl-dev
./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 Seda käitumist muuta tuleb teha mõned muudatused konfiguratsioonifailis-

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 (kaasa tulnud konfiguratsioonis on see 10):

MaxClients 200

Apache Tomcat 6.0

Apache tomcat on javas kirjutatud veebirakenduste server. Programmeerimise, versioonihalduse ja vigadega tegeleb Apache software foundation -[4] Dokumentatsiooni, näiteid, uudiseid jms. leiab tomcat projekti koduleheküljelt - [5]

Tomcati jooksutamiseks peab olema masinasse installeeritud java. Debiani all saab java interpretaatori pakist sun-java-jre6 (apt-get install sun-java-jre6). Tomcat ei ole klassikaline veebiserver. Lisaks failide serveerimisele kasutatakse teda java rakenduste serveerimisel. Tegemist on nö. applikatsiooniserveriga. Tomcat on vabavaraline kood, mis võimaldab jooksutada Java Servlet ja Java ServerPages tehnoloogiat. 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 kasutajanimeks "java". Kui seadistustes kõik muutmata jätta, kuulab tomcat serveri pordis 8080.

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

useradd -m java
su - java
wget http://tomcat.apache.org.saidilt.saadud.url
tar zxvf apache-tomcat-6.0.26.tar.gz
cd apache-tomcat-6.0.26
#Vaikimisi kaasatulnud kodulehe kustutamine
rm -r webapps/ROOT
#Turvalisuse huvides lülitan välja java appletide manageerimise programmi.
chmod 0 webapps/manager webapps/host-manager
#sümboolne link veebiserveri juurkataloogi tekitamiseks -
ln -s /opt/www webapps/ROOT
#Veebiserveri käivitamine
bin/startup.sh

Nginx

Nginx on väike, lihtne ja maailmas järjest suuremat populaarsust võitev veebiserver, mille saab alla laadida aadressilt http://www.nginx.org/. Dokumentatsioon ja seadistamise näidised asuvad aadressil http://wiki.nginx.org Nginx eeliseks on tema väiksus. Lisamooduleid on nginx-le hulgim, nimekirja ja konfiguratsiooninäited leiab aadressilt - http://wiki.nginx.org/NginxModules

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 nagu httpd kopeerimisegi puhul.

käsud:

wget http://nginx.org.kodulehelt.leitud.faili.url
tar zxvf nginx-0.7.65.tar.gz
cd nginx-0.7.65
./configure
make
make install

Nii toimides installeerisid veebiserveri kausta /usr/local/nginx . Konfiguratsioon asub failis /usr/local/nginx/conf/nginx.conf

konfiguratsioonimuudatused:

Et veebiserverid omavahel sassi ei läheks, konfigureerin veebiserveri kuulama porti 83 ja suunan veebiserveri juurkataloogi kausta /opt/www

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:    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

Kokkuvõte