ݺߣ

ݺߣShare a Scribd company logo
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
HTTP užklausų kešavimas naudojant Varnish
Paulius Leščinskas
2013-03-07
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
Labas! :)
Esu Paulius Leščinskas
CTO @ Tipro group
● lescinskas.lt
● lt.linkedin.com/in/pluton
● fb.me/paulius.lescinskas
● @lescinskas
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
Tipro Group?
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
HTTP užklausa
DNS resolve'inimas
Forward proxy
Reverse proxy
HTTP serveris
Aplikacija
Duomenų bazė
Užklausa į serverį
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
HTTP užklausa
DNS resolve'inimas
Forward proxy
Reverse proxy
HTTP serveris
Aplikacija
Duomenų bazė
Užklausa į serverį
CACHE !
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
Kešavimas naudojant HTTP header'ius
●
Expires
●
Cache-control
●
Last-modified
●
Etag
● If-modified-since
● If-none-match
● Vary
Proxy skirtas header'is:
Cache-control: s-maxage=<TTL>
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
Varnish UAB „Tipro“
● Demotyvacija,
2011m.
● Uogos.lt, 2012m.
gruodis
Ir kt...
● Gaspadine.lt, 2012m.
gruodis
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
Varnish instaliavimas
● Instaliavimas
Ubuntu/Debian: apt-get install varnish
Centos/Redhat: yum install varnish
● Konfigūravimas
– Daemono configas:
Centos: /etc/sysconfig/varnish
Ubuntu: /etc/default/varnish
(portas, kešo saugojimo variklis, atminties kiekis, worker'ių kiekis
etc.)
– VCL (Varnish configuration language)
/etc/varnish/default.vcl
(backend'ai, funkcijos)
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
Varnish veikimo schema
● vcl_recv - entry point. Normalizuojama užklausa,
ACL, parenkamas backend'as
● vcl_fetch - iškviečiama gavus atsakymą iš
backend'o. Pakeičiamas TTL, modifikuojamas
atsakymas (dažniausiai header'iai)
● vcl_miss - iškviečiama neradus objekto keše.
Naudojama purge'inti įrašą arba modifikuoti
backend'o header'ius
●
vcl_hit - iškviečiama paėmus įrašą iš kešo. Galima
pakeisti TTL arba purge'inti įrašą
●
vcl_error - sintetinės klaidos generavimo funkcija.
● vcl_deliver - exit point. Naudojama pridėti
header'ius debug'inimui.
●
vcl_hash - generuojamas kešo raktas
(apibrėžiamas request'o unikalumas)
●
vcl_pass
● vcl_pipe
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
VCL kintamieji
● client.ip - kliento IP adresas
● req.request - GET/POST/PURGE etc.
● req.url - /straipsnis/blablabla
● req.http.<header> - HTTP header'is, pvz.: req.http.Cookie
● beresp.status - HTTP kodas (200, 404 etc.)
● beresp.ttl - (!!!) TTL pagal header'ius (s-maxage, max-age, Expires, default TTL
[120s])
● beresp.storage - nurodomas kešo saugojimo variklis
● obj.* - kešo duomenys
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
VCL pavyzdys
sub vcl_recv {
# Normalize the Host: header
if (req.http.host ~ "(?i)^(www.)?example.com$") {
set req.http.host = "www.example.com";
}
}
sub vcl_fetch {
# Don't cache cookies
remove beresp.http.Set-Cookie;
set beresp.ttl = 30s;
}
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
REMOTE_ADDR
● VCL:
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
(arba kitą header'į)
● Apache: mod_rpaf (reverse proxy add
forward)
● Nginx: HttpRealipModule
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
ESI (Edge site includes)
sub vcl_fetch {
set beresp.do_esi = true;
}
<esi:include src=/slideshow/varnish-26124887/26124887/"/user.php" />
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
Kešo invalidavimas (purge)
acl purge {
"localhost";
"127.0.0.1";
"10.10.0.0"/24;
}
sub vcl_recv {
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
return (lookup);
}
...
}
sub vcl_hit {
if (req.request == "PURGE") {
purge; # Varnish 3
# set obj.ttl = 0s; # Varnish 2
error 200 "Purged.";
}
}
CURLOPT_CUSTOMREQUEST "PURGE"
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
Administravimo komandos
● varnishadm – keisti parametrus, VCL config'ą
be reload/restart
● varnishlog – real time log
● varnishncsa - real time NCSA (Apache) style
log
● varnishstat - statistika
● varnishtop - log'o top'as
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
Ką pamiršau?
● Directors
● Health-check
● Grace mode
● Saint mode
priminkit, ko dar nepaminėjau :)
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
Daugiau informacijos...
● www.varnish-cache.org
● man varnish
● man vcl
● google
● wikipedia
● etc.
tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas!
Ačiū! :)
Palik atsiliepimą: https://joind.in/8254

More Related Content

