Prezentacija VilniusPHP #4 susitikime apie HTTP užklausų kešavimą naudojant kešuojantį reverse proxy serverį „Varnish“
1 of 18
Download to read offline
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