Tehtävänä valita 2 seuraavista
Kotitehtävä optimointi:
Tee kaksi seuraavista
a) Asenna Varnish. Muuta jotain sen asetusta VCL-kielellä (esim iso-kuvat suoraan läpi – ei välimuistiin)
b) Analysoi ja nopeuta weppisivua YSlow -lisäkkeen avulla
c) Analysoi ja nopeuta weppisivua Firebug -lisäkkeen Net-välilehden avulla
d) Etsi jokin nopeuden analysoinnissa auttava palvelu wepistä ja käytä sitä
f) Asenna nginx käänteisproxyksi
—————————–
Tämän tehtävän tekoon koneena toimi:
HP Elitebook 2560p (kannettava tietokone)
Prosessori: Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz
Muistit: 8099 MiB
Kovalevy: 500gt Hitachi (SCSI)
Xubuntu 32bit live cd 12.04.1
—————————–
Tehtävän tekoon valitsin kaksi seuraavaa:
a) Asenna Varnish. Muuta jotain sen asetusta VCL-kielellä (esim iso-kuvat suoraan läpi – ei välimuistiin)
b) Analysoi ja nopeuta weppisivua YSlow -lisäkkeen avulla
—————————–
1. Johdanto
Koska tehtävä vaatii Lampin (Linux Apache MySQL PHP) sekä hyväksi koekaniiniksi WordPressin niin lähdin asentamaan niitä Linuxin live cd:n avulla.
Ohjeet Lampin ja WordPressin asennukseen löytyy Kotitehtävästä 4, joten en lähde niitä erikseen dokumentoimaan.
https://kulmmii.wordpress.com/2013/02/11/linux-palvelimena-kurssi-ict4tn003-7-kotitehtava-4/
—————————–
2. WordPress suorituskyvyn tutkiminen ApacheBenchmarkilla ennen Varnishin asennusta
Komento sisältää 200 HTTP yhteyttä, 800 HTTP pyyntöä. (-c tarkoittaa HTTP yhteyksien määrää ja -n pyyntöjen määrää)
$ ab -c 200 -n 800 http://localhost/~xubuntu/wordpress
Concurrency Level: 200
Time taken for tests: 42.656 seconds
Complete requests: 800
Failed requests: 0
Write errors: 0
Total transferred: 7004000 bytes
HTML transferred: 6790400 bytes
Requests per second: 18.75 [#/sec] (mean)
Time per request: 10663.910 [ms] (mean)
Time per request: 53.320 [ms] (mean, across all concurrent requests)
Transfer rate: 160.35 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 9 86.1 0 1000
Processing: 217 10107 3725.3 10446 22532
Waiting: 203 9614 3563.6 9836 21851
Total: 220 10116 3730.1 10446 22538
Percentage of the requests served within a certain time (ms)
50% 10446
66% 11008
75% 11428
80% 11818
90% 12926
95% 18095
98% 20024
99% 21064
100% 22538 (longest request)
Testi osoitti, että 800 HTTP pyynnöstä kaikki onnistui. Palvelin pystyi käsittelemään 18.75 pyyntöä sekunnissa (keskimäärin).
50% pyynnöistä käsiteltiin hitaammin kun 10 sekunttia, mikä on jo hidas tulos.
——-
3. Varnish (välityspalvelin) asennus
Varnish asentuu komennolla: $ sudo apt-get install varnish
—
3.1 Varnish configurointi toimintakuntoon
Koska Varnish toimii välityspalvelimena käyttäjän ja palvelimen Apachen välillä, täytyi portteja hieman muuttaa, niin että Varnish toimii web palvelimien käyttämässä default portissa 80 ja sisältö haetaan esimerkiksi portin 8080 kautta Apachen webpalvelimelta.
Ensimmäisenä täytyy lähteä muuttamaan Varnishin configuraatio tiedostoa komennolla:
$ sudo nano /etc/default/varnish
Johon muutetaan rivi: DAEMON_OPTS=”-a :6082 \ (HUOM! Tämä siis oletuksena kohdassa Alternative 2, missä sisältö ei ole kommentoituna)
Riviin: DAEMON_OPTS=”-a :80 \ # Tämä on muutettu rivi, missä vaihdettu Varnish default portiksi kuuntelemaan porttia 80.
—
3.2 Apachen konfigurointi Varnish ystävälliseksi
Kun Varnishin portti on säädetty kuuntelemaan porttia 80, voidaan Apachea lähteä konfiguroimaan portille 8080. (huom. portti 80 on Apachen oletusportti)
Apachen portit on määritelty /etc/apache2/ports.conf tiedostossa.
$ sudo nano /etc/apache2/ports.conf
Josta löytyy heti conf tiedoston alusta rivit:
NameVirtualHost *:80
Listen 80
Näihin riveihin täytyy vaihtaa porteiksi 8080.
NameVirtualHost *:8080
Listen 8080
Ennen Varnishin käynnistämistä, täytyy tarkastaa vielä Apachen Virtual Hostin konfiguraatiot, koska ports.conf tiedostossa viitataan myös niihin.
$sudo nano /etc/apache2/sites-available/default
<VirtualHost *:80> # Oletusportti 80, joka täytyy muuttaa portiksi 8080.
<VirtualHost *:8080> # muutettu portti 8080, joka kuuntelee kaikkia VirtualHosteja.
—
3.3 Kun Varnish ja Apache on säädetty voidaan ne uudelleenkäynnistää
xubuntu@xubuntu:~$ sudo service apache2 restart
xubuntu@xubuntu:~$ sudo service varnish restart
* Stopping HTTP accelerator varnishd [ OK ]
* Starting HTTP accelerator varnishd [ OK ]
Varnish ja Apache2 on nyt uudelleen käynnistetty ja toimintakunnossa.
—
3.4 WordPress suorituskyvyn tutkiminen ApacheBenchmarkilla kun Varnish asennettuna
Komento sisältää 200 HTTP yhteyttä, 800 HTTP pyyntöä. (-c tarkoittaa HTTP yhteyksien määrää ja -n pyyntöjen määrää)
$ ab -c 200 -n 800 http://localhost/~xubuntu/wordpress
Concurrency Level: 200
Time taken for tests: 0.048 seconds
Complete requests: 800
Failed requests: 0
Write errors: 0
Non-2xx responses: 800
Total transferred: 503189 bytes
HTML transferred: 260800 bytes
Requests per second: 16778.17 [#/sec] (mean)
Time per request: 11.920 [ms] (mean)
Time per request: 0.060 [ms] (mean, across all concurrent requests)
Transfer rate: 10305.90 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 2 4 1.1 4 6
Processing: 3 7 2.0 6 13
Waiting: 1 5 1.9 5 11
Total: 6 11 2.2 10 18
Percentage of the requests served within a certain time (ms)
50% 10
66% 11
75% 12
80% 12
90% 14
95% 15
98% 16
99% 17
100% 18 (longest request)
Varnishin asennuksen jälkeen muutokset olivat merkittäviä ja tulokset tulivat huomattavasti nopeammin kuin ilman.
Testi osoitti, että 800 HTTP pyynnöstä kaikki onnistui myös Varnishin kanssa.
Requests per second 16778 pyyntöä/sivua sekunnissa (keskimäärin). Aikaisempi tulos ilman Varnishia oli 18.75 pyyntöä sekunnissa (keskimäärin).
50% pyynnöistä käsiteltiin Varnishin asennuksen jälkeen 0.01 sekunnissa mikä on todella nopea aika verrattuna aikaisempaan n. 10 sekunnin (10446ms) aikaan.
Myös tiedonsiirtonopeus kasvoi aikaisemmasta 160.35 Kb/s nopeudesta nopeuteen 10305.90 Kb/s.
—
3.5 Ilman Varnishia vai Varnishin kanssa?
Varnishin asennus kasvatti palvelun tehoja huomattavilla mittasuhteilla. Varnish on ilmainen, joten siitä ei ylimääräisiä kustannuksia aiheudu.
—
4. Varnishin configurointi isoille tiedostoille
Tein samat testit kun Mikko oli blogissaan maininnut eli latasin vastaavan isotiedoston public_html kansioon.
$ cd public_html
xubuntu@xubuntu:~/public_html$ wget http://ubuntu.trumpetti.atm.tut.fi/releases//quantal/ubuntu-12.10-server-i386.iso
Jonka jälkeen tein Curlilla testin ( curl –head )
–head Show document info only eli näyttää documentin infon.
Curl on lähes vastaava kuin Wget, mutta erona on esim se että Curlissa on parempi tuki virhetilojen raportoinnille. ( http://linux.fi/wiki/Curl )
ubuntu@xubuntu:~/public_html$ curl –head http://localhost/~xubuntu/ubuntu-12.10-server-i386.iso
HTTP/1.1 503 Service Unavailable
Server: Varnish
503 Service Unavaible kertoo jo itsessään, että hommahan ei toimi. Varnish ei pysty käsittelemään näin isoa tiedosto
—
4.1 Varnish konfigurointi isojen tiedostojen lataukselle VLC kielellä
Koska oma tietotaito on Varnishin VLC kielelle aika olematon ja halusin kuitenkin kokeilla miten kyseinen homma toimii (ja koska tehtävänannossa oli mainittu siitä), jouduin hieman katsomaan mallia http://mikkott.wordpress.com/2013/02/18/varnishin-ja-nginx-asennus-ubuntu-serveriin/
$ sudo nano /etc/varnish/default.vlc
Mihin lisätään asetukset, jolla Varnish siirtää suoraan yli 10MB tiedostot, ilman että ne siirtyy välimuistiin.
sub vcl_recv { if (req.http.x-pipe && req.restarts > 0) { remove req.http.x-pipe; return (pipe); } } sub vcl_fetch { if (beresp.http.Content-Length ~ "[0-9]{8,}" ) { set req.http.x-pipe = "1"; return (restart); } }
xubuntu@xubuntu:~/public_html$ sudo nano /etc/varnish/default.vcl
xubuntu@xubuntu:~/public_html$ sudo service varnish restart
* Stopping HTTP accelerator varnishd [ OK ]
* Starting HTTP accelerator varnishd [ OK ]
xubuntu@xubuntu:~/public_html$ curl –head http://localhost/~xubuntu/ubuntu-12.10-server-i386.iso
HTTP/1.1 200 OK – Server: Apache/2.2.22 (Ubuntu)
Tulos näyttäisi olevan OK, joten se kelpaa koska myös tiedoston lataus onnistui.
—
5. Analysoi ja nopeuta weppisivua YSlow -lisäkkeen avulla
Ennen YSlow -lisäkkeen asennusta tarvitaan Firebug niminen lisäosa Firefoxille. Asennus tapahtuu joko Firefoxin sivuilta tai ohjelmasta suoraan.
Latasin Firebugin suoraan Firefoxin sivuilta painikkeesta + Add to Firefox.
Seuraavaksi YSlow -lisäkkeen asennukseen joka tapahtui selaimen Tools ja Addons välilehdeltä.
Addons sivulta voidaan YSlow etsiä suoraan ja asentaa.
Valitaan YSlow 3.1.4 lisäosa ja install painikkeesta kyseinen lisäosa asentuu. YSlow asennuksen jälkeen ilmoitti, että selain täytyy käynnistää uudelleen:
Tämän jälkeen voidaan vielä tarkastaa extension välilehdeltä, että Yslow on asentunut.
Asennuksen jälkeen voidaan testata YSlowta WordPress sivulle. Tämä tapahtuu menemällä kyseiselle sivulle ja avaamalla YSlow Firebugilla paikasta: Tools -> Firebug -> Open Firebug.
Jonka jälkeen aukeaa ikkuna, mistä voidaan klikata “Run Test” painiketta.
YSlow tekee testin ja tuloksena tällä kertaa tuli 86 ja luokitus A. Parannettavia kohtia on testin mukaan 3 kpl, jotka ovat:
Maantieteellinen geolokalisointi (Grade F on Use a Content Delivery Network (CDN) tarkoittaa lähinnä sitä, että halutaan palvelu lähemmäksi käyttäjää.
Selaimen välimuistiin liittyvien Expires headereiden (otsakkeiden) palvelimen asetuksiin. Ohjelma sanoo näin: Expires headers are most often associated with images, but they can and should be used on all page components including scripts, style sheets, and Flash.
ETags määrittelyt (Grade F on Configure entity tags (ETags).
—–
Lähteet:
Linux palvelimena kurssi – http://terokarvinen.com/2012/aikataulu-linux-palvelimena-ict4tn003-7-ict4tn003-kevaalla-2013
Mikko TT blogi – http://mikkott.wordpress.com
Eino L. blogi – http://eliimatt.wordpress.com
Kulmmii blogi – https://kulmmii.wordpress.com (omat muistiinpanot)