Varnish-käänteisproxy ja webpalvelimen suorituskyvyn testaus ApacheBenchillä

Tämän julkaisun sisältö oli yksi osa Järjestelmäprojektia, jonka toteutin yhdessä toisen opiskelijan, Oliver Sirénin, kanssa. Projektisuunnitelman mukaisesti projektiin ei alun perin kuulunut käänteisproxyn konfigurointi. Tutustuttuamme aiheeseen, halusimme kuitenkin selvittää, miten sen asentaminen vaikuttaisi webpalvelimen suorituskykyyn.
Virtuaalipalvelimen resurssit:

  • Nimi: jprojekti-ubuntu
  • Sijainti: Frankfurt (FRA1)
  • IPv4-osoite: 138.68.98.9
  • Käyttöjärjestelmä: Ubuntu 16.04.2 x64
  • Prosessoriytimiä: 1
  • Keskusmuistia: 512 Mt
  • Tallennustilaa: 20 Gt

Palvelin on konfiguroitu edeltävän raportin mukaisesti: https://markuspyharanta.wordpress.com/2017/05/14/domain-nimen-osoittaminen-ubuntu-virtuaalipalvelimeen-digitaloceanissa/


Varnish

Varnish on HTTP-käänteisproxy tai ”webkiihdytin”, joka nopeuttaa verkkosivun latautumisaikoja säilömällä sivut välimuistiinsa. Kun se saa pyynnön käyttäjältä, se pyrkii vastaamaan siihen suoraan välimuistinsa sisällöllä. Jos se ei pysty siihen välimuistinsa kautta, niin se lähettää pyynnön edelleen backendille, hakee vastauksen ja säilöö sen välimuistiinsa sekä toimittaa vastauksen asiakkaalle. Hyötyjä on useita: nopeammat latausajat ja kestävyyttä ruuhkatilanteissa, sillä proxypalvelin jatkaa sisällön tarjoilemista suoraan välimuististaan, kunhan asiakas on ladannut sivun kerran aiemmin. Sama hyöty pätee myös vikatilanteisiin, joissa webpalvelin pettää.

Proxyn asennus

Asensimme Varnishin virtuaalipalvelimellemme Apachen kaveriksi. Asennus terminaalin kautta komennolla:

$ sudo apt-get install varnish

Apache kuuntelee oletuksena porttia 80. Nyt me kuitenkin haluamme käänteisproxyn hoitavan liikennöimisen asiakkaan kanssa. Näin ollen meidän tulee laittaa Varnish kuuntelemaan porttia 80 ja määritellä toinen portti Apachelle, jolta Varnish sitten noutaa sisältöä. Aivan ensimmäisenä muokkasimme tiedostoa /etc/default/varnish/
$ sudo nano /etc/default/varnish
Meidän tuli poistaa kommentoinnit kaikista riveistä kohdasta DAEMON_OPTS Alternative 2:n alta, ja muokata kyseinen kohta näyttämään seuraavalta:

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

Eli näin:
varnishdefault
Tallensimme muutokset, jonka jälkeen meidän tuli laittaa Apache kuuntelemaan jotain muuta porttia, kuin 80. Määrittelimme Apachen portiksi 8080, koska näin oli jo määritelty varnishin default.vcl tiedostossa hakemistossa /etc/varnish/.  Muokkasimme Apachen ports.conf tiedostoon Virtual Hostiksi *:8080 ja laitoimme sen kuuntelemaan porttia 8080.

$ sudo nano /etc/apache2/ports.conf

portitoikein
Tämän lisäksi, piti myös muuttaa Virtual Host asetuksia /etc/apache2/sites-available/default sijainnista.

$ sudo nano /etc/apache2/sites-available/000-default.conf

VirtualHostiksi muutettiin tässäkin tiedostossa sama *:8080, eli seuraavasti:


defaultconf Tässä vaiheessa käänteisproxyn pitäisi olla konfiguroituna oikein. Huomaisimme kuitenkin, että sivusto ei lataudu oikein porttimuutosten jälkeen. Hetken selvittelyn jälkeen saimme selville, että systemd palvelun määritykset ohittivat /etc/default/varnish -tiedostossa tekemämme muutokset. Korjataksemme ongelman meidän tuli muokata tiedostoa /lib/systemd/system/varnish.service ja muuttaa sieltäkin portti 6081 portiksi 80.

$ sudo nano /lib/systemd/system/varnish.service
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

Tekemämme muutos näkyy kuvassa harmaalla taustalla:
libvarnishservice
Lopuksi, kun käynnistimme Apachen ja Varnishin uudelleen, sivusto näkyi taas oikein selaimessa.

$ sudo service apache2 restart
$ sudo service varnish restart

Tuloste tausta-ajossa olevista Varnishin palveluista saatiin seuraavalla terminaalin komennolla:

$ varnishstat

varmishstat
Lopuksi voidaan vielä tarkistaa, että sekä Apache että Varnish toimivat normaalisti:

$ curl -I http://dc-jarjestelmaprojekti.info

curldomain

Webpalvelimen suorituskyvyn testaus

