Accelerate your web app with a layer of Varnish

75 %
25 %
Information about Accelerate your web app with a layer of Varnish

Published on February 28, 2014

Author: jeremycook0



Slides from a talk given at Confoo in 2014 on the Varnish caching reverse proxy server.

Accelerate your app with a  layer of Varnish

Who? ● ● ● Ex-pat Englishman, now living in Southern Ontario. Web developer for 5 years, mostly PHP. (Almost) Senior Software Engineer at TribeHR. ● Co-organiser of Guelph PHP User Group. ● Ex-professional musician.

Varnish can do incredible  things for your app...

What is Varnish? ● ● Open source caching reverse proxy or HTTP accelerator. Mature software: – – ● Current version: 3.0.5 Varnish 4 currently in tech preview. Used by 5% (500) of the top 10,000 sites on the internet.

Varnish basics ● Listens on a port (normally 80). ● When a request arrives: – – ● If content is already in cache it is served directly. If not Varnish forwards the request to a 'backend' server, delivering the content when it is received. Only caches GET and HEAD requests.

Varnish features ● ● ● Can cache any kind of content delivered via HTTP. Blazingly fast with incredible performance. Support for multiple backends and basic load balancing.

Varnish features (cont) ● ● ● ● Configuration through Varnish Configuration Language (VCL). Support for Edge Side Includes (ESI). Behaviour can be extended through Varnish Mods (VMODs). Includes tools to monitor and tune (varnishtop, varnishlog, varnishhist, varnishstat, etc).

Show us the demo!

Apache results

Varnish Results

Is Varnish always the right  tool? ● What kind of content are you serving? ● Cookies. ● SSL. ● Varnish is like a layer of... varnish. ● Do you really need Varnish?

Getting started with Varnish

Setting cache times ● Two possible methods – – ● HTTP cache headers Directly in VCL Prefer HTTP cache headers wherever possible.

Supported OS's ● Fully supported: – – ● Linux FreeBSD 'Try not to break': – – OpenBSD – ● NetBSD OS X Needs a 64 bit OS ideally.

Installing Varnish ● Use system package manager. – ● ● For Debian, Ubuntu and RedHat/CentOS Varnish software maintains repositories with up to date versions. To obtain up to date version to install on non-core supported platforms compile from source. More info at the Varnish website.

Basic configuration ● ● Ships with an excellent, 'sane' default VCL configuration. To begin using Varnish: – Configure runtime options (/etc/default/varnish). – Add one or more backends to VCL file (/etc/varnish/default.vcl).

Adding VCL backends ● ● ● Must add at least one backend in VCL. If more than one, first will be the default. Backends can be grouped into 'directors' to apply load balancing.

Sample backend definition backend default { .host = ""; .port = "8080"; }

Advanced configuration

Introduction to VCL ● Provides a window into Varnish's state during the request/response cycle. ● Not a full programming language. ● C/Perl-like syntax. ● Compiled into a C shared object at runtime and loaded into Varnish.

VCL Subroutines ● ● Dispatched at different times in the request/response cycle. Each routine has default code: – Varnish appends this to the end of any code you add. – Can be short-circuited by using the return keyword. Be careful! ● Allowed return values documentation. ● You can also define your own.

VCL Subroutines (cont) ● vcl_init ● vcl_miss ● vcl_recv ● vcl_fetch ● vcl_pipe ● vcl_deliver ● vcl_pass ● vcl_error ● vcl_hash ● vcl_fini ● vcl_hit

VCL Processing Cycle

VCL Functions ● Functions Varnish makes available to you: – – regsub(str, regex, sub) – regsuball(str, regex, sub) – ban(ban expression) – ban_url(regex) (Deprecated) – purge() – ● hash_data(str) return() Also have set and unset keywords to manipulate variables and call to dispatch your own subroutines.

vcl_recv ● ● Called once the OS kernel has given the complete request to Varnish. Typical uses: – Set the backend to use. – Amend the request. – Add extra information to the request. – Force a bypass of cache lookups (pass or pipe).

vcl_fetch ● ● Called when a response is received from a backend, before it is considered for inclusion in the cache. Typical uses: – Amend or set a TTL. – Add or remove HTTP headers. – Detect errors (more later). – Turn on ESI processing.

