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:
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.
Tulokset erosivat selvästi toisistaan:
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)
Testi
Suoritin testin omaan wordpress sivuuni (https://jukkapentti.wordpress.com/)
Valitsin määrittelyksi ruleset – small site or blog
- 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
- http://terokarvinen.com/2012/aikataulu-linux-palvelimena-ict4tn003-7-ict4tn003-kevaalla-2013
- https://www.digitalocean.com/community/articles/how-to-install-and-configure-varnish-with-apache-on-ubuntu-12-04–3
- http://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=dom
- https://www.varnish-software.com/static/book/VCL_Basics.html#example-enforce-caching-of-jpg-urls-for-60-seconds