Nyt, kun Varnish on asennettu virtuaalipalvelimelle, ja se noutaa sisältöä Apachelta käyttäjälle, on olennaista selvittää, millainen vaikutus sillä on webpalvelimen suorituskykyyn.
Testasimme Varnishin vaikutuksia palvelimeen Apache HTTP server benchmarking työkalulla (ab). Sillä saadaan hyvä kuva, kuinka hyvin meidän tämänhetkinen Apache konfiguraatio operoi.

Ennen Varnishia

Testasimme palvelimen ennen Varnishin asennusta ja konfiguraatiota. Kokeilimme suorittaa 500 yhtäaikaista HTTP-yhteyttä ja 1000 HTTP-pyyntöä.

$ ab -c 500 -n 1000 http://localhost/var/www/html/index.html

Komennossa c-kirjain viittaa samanaikaisten pyyntöjen määrään, kun taas n-kirjain viittaa HTTP-pyyntöjen kokonaismäärään benchmarkin aikana.
Tulokset:
varnishennen
Testin mukaan kaikki 1000 http-pyyntöä onnistuivat. Palvelin käsitteli keskimäärin 4595.91 pyyntöä sekunnissa.

Varnishin jälkeen

Raportin aiemmassa kohdassa tekemämme Varnishin asennuksen ja konfiguroinnin jälkeen suoritimme saman testin uudelleen. Kokeilimme taas suorittaa 500 yhtäaikaista HTTP-yhteyttä ja yhteensä 1000 HTTP-pyyntöä.

$ ab -c 500 -n 1000 http://localhost/var/www/html/index.html

Tulokset:
varnishjälkeen
Testin mukaan kaikki 1000 http-pyyntöä onnistuivat. Palvelin käsitteli keskimäärin 2965.96 pyyntöä sekunnissa.

Tuloksien vertailuanalyysi

varnishvertailu
Tulimme johtopäätökseen, ettei välityspalvelimesta ole meidän projektimme kannalta varsinaista hyötyä. Lähinnä HTML-koodia sisältävät tiedostot ovat niin kevyitä, että sivun latausnopeus on lähes riippumaton siitä, ladataanko se itse palvelimelta vai Varnishin välimuistista. Testit suoritettiin nopeassa 1000 Mbps verkossa, joten erittäin hidas verkkoyhteys saattaisi tuoda esille eroja suorituskyvyssä toisenlaisessa ympäristössä.
Testien perusteella voisi päätellä, että Varnishin käänteisvälipalvelin olisi vaikuttanut sivun latautumisnopeuteen negatiivisesti. Jos palvelimellamme olisi suurempia tiedostoja ja paljon dynaamista sisältöä, välipalvelin saattaisi osoittautua hyödylliseksi. Esimerkiksi WordPress-pohjaisten suurempien toteutuksien kohdalla todennäköisesti havaittaisiin merkittävää parannusta latausajoissa. Varnishin hyöty nousisi, kun sivun latausnopeus palvelimelta olisi välimuistia hitaampi.
Virhe proxyn konfiguroinnissa on myös mahdollinen. Osoitimme kyllä, että webpalvelimen sisältö ladataan Varnishilta, joten emme tähän hätään kykene todentamaan, mistä sen tehottomuus johtuu.


Lähteet:

Wikipedia 2017. Reverse proxy. URL: https://en.wikipedia.org/wiki/Reverse_proxy. Luettu 15.4.2017.
Wikipedia 2017. Varnish (software) URL: https://en.wikipedia.org/wiki/Varnish_(software). Luettu 15.4.2017.
Varnish Software 2016. Varnish Cache. URL: https://www.varnish-software.com/varnish-cache/. Luettu: 19.4.2017.
Globo.Tech 2016. How to set up Varnish on Ubuntu 16. URL: https://www.globo.tech/learning-center/set-up-varnish-ubuntu-16/. Luettu: 19.4.2017.
DigitalOcean 2012. How to install and configure Varnish with Apache on Ubuntu 12.04. URL: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-varnish-with-apache-on-ubuntu-12-04–3. Luettu: 18.4.2017.
Samuel Kontiomaa 2012. Apache 2 performance boost with Varnish & YSlow. URL: https://kontsu.wordpress.com/2012/10/10/apache-2-performance-boost-with-varnish-yslow/. Luettu: 18.4.2017.
Eino Liimatta 2012. Harjoitustehtävä 7: Webpalvelimen suorituskyky. URL: https://eliimatt.wordpress.com/tag/suorituskyky/. Luettu: 18.4.2017.
DigitalOcean 2014. Configure Varnish with Apache on Ubuntu 14.04. URL: https://www.digitalocean.com/community/questions/configure-varnish-with-apache-on-ubuntu-14-04. Luettu 18.4.2017.
Apache HTTP server project 2013. ab – Apache HTTP server benchmarking tool. URL: https://httpd.apache.org/docs/2.4/programs/ab.html. Luettu 19.4.2017.


TÄTÄ DOKUMENTTIA SAA KOPIOIDA JA MUOKATA GNU GENERAL PUBLIC LICENSE (VERSIO 3 TAI UUDEMPI) MUKAISESTI. HTTP://WWW.GNU.ORG/LICENSES/GPL.HTML
MARKUS PYHÄRANTA

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top