Slide 1

Slide 1 text

Varnish voor webbouwers Openminds TechTalk 6 juli 2011 Tuesday 11 October 2011

Slide 2

Slide 2 text

SOFTWARE Tuesday 11 October 2011

Slide 3

Slide 3 text

Varnish • Noorse tabloid Verdens Gang - 1.0 in 2006 - 3.0 enkele dagen terug • Snelheidswinst site: 10x - 300x • caching HTTP reverse proxy Tuesday 11 October 2011

Slide 4

Slide 4 text

normaal Server Client Internetlijn Datacentrum Tuesday 11 October 2011

Slide 5

Slide 5 text

klassieke proxy Server Client Trage Internetlijn Proxy Datacentrum Client Client Tuesday 11 October 2011

Slide 6

Slide 6 text

reverse proxy Server Proxy Snelle lijnen Datacentrum Client Client Client Tuesday 11 October 2011

Slide 7

Slide 7 text

reverse proxy Server Proxy Snelle lijnen Datacentrum Client Client Client Server Server Tuesday 11 October 2011

Slide 8

Slide 8 text

caching reverse proxy Server Caching Proxy Datacentrum Client Client Client Server Server Tuesday 11 October 2011

Slide 9

Slide 9 text

Waarom? •Serverbelasting omlaag •Veel snellere site-ervaring •Veel meer hits/s afwerken met zelfde hardware •Ademruimte voor serverhits Tuesday 11 October 2011

Slide 10

Slide 10 text

Tuesday 11 October 2011

Slide 11

Slide 11 text

Caching •Identieke aanvraag - identiek antwoord •We houden het volledige antwoord bij •Headers •Data (HTML) Tuesday 11 October 2011

Slide 12

Slide 12 text

Identieke aanvraag Identiek antwoord Tuesday 11 October 2011

Slide 13

Slide 13 text

Aanvraag GET / HTTP/1.1 Host: www.openminds.be User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0) Gecko/20100101 Firefox/5.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en,en-us;q=0.7,nl-be;q=0.3 Accept-Encoding: gzip, deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Connection: keep-alive Cookie: __utma=121817557.1268321880.1308719392.1309764385.1309861948.8; __utmz=121817557.1308719392.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _openminds_session=BAh7CToQX2NzcmZfdG9rZW4iMXBqNFJyS1RKRUxqNVpSNXBRb2R4N1RTN25GY1RSaVhKQVZscXR6alBqRU09 Og9zZXNzaW9uX2lkIiU3YzEwNjI4YjQ2ODhmMGE4OWE2NTRhYjU2ZmU1NTgxNyIMdXNlcl9pZGkKIgpmbGFzaElDOidBY3Rpb25Db25 0cm9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewY6C25vdGljZSIkWW91ciBwYWdlIGhhcyBiZWVuIHNhdmVkIGJlbG93LgY6CkB1c2Vkew Y7CFQ%3D--f8439d4c16ca7b72afebf9ae05f150700d6ee0e1; __utmc=121817557; __utmb=121817557.2.10.1309861948 Tuesday 11 October 2011

Slide 14

Slide 14 text

Aanvraag GET / HTTP/1.1 Host: www.openminds.be User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0) Gecko/20100101 Firefox/5.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en,en-us;q=0.7,nl-be;q=0.3 Accept-Encoding: gzip, deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Connection: keep-alive Cookie: __utma=121817557.1268321880.1308719392.1309764385.1309861948.8; __utmz=121817557.1308719392.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _openminds_session=BAh7CToQX2NzcmZfdG9rZW4iMXBqNFJyS1RKRUxqNVpSNXBRb2R4N1RTN25GY1RSaVhKQVZscXR6alBqRU09 Og9zZXNzaW9uX2lkIiU3YzEwNjI4YjQ2ODhmMGE4OWE2NTRhYjU2ZmU1NTgxNyIMdXNlcl9pZGkKIgpmbGFzaElDOidBY3Rpb25Db25 0cm9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewY6C25vdGljZSIkWW91ciBwYWdlIGhhcyBiZWVuIHNhdmVkIGJlbG93LgY6CkB1c2Vkew Y7CFQ%3D--f8439d4c16ca7b72afebf9ae05f150700d6ee0e1; __utmc=121817557; __utmb=121817557.2.10.1309861948 Tuesday 11 October 2011

