Differences

This shows you the differences between two versions of the page.

Link to this comparison view

saisp:labs:09:contents:04 [2014/04/28 15:52]
razvan.deaconescu [04. Lorem ipsum]
saisp:labs:09:contents:04 [2014/05/05 13:02] (current)
razvan.deaconescu
Line 1: Line 1:
-==== 04. Cache-ul ​în Varnish ====+==== 04. [15p] Caching ​în Varnish ====
  
-Expirarea/invalidarea ​cache-ului. ​Informații despre ​cache în header-ul HTTP.+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>​
saisp/labs/09/contents/04.1398689528.txt.gz · Last modified: 2014/04/28 15:52 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0