Download - Varnish, the high performance valhalla?
Kings of Code 2011
Varnish, the high performance valhalla?
THE ENRISE RESTAURANT
3
THE ENRISE RESTAURANT
∂ We want to prepare the best dishes
3
THE ENRISE RESTAURANT
∂ We want to prepare the best dishes∂ With the best ingredients
3
∂ Engineers are our top chefs!
THE ENRISE RESTAURANT
∂ We want to prepare the best dishes∂ With the best ingredients∂ To create a magical client experience!
3
BEFORE WE START
WHO KNOWS RFC 2616?
4
BEFORE WE START
WHO KNOWS HTTP?
5
BEFORE WE START
WHO THINKS HE/SHE KNOWS
HTTP?
6
∂ Wikipedia : Proxy
STANDARD PROXY
7
∂ Wikipedia : Reverse proxy
REVERSE PROXY
8
∂ Wikipedia : Reverse proxy
REVERSE PROXY
8
∂ Wikipedia : Reverse proxy
REVERSE PROXIES
9
∂ Wikipedia : Reverse proxy
REVERSE PROXIES
9
∂ Wikipedia : Reverse proxy
REVERSE PROXIES
9
∂ NOT a webserver!
WHAT IS VARNISH? (1)
10
∂ NOT a webserver!
WHAT IS VARNISH? (1)
∂Caching reverse proxy
10
∂ NOT a webserver!
WHAT IS VARNISH? (1)
∂Caching reverse proxy∂Load balancer
10
∂ NOT a webserver!
WHAT IS VARNISH? (1)
∂Caching reverse proxy∂Load balancer∂Fail over system
10
∂ NOT a webserver!
WHAT IS VARNISH? (1)
∂Caching reverse proxy∂Load balancer∂Fail over system∂HTTP Accelerator
10
WHAT IS VARNISH? (2)
11
WHAT IS VARNISH? (2)
∂ Originally built for a Norwegian newspaper
11
WHAT IS VARNISH? (2)
∂ Originally built for a Norwegian newspaper∂ > 545k new hostnames in December 2010§NetCraft monthly survey
11
∂ Massive growth in usage
WHAT IS VARNISH? (2)
∂ Originally built for a Norwegian newspaper∂ > 545k new hostnames in December 2010§NetCraft monthly survey
∂ Known users§Wikileaks§Facebook§Twitter§SlashDot
11
∂ Scaling limitations currently unknown
WHAT IS VARNISH? (3)
12
∂ Scaling limitations currently unknown
WHAT IS VARNISH? (3)
∂Designed for 64bit architecture
12
∂ Scaling limitations currently unknown
WHAT IS VARNISH? (3)
∂Designed for 64bit architecture∂Highly scalable
12
∂ Scaling limitations currently unknown
WHAT IS VARNISH? (3)
∂Designed for 64bit architecture∂Highly scalable§Varnish in front of Varnish(es)
12
∂ Scaling limitations currently unknown
WHAT IS VARNISH? (3)
∂Designed for 64bit architecture∂Highly scalable§Varnish in front of Varnish(es)∂Perfect browser cache solution
12
∂ Scaling limitations currently unknown
WHAT IS VARNISH? (3)
∂Designed for 64bit architecture∂Highly scalable§Varnish in front of Varnish(es)∂Perfect browser cache solution§Prevent those hard refresh calls!
12
∂ Possible request paths
INTERNALS (1)
13
∂ Optimal request path
INTERNALS (2)
14
∂ Caching request path
INTERNALS (3)
15
∂ Prevent caching
INTERNALS (4)
16
∂ Bypassing Varnish
INTERNALS (5)
17
∂ Errors or issueing restarts
INTERNALS (6)
18
∂ Compiled to C when run
VARNISH CONFIGURATION LANGUAGE (1)
19
∂ Compiled to C when run
VARNISH CONFIGURATION LANGUAGE (1)
∂ 11 subroutines (vcl_recv, vcl_hash, etc ...)
19
∂ Compiled to C when run
VARNISH CONFIGURATION LANGUAGE (1)
∂ 11 subroutines (vcl_recv, vcl_hash, etc ...)∂ Backend(s)
19
∂ Compiled to C when run
VARNISH CONFIGURATION LANGUAGE (1)
∂ 11 subroutines (vcl_recv, vcl_hash, etc ...)∂ Backend(s)∂ Directors (random, round robin, hash)
19
∂ Compiled to C when run
VARNISH CONFIGURATION LANGUAGE (1)
∂ 11 subroutines (vcl_recv, vcl_hash, etc ...)∂ Backend(s)∂ Directors (random, round robin, hash)∂ Access control lists
19
∂ Compiled to C when run
VARNISH CONFIGURATION LANGUAGE (1)
∂ 11 subroutines (vcl_recv, vcl_hash, etc ...)∂ Backend(s)∂ Directors (random, round robin, hash)∂ Access control lists∂ Saint and grace mode
19
∂ Compiled to C when run
VARNISH CONFIGURATION LANGUAGE (1)
∂ 11 subroutines (vcl_recv, vcl_hash, etc ...)∂ Backend(s)∂ Directors (random, round robin, hash)∂ Access control lists∂ Saint and grace mode∂ Custom subroutines
19
∂ Compiled to C when run
VARNISH CONFIGURATION LANGUAGE (1)
∂ 11 subroutines (vcl_recv, vcl_hash, etc ...)∂ Backend(s)∂ Directors (random, round robin, hash)∂ Access control lists∂ Saint and grace mode∂ Custom subroutines∂ Inline C
19
∂ Compiled to C when run
VARNISH CONFIGURATION LANGUAGE (1)
∂ 11 subroutines (vcl_recv, vcl_hash, etc ...)∂ Backend(s)∂ Directors (random, round robin, hash)∂ Access control lists∂ Saint and grace mode∂ Custom subroutines∂ Inline C∂ Since v3.0 : VMODS
19
∂ Cache images in vcl_recv
VARNISH CONFIGURATION LANGUAGE (2)
if (req.request == “GET” &&req.url ~ “\.(gif|jpg|jpeg|bmp|png|ico)$”) {unset req.http.cookie;set req.grace = 1m;return(lookup);
}
20
∂ Remove Google Analytics in vcl_recv
VARNISH CONFIGURATION LANGUAGE (3)
if (req.http.cookie) { set req.http.Cookie = regsuball(req.http.Cookie,
"__utm.=[^;]+(; )?", ""); if (req.http.cookie ~ "^ *$") { remove req.http.cookie; }}
21
∂ Multiple backend configuration
VARNISH CONFIGURATION LANGUAGE (4)
backend default { .host="192.168.1.10"; .port="8080"; .probe={ .url=”/test.php”; }}backend second { .host="192.168.1.20"; .port="8080";}
22
∂ Load balanced 33 / 66 % config
VARNISH CONFIGURATION LANGUAGE (5)
director balance random { { .backend = default; .weight = 1; } { .backend = second; .weight = 2; }}sub vcl_recv { set.req.backend = balance; return(pass);}
23
∂ Adding headers on response
VARNISH CONFIGURATION LANGUAGE (6)
if (obj.hits > 0) { #if hit add hit count set resp.http.X-Cache = "HIT-" obj.hits;} else { set resp.http.X-Cache = "MISS”;}
24
VARNISHING WORDPRESS (1)
25
VARNISHING WORDPRESS (1)
∂Siege on standard WordPress homepage
25
VARNISHING WORDPRESS (1)
∂Siege on standard WordPress homepage§No Varnish
25
VARNISHING WORDPRESS (1)
∂Siege on standard WordPress homepage§No Varnish§Default Varnish installation
25
VARNISHING WORDPRESS (1)
∂Siege on standard WordPress homepage§No Varnish§Default Varnish installation§Custom VCL configuration
25
∂ No Varnish
VARNISHING WORDPRESS (2)
26
∂ No Varnish
VARNISHING WORDPRESS (2)
26
∂ No Varnish
VARNISHING WORDPRESS (2)
26
∂ Default Varnish
VARNISHING WORDPRESS (3)
27
∂ Default Varnish
VARNISHING WORDPRESS (3)
27
∂ Default Varnish
VARNISHING WORDPRESS (3)
27
∂ Kill those cookies!!
VARNISHING WORDPRESS (4)
# Drop any cookies sent to WordPress.sub vcl_recv { unset req.http.cookie;}# Drop any cookies WordPress tries to send backsub vcl_fetch { unset beresp.http.set-cookie;}
28
∂ Custom Varnish
VARNISHING WORDPRESS (5)
29
∂ Custom Varnish
VARNISHING WORDPRESS (5)
29
∂ Custom Varnish
VARNISHING WORDPRESS (5)
29
OTHER PITFALLS
30
OTHER PITFALLS
∂ Accept headers§application/vnd.kingsofcode.speakers+xml;§return “Vary: Accept” header
30
OTHER PITFALLS
∂ Accept headers§application/vnd.kingsofcode.speakers+xml;§return “Vary: Accept” header∂ Accept-encoding header
30
∂ Not specifically Varnish issues
OTHER PITFALLS
∂ Accept headers§application/vnd.kingsofcode.speakers+xml;§return “Vary: Accept” header∂ Accept-encoding header∂ Vary: User-Agent header
30
∂ Very powerful for content assembly
EDGE SIDE INCLUDES (1)
∂Markup language∂Co-authored Akamai, IBM, Oracle & more∂Extensive features
31
∂ Examples? http://esi-examples.akamai.com
EDGE SIDE INCLUDES (2)
∂ if ... else§<esi:choose><esi:when> ... <esi:otherwise>
∂ Variables§<esi:assign> and <esi:vars>
∂ Varnish implements only one feature!§<esi:include src=”uri” />
32
∂ VCL config for ESI
EDGE SIDE INCLUDES (3)
if (req.url ~ "^/url/to/esi/snippets") { unset beresp.http.set-cookie;}## enable esi on header from backendif (beresp.http.enable-esi == "1") { set beresp.do_esi = true; //varnish 3.0
unset beresp.http.enable-esi;}
33
∂ Where are the ESI’s?
EDGE SIDE INCLUDES (4)
34
∂ Different TTL’s for content snippets
EDGE SIDE INCLUDES (5)
35
∂ You can’t go without
TOOLS
∂Varnishstat∂Varnishsizes∂Varnishtop∂Varnishadm∂Varnishlog
36
VARNISHLOG
∂ Log hits§varnishlog -o VCL_Call hit | grep RxURL∂ Log misses§varnishlog -i TxURL
37
∂ Request of a gif image by client
VARNISHLOG
38
∂ Request of a gif image by client
VARNISHLOG
38
∂ Request of a gif image by client
VARNISHLOG
38
∂ Request of a gif image by client
VARNISHLOG
38
CAVEATS
∂ Unsuitable for 32 bit
∂ Beware of cookie monster applications
∂ Check your API design
∂ Avoid large files
∂ Minimize cookie usage in ESI
∂ No SSL support
39
∂ Questions? Thank you!