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.

firebug-addon-sivuilta

Latasin Firebugin suoraan Firefoxin sivuilta painikkeesta + Add to Firefox.

Seuraavaksi YSlow -lisäkkeen asennukseen joka tapahtui selaimen Tools ja Addons välilehdeltä.

yslow

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:

yslow2

Tämän jälkeen voidaan vielä tarkastaa extension välilehdeltä, että Yslow on asentunut.

yslow3

Asennuksen jälkeen voidaan testata YSlowta WordPress sivulle. Tämä tapahtuu menemällä kyseiselle sivulle ja avaamalla YSlow Firebugilla paikasta: Tools -> Firebug -> Open Firebug.

yslowww

Jonka jälkeen aukeaa ikkuna, mistä voidaan klikata “Run Test” painiketta.

yslow4-result

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)