HTTP užklausų kešavimas naudojant Varnish

  • 1. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! HTTP užklausų kešavimas naudojant Varnish Paulius Leščinskas 2013-03-07
  • 2. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! Labas! :) Esu Paulius Leščinskas CTO @ Tipro group ● lescinskas.lt ● lt.linkedin.com/in/pluton ● fb.me/paulius.lescinskas ● @lescinskas
  • 3. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! Tipro Group?
  • 4. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! HTTP užklausa DNS resolve'inimas Forward proxy Reverse proxy HTTP serveris Aplikacija Duomenų bazė Užklausa į serverį
  • 5. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! HTTP užklausa DNS resolve'inimas Forward proxy Reverse proxy HTTP serveris Aplikacija Duomenų bazė Užklausa į serverį CACHE !
  • 6. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! Kešavimas naudojant HTTP header'ius ● Expires ● Cache-control ● Last-modified ● Etag ● If-modified-since ● If-none-match ● Vary Proxy skirtas header'is: Cache-control: s-maxage=<TTL>
  • 7. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! Varnish UAB „Tipro“ ● Demotyvacija, 2011m. ● Uogos.lt, 2012m. gruodis Ir kt... ● Gaspadine.lt, 2012m. gruodis
  • 8. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! Varnish instaliavimas ● Instaliavimas Ubuntu/Debian: apt-get install varnish Centos/Redhat: yum install varnish ● Konfigūravimas – Daemono configas: Centos: /etc/sysconfig/varnish Ubuntu: /etc/default/varnish (portas, kešo saugojimo variklis, atminties kiekis, worker'ių kiekis etc.) – VCL (Varnish configuration language) /etc/varnish/default.vcl (backend'ai, funkcijos)
  • 9. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! Varnish veikimo schema ● vcl_recv - entry point. Normalizuojama užklausa, ACL, parenkamas backend'as ● vcl_fetch - iškviečiama gavus atsakymą iš backend'o. Pakeičiamas TTL, modifikuojamas atsakymas (dažniausiai header'iai) ● vcl_miss - iškviečiama neradus objekto keše. Naudojama purge'inti įrašą arba modifikuoti backend'o header'ius ● vcl_hit - iškviečiama paėmus įrašą iš kešo. Galima pakeisti TTL arba purge'inti įrašą ● vcl_error - sintetinės klaidos generavimo funkcija. ● vcl_deliver - exit point. Naudojama pridėti header'ius debug'inimui. ● vcl_hash - generuojamas kešo raktas (apibrėžiamas request'o unikalumas) ● vcl_pass ● vcl_pipe
  • 10. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! VCL kintamieji ● client.ip - kliento IP adresas ● req.request - GET/POST/PURGE etc. ● req.url - /straipsnis/blablabla ● req.http.<header> - HTTP header'is, pvz.: req.http.Cookie ● beresp.status - HTTP kodas (200, 404 etc.) ● beresp.ttl - (!!!) TTL pagal header'ius (s-maxage, max-age, Expires, default TTL [120s]) ● beresp.storage - nurodomas kešo saugojimo variklis ● obj.* - kešo duomenys
  • 11. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! VCL pavyzdys sub vcl_recv { # Normalize the Host: header if (req.http.host ~ "(?i)^(www.)?example.com$") { set req.http.host = "www.example.com"; } } sub vcl_fetch { # Don't cache cookies remove beresp.http.Set-Cookie; set beresp.ttl = 30s; }
  • 12. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! REMOTE_ADDR ● VCL: remove req.http.X-Forwarded-For; set req.http.X-Forwarded-For = client.ip; (arba kitą header'į) ● Apache: mod_rpaf (reverse proxy add forward) ● Nginx: HttpRealipModule
  • 13. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! ESI (Edge site includes) sub vcl_fetch { set beresp.do_esi = true; } <esi:include src=/slideshow/varnish-26124887/26124887/"/user.php" />
  • 14. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! Kešo invalidavimas (purge) acl purge { "localhost"; "127.0.0.1"; "10.10.0.0"/24; } sub vcl_recv { if (req.request == "PURGE") { if (!client.ip ~ purge) { error 405 "Not allowed."; } return (lookup); } ... } sub vcl_hit { if (req.request == "PURGE") { purge; # Varnish 3 # set obj.ttl = 0s; # Varnish 2 error 200 "Purged."; } } CURLOPT_CUSTOMREQUEST "PURGE"
  • 15. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! Administravimo komandos ● varnishadm – keisti parametrus, VCL config'ą be reload/restart ● varnishlog – real time log ● varnishncsa - real time NCSA (Apache) style log ● varnishstat - statistika ● varnishtop - log'o top'as
  • 16. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! Ką pamiršau? ● Directors ● Health-check ● Grace mode ● Saint mode priminkit, ko dar nepaminėjau :)
  • 17. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! Daugiau informacijos... ● www.varnish-cache.org ● man varnish ● man vcl ● google ● wikipedia ● etc.
  • 18. tiPRO – didžiausias interneto media tinklas Lietuvoje. Apie 50 svetainių, apie 70% mėnesio auditorijos pasiekiamumas! Ačiū! :) Palik atsiliepimą: https://joind.in/8254