Select a backend backend default { .host = ""; .port = "8080"; } backend bar { .host = ""; .port = "8080": } sub vcl_recv { if ( ~ "") { set req.backend = bar; } // etc }

Remove cookies sub vcl_recv { if (req.url !~ "^/admin/.*") { unset req.http.cookie; } } sub vcl_fetch { if (req.url !~ "^/admin/.*") { unset beresp.http.set-cookie; } }

Set default TTL sub vcl_fetch { if (! beresp.http.cache-control && beresp.http.content-type ~ "text/html| text/xml|application/json") { set beresp.ttl = 5m; } }

VMOD's ● Allow you to extend Varnish's features. ● Written in C. ● ● Community VMOD's at Examples: – Geo-IP lookup (BBC) – Query string normalisation – Memcache

Grace mode ● ● ● Graced content is an object that has expired but is kept in cache. Grace mode is when a graced object is used. When this can happen: – No healthy backends are available. – Deliver old content while fetching new content is pending.

Configuring grace sub vcl_recv { if (req.backend.healthy) { set req.grace = 30s; } else { set req.grace = 1h; } } sub vcl_fetch { set beresp.grace = 1h; }

Health checks backend foo { .host = ""; .port = "8080"; .max_connections = 10; .probe = { .url = "/test"; .interval = 5s; .timeout = 1s; .window = 5; .threshold = 3; } }

Saint mode ● ● ● Allows you to say that a backend is 'sick' for one url. Varnish will not make further requests to that backend for the url for the time specified. Gives you a chance to detect errors in responses.

Saint mode example sub vcl_fetch { if (beresp.status ~ “^5d{2}$”) { set beresp.saintmode = 10s; return(restart); } }

Edge Side Includes ● ● Allows different content on the same page to be cached for different times. Request flow: – – ● External request returns a page with special ESI tags in it. For each ESI tag Varnish issues a sub request which generates the content. Both 'master' and sub requests can be cached.

Configuring ESI's ● Done in vcl_fetch: – ● ● set beresp.do_esi = true; Need to configure app to support 'layouts' and 'components'. Various frameworks have support for ESI's.

ESI Example <!DOCTYPE html> <html> <head> <title>ESI example</title> </head> <body> <esi:include src="/route/to/content"/> </body> </html>

Thanks for listening! ● Varnish docs: ● Any questions? ● Feel free to contact me: – @JCook21 –

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

Accelerate your web app with a layer of Varnish |

Can your app quickly scale to handle massive traffic loads while retaining a fast response time? Varnish can help you to achieve this. We'll look at how ...
Read more

Varnish HTTP Cache — Varnish HTTP Cache

... we’re in the process of moving the Varnish Cache project to its own infrastructure. If you want to help out, ...
Read more

Using varnish as a http cache - Tutorials and Guides ...

Stacking Varnish + web server on small ... While you can balance and cache with Nginx or Varnish, you can't / don't ... Using varnish as a http ...
Read more

Layer - The power of messaging for every mobile and web ...

The power of messaging for every mobile and web product. Everything you need, ... For every app. ... Start building with Layer for free, ...
Read more

Oil Painting For Beginners: Tips and Techniques You Need ...

Oil painting for beginners doesn't ... Use paints that accelerate drying for the bottom layer In addition to ... and varnish if you want to ...
Read more

Varnish (software) - Wikipedia, the free encyclopedia

Varnish; Developer(s) ... Of the Top 10K sites in the web, ... Official commercial web site; Notes from the Architect "You're Doing It Wrong", ...
Read more

Features | Layar - Augmented Reality | Interactive Print ...

With the Layar Creator, you can enhance flyers, ... Web and social links, photo slideshows, ... allowing other apps to open and other advanced features.
Read more

rest - Best way to cache RESTful API results of GET calls ...

Best way to cache RESTful API results of ... like Varnish, I used Varnish for "usual" web ... On your block I saw that you're using Varnish ...
Read more

Improving the Performance of your HTML5 App - HTML5 Rocks

... stunningly visual apps with HTML5. Then when you ... Good for confirming your manipulations occur within the GPU layer. ... Users want web apps ...
Read more