Linux Palvelimena kurssin kotitehtävä h7: Optimointia Varnishilla yms.

Tero Karvisen kurssin kotisivu

Tämän kertainen tehtävänanto:

– Mittaa omalla koneellasi olevan WordPress-sivun ja samanlaisen staattisen sivun nopeuseroa ‘ab’ työkalulla.
– Asenna Varnish. Mittaa jonkin dynaamisen weppisivun (wordpress tms) suorituskyky ennen ja jälkeen asennuksen. Kuinka suuren hyödyn saat?

Jatketaan tehtäviä viime kerralla asentamallani WordPressilla Ubuntu 15.04:llä. Jälleen kerran, koneena itse rakennettu kone, i7 2600K, 32GB RAM, Nvidia GTX970.

Kopioin pitkän tekstin WordPress sivulle, käytin omaa aikoinaan kirjoitettua elokuvakäsikirjoitusta, jossa on 158 sivua.

Screenshot from 2015-10-08 16:37:47

Tein sivusta myös staattisen kopion: loin public_html kansion alle static kansion

$mkdir static

ja menin siihen ja ajoin seuraavan:

$wget http://localhost/~squirrel/

nyt sain tähän saman sisällön index.html tiedstoon, joka löytyy http://localhost/~squirrel/static osoitteesta:

Screenshot from 2015-10-08 16:41:26

Nyt voidaankin sitten ajaa ab testejä. Minulla oli jo ab työkalu, sillä olin Apachea asentaessani jo lisännyt apache2-utils paketin, jossa se on mukana. Mutta jos en olisi, lisäisin sen näin

$sudo apt-get install apache2-utils

Ajan sen ensin itse wordpress sivulle:

$ab -c 100 -n 100 http://localhost/~squirrel/

-c 100 ajaa sen 100 kertaa yhtäaikaa, ja -n 100 ajaa sen 100 kertaa peräkkäin.

tässä rivit joissa mielenkiintoista tietoa:

Document Path: /~squirrel/
Document Length: 826096 bytes

