http užklausų kešavimas naudojant varnish
TRANSCRIPT
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 varnishCentos/Redhat: yum install varnish
● Konfigūravimas– Daemono configas:
Centos: /etc/sysconfig/varnishUbuntu: /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="/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