Tagged: varnish

Apache ja verkkosivujen optimointi

Viikon kotitehtäviksi valitsin

  • Asenna Varnish. Muuta jotain sen asetusta VCL-kielellä (esim iso-kuvat suoraan läpi – ei välimuistiin)
  • Analysoi ja nopeuta weppisivua YSlow -lisäkkeen avulla

Tehtävässä käytin koulun kannettavaa tietokonetta:

malli                         HP EliteBook-2560p
suoritin                     Intel i5-2450M  2.50 GHz
muisti                       7.71 GiB
kovalevy                  465.8 GiB
käyttöjärjestelmä     Ubuntu 12.10

Varnish

Varnish on kääntesproxy, joka nopeuttaa nettisivujen toimintaa lataamalla niitä muistiin, josta ne voidaan ladata nopeasti asiakaskoneelle. Varnish toimii asiakaskoneen ja palvelimen välissä helpottaen palvelimen taakkaa.
Tarkoituksena on asentaa Varnish LAMP-pinon päälle ja nopeuttaa, koneelle asennetun, wordpressin toimintaa.
Koneelle on siis jo asennettuna LAMP (Linux, Apache, MySql, PHP) sekä wordpress.
https://jukkapentti.wordpress.com/2013/02/11/wordpress-julkaisualusta/

Asennus

Aloitin päivittämällä paketit
sudo apt-get update
asensin Varnsihin komennolla
sudo apt-get install varnish

Asennuksen jälkeen on vielä paljon tehtävää, Apachen ja Varnishin välinen yhteys pitää konfiguroida.

Konfigurointi

Tarkoituksena on asettaa Varnish kuuntelemaan porttia 80, Varnish välittää tarvittaessa pyynnöt Apachelle porttiin 8080.

Ensin muutetaan asetusta tiedostossa /etc/default/varnish
sudoedit /etc/default/varnish

Muutin alternative 2 asetusta:

DAEMON_OPTS=”-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m”

Asetin Varnishin kuuntelemaan porttia 80.

Seuraavaksi tarkistin asetuksen tiedostosta /etc/varnish/default.vcl

