Varnish on tehokas välimuistipalvelin, joka pitää taustalla toimivan varsinaisen HTTP-palvelimen sivuja muistissa ja palvelee ne suoraan sieltä. Sen avulla on helppo nopeuttaa esimerkiksi Djangon toimintaa huomattavasti, kun jokaista HTTP-pyyntöä ei tarvitse käsitellä yhä uudelleen Python-koodissa.

Ongelmaksi muodostuu se, että kun Django-saitin sisältöä muokataan, Varnish tarjoilee edelleen vanhaa sisältöä N minuutin ajan. Jos sisällön haluaa päivittyvän heti, Varnishin välimuisti täytyy tyhjentää.

Tähän tarkoitukseen löytyy kaksi GitHub-projektia nimeltään python-varnish ja django-varnish. Valitettavasti näissä projekteissa on muutamia puutteita, joiden takia ne eivät soveltuneet omaan käyttööni. Tämän vuoksi tein molemmista omat forkit, jotka löytyvät osoitteista:

Tein seuraavanlaisia parannuksia:

  • python-varnish osaa autentikoitua shared secretillä Varnishiin
  • django-varnishiin voi konfiguroida shared secretin settings.py:hyn
  • django-varnish tukee VARNISH_GLOBAL_WATCHED_MODELS-asetusta, joka on lista Djangon tietomalleista, joiden muokkaaminen tyhjentää Varnishin välimuistin kokonaan