Slide 15

Slide 15 text

Aanvraag •Host •URI (pad, method/verb, version) •Cookies •Encoding / compressie Tuesday 11 October 2011

Slide 16

Slide 16 text

Antwoord HTTP/1.1 200 OK Server: nginx/0.5.32 Date: Tue, 05 Jul 2011 10:52:36 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.2.15 Etag: "25ec477310b3f81f097d5f6f3b5824f6" X-Rack-Cache: stale, invalid, store X-Content-Digest: af41dfcde5cfeaa55717261890560d56595be969 X-Runtime: 2559 Cache-Control: max-age=300, public Age: 21 Set-Cookie: _openminds_session=BAh7CToQX2NzcmZfdG9rZW4iMXBqNFJyS1RKRUxqNVpSNXBRb2R4N1RTN25GY1RSaVhKQVZscXR6alBqRU09O g9zZXNzaW9uX2lkIiU3YzEwNjI4YjQ2ODhmMGE4OWE2NTRhYjU2ZmU1NTgxNyIMdXNlcl9pZGkKIgpmbGFzaElDOidBY3Rpb25Db250c m9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewY6C25vdGljZSIkWW91ciBwYWdlIGhhcyBiZWVuIHNhdmVkIGJlbG93LgY6CkB1c2VkewY7C FQ%3D--f8439d4c16ca7b72afebf9ae05f150700d6ee0e1; path=/; HttpOnly Content-Length: 11565 Status: 200 X-server: pro-005 X-Proxy: fosfor Tuesday 11 October 2011

Slide 17

Slide 17 text

Wat cachen? •Statische content (images, css, js, ...) •Hoofdpagina’s / hoofdpaden •Zoveel mogelijk •Versie per variatie bijhouden (encoding...) •GET/HEAD Tuesday 11 October 2011

Slide 18

Slide 18 text

Tuesday 11 October 2011

Slide 19

Slide 19 text

Wat niet cachen •admin/management secties •pagina’s die zich aanpassen aan user (logged in, winkelmandje, profielen, ...) •404 / 500 / ... •POST/PUT/DELETE Tuesday 11 October 2011

Slide 20

Slide 20 text

Cookies •Sessie - antwoord niet cachen •Google - doet er op zich niet toe •Variaties - antwoord wel cachebaar Tuesday 11 October 2011

Slide 21

Slide 21 text

Stel... •... dat de webapplicatie dit meegeeft •browser-cache hints worden gestuurd •meestal fout Tuesday 11 October 2011

Slide 22

Slide 22 text

Cache-Control HTTP/1.1 200 OK Server: nginx/0.5.32 Date: Tue, 05 Jul 2011 10:52:36 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.2.15 Etag: "25ec477310b3f81f097d5f6f3b5824f6" X-Rack-Cache: stale, invalid, store X-Content-Digest: af41dfcde5cfeaa55717261890560d56595be969 X-Runtime: 2559 Cache-Control: max-age=300, public Age: 21 Set-Cookie: _openminds_session=BAh7CToQX2NzcmZfdG9rZW4iMXBqNFJyS1RKRUxqNVpSNXBRb2R4N1RTN25GY1RSaVhKQVZscXR6alBqRU09O g9zZXNzaW9uX2lkIiU3YzEwNjI4YjQ2ODhmMGE4OWE2NTRhYjU2ZmU1NTgxNyIMdXNlcl9pZGkKIgpmbGFzaElDOidBY3Rpb25Db250c m9sbGVyOjpGbGFzaDo6Rmxhc2hIYXNoewY6C25vdGljZSIkWW91ciBwYWdlIGhhcyBiZWVuIHNhdmVkIGJlbG93LgY6CkB1c2VkewY7C FQ%3D--f8439d4c16ca7b72afebf9ae05f150700d6ee0e1; path=/; HttpOnly Content-Length: 11565 Status: 200 X-server: pro-005 X-Proxy: fosfor Tuesday 11 October 2011

Slide 23

Slide 23 text

Cache hints •max-age - eenvoudig (HTTP 1.1) •expires - zeer specifiek (HTTP 1.0) •“pragma: no-cache” •etags •... Tuesday 11 October 2011

Slide 24

Slide 24 text

