Your SlideShare is downloading. ×
0
1	
  
Varnish	
  –	
  More	
  than	
  a	
  cache	
  
Bernd Löffeld
Head of Platform Development
Magic Internet GmbH
Email:...
Varnish	
  Features	
  
2	
  
o  Caching	
  
o  Loadbalancing	
  and	
  Backend-­‐Selec3on	
  
o  Header	
  analysis	
  an...
Varnish	
  Subrou5nes	
  
3	
  
Varnish	
  Configura5on	
  Language	
  in	
  example	
  
4	
  
sub vcl_recv {!
if (req.restarts == 0) {!
if (req.http.x-for...
The	
  Setup	
  –	
  A	
  vision	
  by	
  now	
  
5	
  
Start:	
  Just	
  a	
  simple	
  Web	
  Applica5on	
  
6	
  
Start:	
  Just	
  a	
  simple	
  Web	
  Applica5on	
  
7	
  
Step	
  1:	
  Ac5vate	
  the	
  cache	
  
8	
  
Step	
  1:	
  Ac5vate	
  the	
  cache	
  
9	
  
include "bwb/backends.vcl“;
Varnish à /etc/varnish/main.vcl
backend defau...
Step	
  1:	
  Ac5vate	
  the	
  cache	
  
10	
  
Step	
  2:	
  Introduce	
  new	
  Backend	
  
11	
  
Step	
  2:	
  Introduce	
  new	
  Backend	
  
12	
  
include "bwb/backends.vcl";
sub vcl_recv {
if (req.url ~ "/fancy/") {...
Step	
  2:	
  Introduce	
  new	
  Backend	
  
13	
  
<html>
<head>
<title>Legacy Web Application</title>
<link href="/fanc...
Step	
  2:	
  Introduce	
  new	
  Backend	
  
14	
  
Step	
  2:	
  Introduce	
  new	
  Backend	
  
15	
  
Step	
  3:	
  Connect	
  the	
  Applica5ons	
  with	
  ESI	
  
16	
  
Step	
  3:	
  Connect	
  the	
  Applica5ons	
  with	
  ESI	
  
17	
  
<body>
<!-- Old Navigation HTML was removed!-->
<esi...
Step	
  3:	
  Connect	
  the	
  Applica5ons	
  with	
  ESI	
  
18	
  
<div class="container newsbox">
<h1>News</h1>
<div>r...
Step	
  3:	
  Connect	
  the	
  Applica5ons	
  with	
  ESI	
  
19	
  
Step	
  3:	
  Connect	
  the	
  Applica5ons	
  with	
  ESI	
  
20	
  
Step	
  4:	
  Simple	
  balancing	
  between	
  two	
  backends	
  
21	
  
Step	
  4:	
  Simple	
  balancing	
  between	
  two	
  backends	
  
22	
  
backend default { … }
backend fancy_1 {
.host =...
Step	
  4:	
  Simple	
  balancing	
  between	
  two	
  backends	
  
23	
  
include "bwb/backends.vcl";
include "bwb/direct...
Step	
  4:	
  Simple	
  balancing	
  between	
  two	
  backends	
  
24	
  
192.168.56.5 - -
[28/Sep/2013:19:51:57 +0200]
"...
Want	
  to	
  know	
  more?	
  
25	
  
Bernd.Loeffeld@magicinternet.de	
  
hCp://www.myvideo.de/karriere	
  
Work	
  with	
...
Upcoming SlideShare
Loading in...5
×

Varnish more than a cache

565

Published on

An introduction into the features of the Varnish cache and an example for that.

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
565
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
14
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Varnish more than a cache"

  1. 1. 1   Varnish  –  More  than  a  cache   Bernd Löffeld Head of Platform Development Magic Internet GmbH Email: Bernd.Loeffeld@magicinternet.de Magic Internet entwickelt und betreut www.myvideo.de Deutschlands großes Videoportal!
  2. 2. Varnish  Features   2   o  Caching   o  Loadbalancing  and  Backend-­‐Selec3on   o  Header  analysis  and  manipula3on   o  DSL  for  handling  all  that   o  Edge  Side  Includes  
  3. 3. Varnish  Subrou5nes   3  
  4. 4. Varnish  Configura5on  Language  in  example   4   sub vcl_recv {! if (req.restarts == 0) {! if (req.http.x-forwarded-for) {! set req.http.X-Forwarded-For =! req.http.X-Forwarded-For + ", " + client.ip;! } else {! set req.http.X-Forwarded-For = client.ip;! }! }! if (req.request != "GET" &&! req.request != "HEAD" &&! req.request != "PUT" &&! req.request != "POST" &&! req.request != "TRACE" &&! req.request != "OPTIONS" &&! req.request != "DELETE") {! return (pipe);! }! if (req.request != "GET" && req.request != "HEAD") {! /* We only deal with GET and HEAD by default */! return (pass);! }! if (req.http.Authorization || req.http.Cookie) {! return (pass);! }! return (lookup);! }!
  5. 5. The  Setup  –  A  vision  by  now   5  
  6. 6. Start:  Just  a  simple  Web  Applica5on   6  
  7. 7. Start:  Just  a  simple  Web  Applica5on   7  
  8. 8. Step  1:  Ac5vate  the  cache   8  
  9. 9. Step  1:  Ac5vate  the  cache   9   include "bwb/backends.vcl“; Varnish à /etc/varnish/main.vcl backend default { .host = "nginx-1"; .port = "80"; } Varnish à /etc/varnish/bwb/backends.vcl server { expires 1m; } nginx-1 à /etc/nginx/sites-available/bwb
  10. 10. Step  1:  Ac5vate  the  cache   10  
  11. 11. Step  2:  Introduce  new  Backend   11  
  12. 12. Step  2:  Introduce  new  Backend   12   include "bwb/backends.vcl"; sub vcl_recv { if (req.url ~ "/fancy/") { set req.backend = fancy; } } Varnish à /etc/varnish/main.vcl backend default { .host = "nginx-1"; .port = "80"; } backend fancy { .host = "nginx-2"; .port = "80"; } Varnish à /etc/varnish/bwb/backends.vcl
  13. 13. Step  2:  Introduce  new  Backend   13   <html> <head> <title>Legacy Web Application</title> <link href="/fancy/css/default.css" rel="stylesheet" type="text/css" media="all" /> </head> ... nginx-1 à /srv/www/bwb/page1.html
  14. 14. Step  2:  Introduce  new  Backend   14  
  15. 15. Step  2:  Introduce  new  Backend   15  
  16. 16. Step  3:  Connect  the  Applica5ons  with  ESI   16  
  17. 17. Step  3:  Connect  the  Applica5ons  with  ESI   17   <body> <!-- Old Navigation HTML was removed!--> <esi:include src="/fancy/nav/navigation.html" /> <h1>Just a robust and experienced application</h1> <div>Page 1 is mostly empty.</div> <esi:include src="/fancy/news/abox.html" /> </body> nginx-1 à /srv/www/bwb/page1.html include "bwb/backends.vcl"; sub vcl_recv { if (req.url ~ "/fancy/") { set req.backend = fancy; } } sub vcl_fetch { set beresp.do_esi = true; } Varnish à /etc/varnish/main.vcl
  18. 18. Step  3:  Connect  the  Applica5ons  with  ESI   18   <div class="container newsbox"> <h1>News</h1> <div>really hot new stuff to read</div> </div> nginx-2 à /srv/www/bwb-fancy/fancy/news/abox.html server { ... location /fancy/news/ { expires 10s; } } nginx-2 à /etc/nginx/sites-available/bwb-fancy
  19. 19. Step  3:  Connect  the  Applica5ons  with  ESI   19  
  20. 20. Step  3:  Connect  the  Applica5ons  with  ESI   20  
  21. 21. Step  4:  Simple  balancing  between  two  backends   21  
  22. 22. Step  4:  Simple  balancing  between  two  backends   22   backend default { … } backend fancy_1 { .host = "nginx-2"; .port = "80"; } backend fancy_2 { .host = "nginx-3"; .port = "80"; } varnish à /etc/varnish/bwb/backends.vcl director fancy_round round-robin { { .backend = fancy_1; } { .backend = fancy_2; } } Varnish à /etc/varnish/bwb/director.vcl
  23. 23. Step  4:  Simple  balancing  between  two  backends   23   include "bwb/backends.vcl"; include "bwb/director.vcl"; sub vcl_recv { if(req.url ~ "/fancy/") { set req.backend = fancy_round; } } varnish à /etc/varnish/main.vcl
  24. 24. Step  4:  Simple  balancing  between  two  backends   24   192.168.56.5 - - [28/Sep/2013:19:51:57 +0200] "GET /fancy/news/abox.html HTTP/1.1" 200 100 “ 192.168.56.5 - - [28/Sep/2013:19:52:28 +0200] "GET /fancy/news/abox.html HTTP/1.1" 200 100 “ 192.168.56.5 - - [28/Sep/2013:19:52:51 +0200] "GET /fancy/news/abox.html HTTP/1.1" 200 100 “ 192.168.56.5 - - [28/Sep/2013:19:53:17 +0200] "GET /fancy/news/abox.html HTTP/1.1" 200 100 access-log nginx-1 192.168.56.5 - - [28/Sep/2013:19:52:14 +0200] "GET /fancy/news/abox.html HTTP/1.1" 200 100 “ 192.168.56.5 - - [28/Sep/2013:19:52:39 +0200] "GET /fancy/news/abox.html HTTP/1.1" 200 100 “ 192.168.56.5 - - [28/Sep/2013:19:53:05 +0200] "GET /fancy/news/abox.html HTTP/1.1" 200 100 “ 192.168.56.5 - - [28/Sep/2013:19:53:31 +0200] "GET /fancy/news/abox.html HTTP/1.1" 200 100 access-log nginx-2
  25. 25. Want  to  know  more?   25   Bernd.Loeffeld@magicinternet.de   hCp://www.myvideo.de/karriere   Work  with  us!   o  Architect   o  Developer   o  Sysadmin  
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×