backend default {
.host = “127.0.0.1”;
.port = “8080“;

Varnish välittää pyynnöt palvellimelle porttiin 8080.

Apache piti vielä asettaa kuuntelemaan porttia 8080, jonne myös localhost viittaa.
Asetus löytyi tiedostosta /etc/apache2/ports.conf
sudoedit ports.conf

NameVirtualHost 127.0.0.1:8080
Listen 127.0.0.1:8080

Virtuaalipalvelin piti vielä asettaa oikeaan osoitteeseen tiedostossa /etc/apache2/sites-available/default
sudoedit default

<VirtualHost 127.0.0.1:8080>

Apache sekä Varnish piti vielä käynnistää uudelleen, jotta uudet asetukset tulevat voimaan.
sudo service apache2 restart
sudo service varnish restart

Tarkistin vielä että porttien määritys onnistui ottamalla yhteyttä localhostiin portissa 8080:
localhost:8080

Suorituskyky

/etc/apache2/sites-available$ ab -n 90 -c 30 http://localhost/~jukka/wordpress/
Suoritin 90 pyyntöä, enintään 30 pyyntöä kerrallaan.

Kokeilin Apache Benchmark-ohjelmalla rasittaa paikallista wordpress-sivuani http://localhost/~jukka/wordpress/.
Apachen testiä suorittaessa vaihdoin portin takaisin (80).

Koitin ensin taustakuvallisen wordpress sivun kanssa testiä, apachen kautta suoritettu testi ei pystynyt suorittamaan 2/3 pyynnöistä pyyntöjen määrän ollessa 50:

Complete requests: 30
Failed requests: 20

Joten otin taustakuvan pois ja pyynnöt saatiin suoritettua myös apachen kautta.
testisivu
Tulokset erosivat selvästi toisistaan:
vertailu

Oikeanpuoleinen on Varnishin kautta suoritettu testi:

Time taken for tests: 0.148 seconds – pyyntöihin käytetty aika
Complete requests: 90 – kaikki pyynnöt onnistuivat
Time per request: 49.440 [ms] (mean) – keskiarvo pyyntöön käytetty aika
100% 145 (longest request) – pisin vastausaika

Vasemmanpuoleinen on Apachen kautta suoritettu testi:

Time taken for tests: 3.917 seconds – pyyntöihin käytetty aika
Complete requests: 90 – kaikki pyynnöt onnistuivat
Time per request: 1305.762 [ms] (mean) – keskiarvo pyyntöön käytetty aika
100% 1663 (longest request) – pisin vastausaika

Testin perusteella staattinen nettisivu latautui Varnishin kautta noin 26 kertaa nopeammin.

ISO tiedostojen ohitus

Varnishin asetukset ovat tiedostossa /etc/varnish/default.vcl
Aloitin tiedoston muokkaamisen komennolla
sudoedit default.vcl
Tiedostoon lisäsin:

if (req.url ~“\.iso$”) {
set req.backend = web;
pass;
}

Jos pyynnössä on .iso -merkkijono, se välitetään suoraan palvelimelle.
(ei testattu)

YSlow

YSlow on selaimeen asennettava lisäosa, jolla voi analysoida nettisivuja.
Ohjelma analysoi sivun jokaisen eri komponentin ja muodostaa niistä kokonaisarvosanan sekä antaa parannusehdotuksia sivun nopeuttamiseksi.

Asennus

Asensin YSlow lisäosan Chromium-selaimeen (https://chrome.google.com/webstore/detail/yslow/ninejjcohidippngpapiilnmkgllmakh)
YSlow-asennus

Testi

Suoritin testin omaan wordpress sivuuni (https://jukkapentti.wordpress.com/)
Valitsin määrittelyksi ruleset – small site or blog

analyysi

  • Testi antoi sivulle arvosanaksi A:n, kuten voi olettaa wordpress sivut ovat pitkälle kehitetyt.
  • Huonoimman arvosanan (E) sivu sai HTTP pyyntöjen määrästä:

Javascriptejä sivulla suoritetaan 10, YSlow ehdottaa niiden yhdistämistä.
Samaa toimenpidettä ohjelma ehdottaa ulkoisille tyylisivuille, joita on kuusi.

  • Toiseksi huonoimman arvosanan (D) sivu saa DNS selvitysten määrästä:

Sivun komponentit ovat jaettuna eri osoitteisiin, joiden selvittämiseen selaimelta menee aikaa.

The components are split over more than 4 domains

  • fonts.googleapis.com: 1 component, 2.2K (0.5K GZip)
  • i.kissmetrics.com: 1 component, 0.03K
  • s0.wp.com: 2 components, 1.7K (0.8K GZip)
  • s.stats.wordpress.com: 1 component, 2.5K (0.9K GZip)
  • s2.wp.com: 9 components, 408.4K (111.6K GZip)
  • s1.wp.com: 4 components, 144.0K (31.4K GZip)
  • edge.quantserve.com: 1 component, 5.8K (2.3K GZip)
  • jukkapentti.files.wordpress.com: 31 components, 141.3K
  • stats.wordpress.com: 2 components, 0.1K
  • doug1izaerwt3.cloudfront.net: 1 component, 22.2K
  • 0.gravatar.com: 5 components, 37.4K (9.7K GZip)
  • jukkapentti.wordpress.com: 2 components, 112.5K (112.2K GZip)
  • YSlow antaa arvosanan C, DOM elementtien määrän perusteella:

There are 1400 DOM elements on the page

Document Object Model mahdollistaa javascritin hyödyntämisen monipuolisesti sivustolla. Sivun elementtien suhteet ovat kuvattuina solmuina puurakenteessa, jonka DOM muodostaa. DOM mahdollistaa sivuston muokkaamisen javascriptillä.
YSlow ehdottaa siis sivuston tekemistä yksinkertaisemmaksi, jotta sen käyttö nopeutuisi.

Tehtävien tekemiseen meni noin 5 tuntia.

Lähteet

Advertisements