Concurrency Level:      100
Time taken for tests:   1.540 seconds
Requests per second:    64.93 [#/sec] (mean)
Time per request:       1540.140 [ms] (mean)
Time per request:       15.401 [ms] (mean, across all concurrent requests)
Transfer rate:          52394.60 [Kbytes/sec] received

Percentage of the requests served within a certain time (ms)
  50%    905
  66%   1124
  75%   1252
  80%   1327
  90%   1478
  95%   1518
  98%   1533
  99%   1536
 100%   1536 (longest request)

Tästä voimme nähdä, dokumentin koko oli 82 kilotavua, koko testi kesti 1.54 sekuntia,  sekunnissa ajettiin 64,93 pyyntöä, tiedonsiirtonopeus oli noin 52 megatavua sekunnissa. Lopuksi näemme että pisin pyyntö kesti 1536 millisekuntia, ja 50% hoitui nopedella 905 millisekuntia tai alle.

Ajetaan nyt sama staattiselle sivulle:

$ab -c 100 -n 100 http://localhost/~squirrel/static/

Document Path: /~squirrel/static/
Document Length: 826096 bytes

Concurrency Level: 100
Time taken for tests: 0.046 seconds
Requests per second: 2165.06 [#/sec] (mean)
Time per request: 46.188 [ms] (mean)
Time per request: 0.462 [ms] (mean, across all concurrent requests)
Transfer rate: 1747215.52 [Kbytes/sec] received

Percentage of the requests served within a certain time (ms)
50% 28
66% 32
75% 36
80% 39
90% 42
95% 42
98% 43
99% 43
100% 43 (longest request)

Kuten näemme, ero oli aikamoinen. Testi kesti tässä 0.046 sekuntia. Sekunnissa ajettiin 2165 pyyntöä. tiedonsiirtonopeus oli noin 1,74 gigatavua sekunnissa. Pisin pyyntö kesti 43 millisekuntia, ja 50% hoitui nopeudella 28 millisekuntia tai alle. Eli jo tässä näemme, että staattinen sivu oli vähintään 35 kertaa nopeampi.

Pidempi testi 500 ajoa, dynaaminen:

Concurrency Level:      500
Time taken for tests:   7.614 seconds
Complete requests:      500
Failed requests:        0
Total transferred:      413158500 bytes
HTML transferred:       413048000 bytes
Requests per second:    65.67 [#/sec] (mean)
Time per request:       7614.234 [ms] (mean)
Time per request:       15.228 [ms] (mean, across all concurrent requests)
Transfer rate:          52989.58 [Kbytes/sec] received

Percentage of the requests served within a certain time (ms)
  50%   2856
  66%   5736
  75%   6412
  80%   6699
  90%   7487
  95%   7579
  98%   7594
  99%   7596
 100%   7605 (longest request)

ja staattinen:

Concurrency Level:      500
Time taken for tests:   0.238 seconds
Complete requests:      500
Failed requests:        0
Total transferred:      413186000 bytes
HTML transferred:       413048000 bytes
Requests per second:    2097.24 [#/sec] (mean)
Time per request:       238.409 [ms] (mean)
Time per request:       0.477 [ms] (mean, across all concurrent requests)
Transfer rate:          1692477.86 [Kbytes/sec] received

Percentage of the requests served within a certain time (ms)
  50%     64
  66%     84
  75%     88
  80%     89
  90%     90
  95%    114
  98%    229
  99%    229
 100%    229 (longest request)

Kuten tässä edelleen näkyy, nopeusero on edelleen pitkälti yli 30 kertainen.

VARNISH ASENNUS

Asennetaan seuraavaksi Varnish käänteisproxy ohjelma:

sudo apt-get install varnish

Kun Varnish on asennettu, /etc/default kansiosta löytyy varnish tiedosto, jossa on sen asetukset. Oletusasetuksilla Varnish kuuntelee portissa 6081, ja hallinta portissa 6082, sekä välittää liikenteen localhostilel portissa 8080. Haluamme muuttaa tämän, niin että Varnish kuuntelee portissa 80, ja laitetaan apache kuuntelemaan porttia 8080.

Tiedostossa on kohta DAEMON_OPTS=”-a :6081

Muutetaan siihen DAEMON_OPTS=”-a :80

Laitetaan seuraavaksi Apache kuuntelemaan porttia 8080

Avataan /etc/apache2/ports.conf

siellä on kohta Listen 80. Muuten siihen Listen 8080 ja tallenetaan se. Siinä automaattisesti kehoitetaan myös vaihtamaan sama tieto sites-enabled /000-default.conf tiedostossa. Joten avataan sekin.

siellä on kohta <VirtualHost *:80>
Joten muutetaan sihen <VirtualHost *:8080>

Käynnistin uudestaan apache2 ja varnish

$sudo service apache2 restart

$sudo service varnish restart

Tässä kohdassa kaiken olisi pitänyt toimia, muiden ohjeiden mukaan. Mutta minulla ei toiminut. Käynnistelin prosesseja uudestaan monta kertaa, ja käynnistin koko koneenkin uudestaan testinä. Varnish ei kuunnellut portilla 80 edelleenkään. Ihme kyllä, se kuunteli edelleen 6081 portissa, joka oli oletuksena. Pähkäilin tämän kanssa pari tuntia, ja löysin lopuksi tämän ohjeen

http://deshack.net/how-to-varnish-listen-port-80-systemd/

Kuten siinä neuvottiin, tarkistin mitkä varnish prosessit olivat nyt käynnissä komennolla:

$ ps aux | grep varnish

Totta tokiaan, siellä kummitteli edelleen tämä:

root      1436  0.0  0.2 124960 90204 ?        SLs  19:50   0:00 /usr/sbin/varnishd -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

Eli Varnish kuunteli edelleen portilla 6081, vaikka kaikissa conf tiedostoissa se oli muutettu.

Ilmeisesti, se johtuu Debian versioista, ja Varnishin oma ohje on vanhentunut. Nykyinen versio käyttää systemd:tä init.d:n sijaan, josta syystä /etc/default/varnish toimii vain kun se latautuu /etc/init.d/varnish kautta, eikä kun se latautuu systemd init scriptin kautta /lib/systemd/system/varnish.service.

Kopioidaan tämä tiedosto

$ cp /lib/systemd/system/varnish.service /etc/systemd/system/

ja avataan täältä

$ nano /etc/systemd/system/varnish.service

Sieltä löytyy tällainen rivi

ExecStart=/usr/sbin/varnishd -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

Joten vaihdetaan siitäkin se kohta -a :80 ja tallennetaan se.

Käynnistetään sitten Varnish uudestaan näillä eri komennoilla

$ sudo systemctl daemon-reload

$ sudo systemctl restart varnish.service

Tämän jälkeen testaan taas:

$ ps aux | grep varnish

Ja kyllä! nyt siinä lukee näin

root      1436  0.0  0.2 124960 90204 ?        SLs  19:50   0:00 /usr/sbin/varnishd -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

Eli nyt kuuntelee portissa 80 niinkuin piti. Firefoxilla vihdoinkin aukeaa sivu localhost osoitteesta.

Kokeilen vielä

$sudo service varnish stop

Ja sivu ei lataudu

$sudo service varnish start

ja sivu taas toimii. Eli kyllä Varnish nyt toimii. En tiedä sitten, mahtaako ongelmana olla käyttämäni Ubuntu 15.04, sillä en muista, että tunnilla olisi tällaisesta puhuttu, enkä nähnyt vastaavaa muilla Karvisen kurssien opiskelijoiden tehtävistä. Mutta hyvin mielenkiintoista. Ilmeisesti, sillä tuossa mainitaan “Debian Jessie” joka on myös Debian distro tältä vuodelta, kuten on tämä Ubuntu Vivid Vervet (15.04)…

Joo kyllä:

https://en.wikipedia.org/wiki/Systemd

tämä on oletuksena alkaen 15.04 versiossa! Eli syy selvisi miksi vanhemmat ohjeet eivät tähän tepsineetkään enää vaan vaati aika paljon lisätyötä.

Nyt voimme jatkaa ab testejä. Tässä on sama -c 500 -n 500 testi, nyt ajettuna Varnish sivulle portissa 80, eli osoitteena pelkkä http://localhost/

Concurrency Level:      500
Time taken for tests:   1.891 seconds
Complete requests:      500
Failed requests:        0
Total transferred:      413197084 bytes
HTML transferred:       413048000 bytes
Requests per second:    264.36 [#/sec] (mean)
Time per request:       1891.352 [ms] (mean)
Time per request:       3.783 [ms] (mean, across all concurrent requests)
Transfer rate:          213346.21 [Kbytes/sec] received

Percentage of the requests served within a certain time (ms)
  50%   1783
  66%   1820
  75%   1838
  80%   1844
  90%   1862
  95%   1869
  98%   1875
  99%   1882
 100%   1887 (longest request)

Näemme, että tulos on edelleen huomattavasti nopeampi kuin normaalilla dynaamisella sivulla, mutta ei yhtä nopea kuin staattinen. Vertailun voksi lopuksi yhteenverona tiedonsiirtonopes kaikilla:

Staattinen: 1,74 GB/s

Varnish: 213 MB/s

Dynaaminen : 52 MB/s

Kokeiluna käytin myös toista tekemääni sivua, josta olin tehnyt paikallisen version tähän koneelle (www.catself.com) olin konffannut sen virtualhostiksi osoitteessa http://catself.local. Vertailen vähän latausaikoja tällä sivulla Varnishilla ja ilman.

Varnishin kautta:

Server Hostname:        catself.local
Server Port:            80

Document Path:          /news.php/
Document Length:        11684 bytes

Concurrency Level:      1000
Time taken for tests:   0.106 seconds
Complete requests:      1000
Failed requests:        0
Total transferred:      11932316 bytes
HTML transferred:       11684000 bytes
Requests per second:    9461.28 [#/sec] (mean)
Time per request:       105.694 [ms] (mean)
Time per request:       0.106 [ms] (mean, across all concurrent requests)
Transfer rate:          110248.95 [Kbytes/sec] received

Percentage of the requests served within a certain time (ms)
  50%     57
  66%     61
  75%     67
  80%     71
  90%     80
  95%     83
  98%     87
  99%     91
 100%     95 (longest request)

Varnishin ohi:

Server Hostname:        catself.local
Server Port:            8080

Document Path:          /news.php/
Document Length:        11758 bytes

Concurrency Level:      1000
Time taken for tests:   0.431 seconds
Complete requests:      1000
Failed requests:        885
   (Connect: 0, Receive: 0, Length: 885, Exceptions: 0)
Total transferred:      11985165 bytes
HTML transferred:       11815165 bytes
Requests per second:    2318.61 [#/sec] (mean)
Time per request:       431.292 [ms] (mean)
Time per request:       0.431 [ms] (mean, across all concurrent requests)
Transfer rate:          27137.68 [Kbytes/sec] received

Percentage of the requests served within a certain time (ms)
  50%     33
  66%     38
  75%     40
  80%     48
  90%    233
  95%    239
  98%    243
  99%    422
 100%    423 (longest request)

Tässä näkyykin taas Varnishin tuoma etu. Ero ei ollut päätähuimaava, mutta kuitenkin noin 4-kertainen nopeusetu tavaliseen verrattuna.

WEBBISIVUN ANALYSOINTI FIREBUG LISUKKEELLA

Asennetaan Firebug, se löytyy ihan Firefoxin Add-Ons ikkunasta nimellä.

Screenshot from 2015-10-09 11:53:47

Tästä nyt näemme esim, sivun lataus kesti 213 ms:

Screenshot from 2015-10-09 12:08:00

Staattinen sivu latautui 25 ms:

Screenshot from 2015-10-09 12:10:07

Testasin myös catself.local sivua. Tyhjensin firefoxin cachen ennen lataamista, ja ruksasin myös Firebugissa “disable browser cache”. Ensin Varnishilla:

Screenshot from 2015-10-09 17:31:20

Ja sitten ilman varnishia, suoraan 8080 portitin:

Screenshot from 2015-10-09 17:32:43

Tämän mukaan sivu ilman Varnishia nopeampi. Firebugin testi ei kyllä ole kovin hääppöinen.

Asennan seuraavaksi YSLOW lisäkkeen joka oli tehtävänannossa myöskin. Heti alkuun pitää mainita, että se ei enää toimi normaalisti uudessa Firefoxissa (v 39 jälkeen, se ei reagoi mitenkään nappien paineluun,  mutta siihen löytyi ratkaisu menemällä Yslow astuksiin, ja ruksaamalla “Automatically load Ylow when page finishes loading”

Nyt voin tutkia Yslow tuloksia

WordPress sivulle se antaa Grade B

Screenshot from 2015-10-09 18:02:06

F tuloksen se antoi kohdasta jossa se suorittelee käyttämään jotain Content Delivery Networkia. Tuloksista on mahdotonta lukea lisätietoa nyt, koska kuten sanottu, nappien painaminen ei johda mihinkään. Jotan pientä, kuten javascriptin laittaminen sivun loppuosaan se haluaisi. Ja “cookie free domain” yms mihin ei suorran voi vaikuttaa.

ISO TIEDOSTOJEN OHITUS

Koitin  etsiä tietoa tästä, mutta en kauheasti löytänyt, vain edellisiltä opiskelijoilta esimerkiksi Jukka Pentti

oli tehnyt tällaisen lisäyksen default.vcf tiedostoon:

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

jolloin ISO tiedostojen pitäisi mennä varnish cachen ohi. Hän ei ollut sitä kokeillut. En itsekään sitä nyt pystynyt todistamaan, koitin laittaa .ISO ja .ZIP tiedostot “serverille” ja imuroin ne, mutta en löytänyt lokeista mainintaa portista minkä läpi se oli tullut.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s