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