This shows you the differences between two versions of the page.
saisp:labs:09:contents:04 [2013/11/11 00:46] 127.0.0.1 external edit |
saisp:labs:09:contents:04 [2014/05/05 13:02] (current) razvan.deaconescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 04. Lorem ipsum ==== | + | ==== 04. [15p] Caching în Varnish ==== |
- | ... | + | Vrem să vedem cum se comportă cache-ul în Varnish. Intrările în Varnish sunt cache-uite pentru o perioadă de timp înainte să expire. După expirarea timpului respectiv, se realizează o nouă cerere către serverul web pentru obținerea din nou a paginii. |
+ | Timpul de viață al cache-ului este dat de o variabilă TTL internă a Varnish. Valoarea sa este în mod implicit configurată la ''120'' de secunde. Putem determina acest lucru prin intermediul comenzii:<code> | ||
+ | root@varnish:~# varnishadm param.show default_ttl | ||
+ | </code> | ||
+ | Valorea implicită, afișată de comanda de mai sus este ''120'' de secunde. Această valoare poate fi configurată în fișierul ''/etc/default/varnish''; este vorba de directiva ''VARNISH_TTL''. | ||
+ | |||
+ | Ca să urmărim expirarea cache-ului, vom folosi comanda ''varnishlog'' în forma de mai jos:<code> | ||
+ | root@varnish:~# varnishlog -i VCL_Call | ||
+ | </code> | ||
+ | Apoi facem cereri către fișierele cu extensia ''.dat'' menționate în exercițiul anterior. | ||
+ | |||
+ | Observăm că apare un mesaj ce conține cuvântul ''miss'' atunci când informația nu se găsește în cache, și apoi un mesaj ce conține cuvântul ''hit'' când informația este în cache. După ''120'' de secunde cache-ul va expira și atunci un acces va genera un ''miss''. | ||
+ | |||
+ | După ce ați generat un mesaj ''miss'' pe fișierul ''100k.dat'', adică informația nu era, dar acum este, în cache, rescrieți fișierul pe serverul web, în directorul ''/var/www/data/100k.dat'' folosind comanda:<code> | ||
+ | root@web:/var/www/html/data# dd if=/dev/urandom of=100k.dat bs=100k count=1 | ||
+ | </code> | ||
+ | |||
+ | Apoi accesați din nou fișierul și urmăriți output-ul comenzii ''varnishlog''. Veți observa că fișierul a fost obținut din cache. Până când cache-ul nu expiră orice modificare a fișierului nu va fi vizibilă în cache. | ||
+ | |||
+ | Pentru a preveni rămânerea în cache a unui obiect dat, se poate folosi [[https://www.varnish-cache.org/docs/3.0/tutorial/purging.html|purging sau banning]]. După ce au ajuns în cache fișierele cu extensia ''.dat'', faceți ban acelor fișiere pentru a fi recitite de pe server. | ||
+ | |||
+ | <note tip> | ||
+ | Urmăriți indicațiile de [[https://www.varnish-cache.org/docs/3.0/tutorial/purging.html#bans|aici]]. Folosiți comanda ''varnishadm'' pentru a accesa CLI-ul de configurare Varnish. | ||
+ | </note> | ||
+ | |||
+ | <solution -hidden> | ||
+ | Pentru început așteptăm să expire cache-ul Varnish pentru pagina ''/data/100k.dat'' după care o reaccesăm de pe sistemul gazdă (''mjolnir''). În ''varnishlog'' va apărea un mesaj precum cel de mai jos:<code> | ||
+ | root@varnish:~# varnishlog -i VCL_Call | ||
+ | 12 BackendClose - default | ||
+ | 12 BackendOpen b default 192.168.0.3 42737 192.168.0.2 80 | ||
+ | 12 BackendReuse b default | ||
+ | 11 SessionOpen c 192.168.0.1 37545 :80 | ||
+ | 11 VCL_call c recv | ||
+ | 11 VCL_call c hash | ||
+ | 11 VCL_call c miss | ||
+ | 11 VCL_call c fetch | ||
+ | 11 VCL_call c deliver | ||
+ | 11 ReqEnd c 349371766 1399269441.987185955 1399269442.000175238 0.000062466 0.005365372 0.007623911 | ||
+ | 11 SessionClose c timeout | ||
+ | 11 SessionOpen c 192.168.0.1 37548 :80 | ||
+ | 11 VCL_call c recv | ||
+ | 11 VCL_call c hash | ||
+ | 11 VCL_call c hit | ||
+ | 11 VCL_call c deliver | ||
+ | 11 ReqEnd c 349371767 1399269494.260819435 1399269494.269623995 0.000100136 0.000047445 0.008757114 | ||
+ | </code> | ||
+ | Mai sus au fost două accese. Primul acces a generat ''miss'', iar al doilea a generat ''hit''. Pentru a anula cache-ul paginii ''/data/100k.dat'' folosim comanda ''ban'' în consola ''varnishadm'':<code> | ||
+ | root@varnish:~# varnishadm | ||
+ | [...] | ||
+ | varnish> ban req.http.host == "192.168.0.3" && req.url ~ ".dat$" | ||
+ | 200 | ||
+ | </code> | ||
+ | După această rulare, accesăm din nou pagina ''/data/100k.dat'' iar output-ul comenzii ''varnishlog'' va afișa un ''miss'':<code> | ||
+ | 12 BackendClose b default | ||
+ | 12 BackendOpen b default 192.168.0.3 42742 192.168.0.2 80 | ||
+ | 12 BackendReuse b default | ||
+ | 11 SessionOpen c 192.168.0.1 37566 :80 | ||
+ | 11 VCL_call c recv | ||
+ | 11 VCL_call c hash | ||
+ | 11 VCL_call c miss | ||
+ | 11 VCL_call c fetch | ||
+ | 11 VCL_call c deliver | ||
+ | 11 ReqEnd c 349371771 1399269730.749448776 1399269730.762530804 0.000076056 0.006940126 0.006141901 | ||
+ | </code> | ||
+ | </solution> |