Varnish manipuleert •Zowel aanvraag als antwoord •Strippen, herzetten, ... van velden •Cookies manipuleren •Cache-timings Tuesday 11 October 2011

Slide 25

Slide 25 text

Cache timings •De duur dat Varnish het zelf bijhoudt (varnish ttl) - bvb 24 uur •De duur dat een client het mag bijhouden (browser cache) - bvb 2 uur of 30 dagen Tuesday 11 October 2011

Slide 26

Slide 26 text

Een voorbeeld •Gewone, publieke site •Rails-applicatie met eigen CMS •Eenvoudige VDS •100Mbps •Eenvoudige varnish config (cache-control was correct) Tuesday 11 October 2011

Slide 27

Slide 27 text

Tuesday 11 October 2011

Slide 28

Slide 28 text

1 second cache •Pollers •100 tot 10000 polls per seconde •+/- timestamp terugsturen •zorgt voor 99 tot 9999 minder hits/s Tuesday 11 October 2011

Slide 29

Slide 29 text

1 second cache Tuesday 11 October 2011

Slide 30

Slide 30 text

Images •Hard forceren •Alle cookies strippen •Hogere cache-control zetten Tuesday 11 October 2011

Slide 31

Slide 31 text

Talen •Taal niet opslaan in sessie •Taal in cookie opslaan (language=nl) •Wordt een variatie voor Varnish •Homepagina voor Nederlands •Homepagina voor Frans Tuesday 11 October 2011

Slide 32

Slide 32 text

Anonieme cookies •Drupal 6 •Symfony •CakePHP •Rails •... Tuesday 11 October 2011

Slide 33

Slide 33 text

Admin interfaces •Volledig namespaced (/admin/...) •Andere url (admin.openminds.be) •Sessie-cookie verwijderen bij logout Tuesday 11 October 2011

Slide 34

Slide 34 text

Logged in users •Moeilijk! •Assets op andere hosts/url •Ajax ? •Partial caching van Varnish (advanced) Tuesday 11 October 2011

Slide 35

Slide 35 text

There are only two hard things in Computer Science: cache invalidation and naming things — Phil Karlton Tuesday 11 October 2011

Slide 36

Slide 36 text

Cache invalidation •Wat bij edit/put/post/... •eenvoudig: PURGE op juiste URL(s) •control channel •Drupal module •Lacquer gem •Purged de browser niet !!! Tuesday 11 October 2011

Slide 37

Slide 37 text

Webbouwers •Anonieme cookies nodig? •Admin sectie duidelijk •Variaties aantoonbaar (language-cookie bv) •Cache-control headers zijn belangrijk •Vooraf over nadenken Tuesday 11 October 2011

Slide 38

Slide 38 text

Kleine sites •Snelheid omhoog •Zijn meestal zeer statisch •Code mag zelfs iets minder performant dan •Purge kan volledig zijn Tuesday 11 October 2011

Slide 39

Slide 39 text

Grote projecten •Performantie •Beschikbaarheid •Kosten drukken (minder hardware) •Cache invalidation belangrijk Tuesday 11 October 2011

Slide 40

Slide 40 text

Opletten voor... •User-agent voor Mobile Device detection •Captcha (cookies voor images?) •X-Forwarded-For Tuesday 11 October 2011

Slide 41

Slide 41 text

Varnish niet voor •Grote downloads •Volledig getrackte sites (cookies) Tuesday 11 October 2011

Slide 42

Slide 42 text

Varnish extra’s •Grace timeout •Meerdere backends - loadbalancing / failover •Specifieke, partial caching Tuesday 11 October 2011

Slide 43

Slide 43 text

Uitrollen: dedicated •Eenvoudige opzet - laag voor webserver •Configuratie op maat •Verregaande manipulaties mogelijk •Op maat, contacteer ons Tuesday 11 October 2011

Slide 44

Slide 44 text

Uitrollen: shared •Algemene configuratie nodig •Conservatieve configuratie •Minimale manipulatie mogelijk •Openminds biedt het aan Tuesday 11 October 2011

Slide 45

Slide 45 text

Openminds varnish •Beta •Opt-in mechanisme •Gezonde defaults •IPv4 en IPv6 •Regels worden nog gecommuniceerd! Tuesday 11 October 2011

Slide 46

Slide 46 text

Q & A Tuesday 11 October 2011