http užklausų kešavimas naudojant varnish

18
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

Upload: paulius-lescinskas

Post on 19-Jul-2015

591 views

Category:

Technology


1 download

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