Varnish käytössä blogissani

Thursday, November 05th 2009 at 02:59 in Technology, Python

Nopeutin blogini toimintaa hiukan ottamalla käyttöön Varnishin. Se on HTTP-reverse-proxy, joka pitää webbisivuja välimuistissa ja palvelee niitä tehokkaammin kuin Apache ja Django pystyvät niitä tuottamaan. Pikaisesti testattuna tämä vaatimaton virtuaalikoneeni pystyy palvelemaan nyt noin 400 hakupyyntöä sekunnissa, kun se ilman Varnishia jäi alle sadan.

Varnish on siitä mukava, että se osaa cachettaa sivuja, vaikkei niissä olisi "virallisia" Cache-Control-headereita. VCL-kielellä voi rakentaa oman logiikan sille, mitä cachetetaan ja mitä ei. Oletuksena sellaiset sivut jätetään pois cachesta, joissa on käytetty cookieita tai authorization-headereita, jotta käyttäjäkohtainen data pysyisi erillään.

Varnishissa on myös näpsäkkä CLI-rajapinta, jolla voi esimerkiksi tyhjentää haluttuja sivuja cachesta. Tein omaa blogiani varten tällaisen apufunktion, joka tyhjentää koko välimuistin aina silloin, kun joku kirjoittaa uuden kommentin tai itse kirjoitan uuden artikkelin:

def clear_varnish():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect(('127.0.0.1', 6082))
        s.sendall('url.purge .*\n')
        s.recv(4096)
        s.close()
    except:
        pass

Tämä on toki aika tehotonta, jos saitilla on paljon liikennettä ja cache tyhjenee vähän väliä. Silloin on fiksumpaa käyttää jotain muuta ratkaisua.

2 Comments
Kennu 5.11.2009 14:48:53

Apache näyttää jumittavan silloin tällöin kokonaan jolloin tulee Guru Meditationia, vaikka normaalisti toimii ihan hyvin Varnishin kautta. Yritän tutkia asiaa.

Kennu 5.11.2009 17:45:30

Löytyihän se syykin sieltä. Apacheen oli jäänyt pariin paikkaan ProxyPass, joka aiheutti rekursiivisen haun takaisin Varnishiin ja siitä jälleen Apacheen jne.


You can use Markdown to format your comment:

  • > quoted text
  • *italic* text
  • **bold** text
  • `code block` (multi-line is ok, whitespace is preserved)
  • [link text](http://www.google.com "link title")

Separate paragraphs in your text with two newlines