Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

Andri Steiner
October 01, 2013
73

Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

OpenTuesday

Andri Steiner

October 01, 2013
Tweet

Transcript

  1. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 1 Jede Sekunde zählt Webbeschleuniger Varnish im Einsatz
  2. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 2 Agenda Über snowflake Wieso HTTP Caching Alternativen Funktionsweise Über Varnish Module & Integrationen
  3. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 3 Über mich Andri Steiner Leiter Hosting Datacenter Automation Varnish evangelist ☺ VW Bus Schrauber Gleitschirmpilot
  4. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 4 snowflake kurz vorgestellt Gegründet 1999 Büros in Zürich, Bern und Luzern Varnish Hosting & Integrations- partner Fokus auf Open Source Technologien und Weblösungen rund 50 Mitarbeiter
  5. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 5 Hosting Service & Support Schulung Design Beratung und Konzeption Umsetzung snowflake kurz vorgestellt
  6. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 6 2005: Idee @ Verdens Gang AS Poul-Henning Kamp BSD Lizenz Redpill Linpro / Varnish Software AS kommerzieller Support, Zusatzmodule 2006: v1 2008: v2 2011: v3 Integrations-/ Hosting-/ Schulungs- Partner Varnish kurz vorgestellt
  7. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 7 Wieso HTTP Caching Geschwindigkeit erhöhen Server entlasten Besucher- zufriedenheit steigern Kosten senken
  8. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 8 Geschwindigkeit erhöhen schnelle Seite glückliche Besucher Besucher- zufriedenheit steigern 250'000 req/s auf Desktop Hardware 1s Verzögerung -11% Besucher -16% Zufriedenh. -7% Verkäufe
  9. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 9 Server entlasten weniger Server, kleinere Server massive Kosten- einsparungen von 14 auf 2 (1) Server
  10. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 10 Weitere Vorteile Redundanz DoS Business Logik in VCL sehr schnell sehr flexibel geografische Verteilung Load Balancer Lizen z
  11. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 11 Software z.B. Squid langsamer weniger flexibel kein Support Alternativen Hardware z.B. BigIP weniger flexibel sehr teuer CDNs gut für reines HTTP Caching unflexibel Vendor Lock-In sehr teuer Caching auf Applikations- ebene langsamer unflexibel Abhängigkeiten Hardware hohe Kosten kein/kleiner Geschwindigkeits- zuwachs SSL Support in den meisten Alternativen enthalten NICHT in Varnish
  12. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 12 sub vcl_fetch { # Cache only GET or HEAD Requests if (req.request != "GET" && req.request != "HEAD") { return (hit_for_pass); } # Cache static files if (req.url ~ "^[^?]*\.(css|js|htc|txt|swf|flv|pdf|gif|jpe? g|png|ico|woff|ttf|eot|otf|xml|md5|json)($|\?)") { return (deliver); } # Cache static Pages if (beresp.http.TYPO3­Pid && beresp.http.Pragma == "public") { unset beresp.http.Set­Cookie; return (deliver); } # do not cache everything else return (hit_for_pass); } Funktionsweise HTTP reverse Proxy Server Caching im RAM/Swap sehr effiziente Programmierung VCL Varnish Configuration Language
  13. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 13 ESI Edge Side Includes „iframes“ werden von Varnish zusammengesetzt dynamischen und statischen Inhalt mischen kann Sinn machen, muss aber nicht <html> <body> <h1>Privater Bereich</h1> <esi:include src="/privat/" /> <h1>News</h1> <p>...</p> </body> </html> besser AJAX verwenden ESI Requests müssen sehr performant sein Debugging kompliziert
  14. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 14 HTTP Standards Serverseitiger HTTP reverse Proxy Server (früher: Clientseitig) alle nötigen Funktionen bereits spezifiziert keine Magie in Varnish Magie in VCL möglich, aber nicht zwingend nötig GET / POST richtig unterscheiden
  15. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 15 HTTP Standards - Cookies Cookies = Sessionabhängige Daten = kein Caching keine Cookies verwenden Cookies an bestimmte Domain oder Pfad binden in VCL umgehen
  16. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 16 VCL State Engine, wird zur Laufzeit zu C Code kompiliert HTTP Header regular Expressions Eingriff in jedem Status möglich
  17. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 17 VCL - Beispiele sub vcl_recv { # do not cache TYPO3 BE User requests (Preview) if (req.http.Cookie ~ "be_typo_user" || req.url ~ "^/typo3/") { return (pass); } } sub vcl_fetch { # Cache only GET or HEAD Requests if (req.request != "GET" && req.request != "HEAD") { return (pass); } # Cache static Pages if (beresp.http.TYPO3-Pid && beresp.http.Pragma == "public") { unset beresp.http.Set-Cookie; return (deliver); } }
  18. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 18 VCL Backend Director Probes backend default { .host = "10.10.10.10"; .probe = { .url = "/status.php"; .interval = 5s; .timeout = 1s; .window = 5; .threshold = 3; } } director b2 random { { .backend = b1; .weight = 1; } { .backend = b1; .weight = 7; } }
  19. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 19 VCL Hashing sub vcl_hash { hash_data(server.ip); hash_data(req.url); # Additional hashes on / only # used for server-side Browser/Language Handling if (req.url ~ "^/$") { # User-Agent (normalized in vcl_recv) hash_data(req.http.User-Agent); # Accept-Language (normalized in vcl_recv) hash_data(req.http.Accept-Language); } return (hash); }
  20. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 20 VCL Cookie Handling sub vcl_recv { if (req.http.Cookie) { # throw away Google Analytics Cookies set req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *__utm[a-z]=[^;]+;? *", "\1"); # throw away Client related Cookies set req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *client_[0-9a-zA-Z_]+=[^;]+;? *", "\1"); # throw away eID related Cookies on all non-eID related Request if (!req.url ~ "(\?|&)eID=[0-9a-zA-Z_-]+") { set req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *eID_[0-9a-zA-Z_]+=[^;]+;? *", "\1"); } if (req.http.Cookie == "") { remove req.http.Cookie; } } }
  21. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 21 VCL Grace Mode sub vcl_recv { set req.grace = 6h; } sub vcl_fetch { set beresp.grace = 6h; }
  22. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 22 VCL Saint Mode sub vcl_fetch { if (beresp.status >= 500 && req.request != "POST") { set beresp.saintmode = 10s; return(restart); } }
  23. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 23 VCL Cache Invalidation sub vcl_recv { if (req.request == "PURGE" && client.ip ~ purge) { return (lookup); } if(req.http.Varnish-Ban-TYPO3-Pid) { ban("obj.http.TYPO3-Pid == " + req.http.X-Header); } if (req.request == "REFRESH" && client.ip ~ purge) { set req.request = "GET"; set req.hash_always_miss = true; } }
  24. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 24 Möglichkeiten sauberes Backend wenig VCL Caching anhand HTTP Header wenige - keine Ausnahmen „schwieriges“ Backend HTTP Header in- konsistent „cache all but some“ keine Zeit, schnelle Implementation, Probleme lindern Microcaching Kombinationen
  25. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 25 Möglichkeiten 10 bestbesuchte Seiten Weitere, wichtige Seiten Integration vornehmen, weitere Seiten später anpassen Ziele setzen, Kompromisse eingehen Herausforderung: für sich richtige Strategie fest- legen
  26. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 26 Logging shared Memory sehr mächtig, aber auch komplex varnishstat varnishtop varnishlog 14 TxRequest ­ POST 14 TxURL ­ /index.php?eID=tx_portfolio_casestudy_list 14 TxProtocol ­ HTTP/1.1 14 TxHeader ­ Host: www.snowflake.ch 14 TxHeader ­ User­Agent: Mozilla/5.0 (X11; U; Linux x86_64; en­US; rv:1.9.1.16) Gecko/20121207 Iceweasel/3.5.16 (like Firefox/3.5.16) 14 TxHeader ­ Accept: application/json 14 TxHeader ­ Accept­Language: en­us,en;q=0.5 14 TxHeader ­ Accept­Charset: ISO­8859­1,utf­8;q=0.7,*;q=0.7 14 TxHeader ­ X­Requested­With: XMLHttpRequest 14 TxHeader ­ X­Request: JSON 14 TxHeader ­ Content­Type: application/x­www­form­urlencoded; charset=utf­8 14 TxHeader ­ Referer: http://www.snowflake.ch/referenzen/ 14 TxHeader ­ Content­Length: 683 14 TxHeader ­ Pragma: no­cache 14 TxHeader ­ Cache­Control: no­cache 14 TxHeader ­ X­Forwarded­For: 2a04:503:0:102:218:51ff:fece:60ac 14 TxHeader ­ X­Varnish: 1755445627 7+11:30:12 Hitrate ratio: 10 100 272 Hitrate avg: 0.7762 0.8143 0.8362 3014567 9.98 4.66 client_conn ­ Client connections accepted 6787583 10.98 10.50 client_req ­ Client requests received 5978620 8.98 9.25 cache_hit ­ Cache hits 721061 1.00 1.12 cache_miss ­ Cache misses 46086 0.00 0.07 backend_conn ­ Backend conn. success 923 0.00 0.00 backend_unhealthy ­ Backend conn. not attempted 57 0.00 0.00 backend_fail ­ Backend conn. failures 795413 2.00 1.23 backend_reuse ­ Backend conn. reuses 24213 0.00 0.04 backend_toolate ­ Backend conn. was closed 819658 2.00 1.27 backend_recycle ­ Backend conn. recycles 49 0.00 0.00 backend_retry ­ Backend conn. retry 4 0.00 0.00 fetch_head ­ Fetch head 235244 0.00 0.36 fetch_length ­ Fetch with Length 604798 2.00 0.94 fetch_chunked ­ Fetch chunked 1095 0.00 0.00 fetch_close ­ Fetch wanted close 3 0.00 0.00 fetch_failed ­ Fetch failed 292 0.00 0.00 fetch_304 ­ Fetch no body (304) 132 . . n_sess_mem ­ N struct sess_mem 38 . . n_sess ­ N struct sess 288452 . . n_object ­ N struct object
  27. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 27 Debugging 3rd Party Tools VAC/VCS eigene Scripts, z.B. Nagios Check # /usr/local/vzscripts/nagios­varnish Varnish OK: Running client_conn: 3016042 client_req: 6791127 client_drop: 0 cache_hit: 5981866 cache_hitpass: 0 cache_miss: 721433 backend_fail: 57 n_object: 288193 n_wrk_failed: 0 n_wrk_drop: 0 n_lru_nuked: 0 uptime: 646467
  28. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 28 Module Administration Console Custom Statistics Paywall freie & kostenpflichtige Module
  29. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 29 Varnish Administration Console zentrales Kontrollzentrum echtzeit Grafiken kontrolle mehrerer Server
  30. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 30 Varnish Custom Statistics echtzeit Daten „Whats hot“ Ladezeiten Cache hits/miss Verursacher von Backend Hits shared memory JSON API
  31. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 31 Varnish Paywall Zugriffskontrolle Zeitungen Magazine Intranets Abos Micropayment Metered usw.
  32. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 32 weitere Module Mobile Device Detection API Acceleration Hashninja weitere (freie und unfreie) unter https://www.varnish-cache.org/vmod
  33. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 33 Integrationen TYPO3 Magento Wordpress weitere ...
  34. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 34 TYPO3 Integration KISS / minimalinvasiv sendet Cache Infos in eigenem Header an Varnish sendet TYPO3 Cache Kommandos an Varnish Dokumentation & Code auf GitHub https://github.com/snowflakech/typo3-varnish
  35. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 35 snowflake & Varnish Hosting und Integrations- partner in Deutschland, Österreich und der Schweiz Betrieb, Implementation und Beratung Attraktive Bundlepreise
  36. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 36 weitere Informationen Community https://www.varnish-cache.org/ „varnish-misc“ Maillinglist Kommerziell http://www.snowflake.ch/varnish/ http://www.varnish-software.com/ nochmal sehen? https://speakerdeck.com/steinair
  37. snowflake | OpenTuesday - Jede Sekunde zählt: Webbeschleuniger Varnish im

    Einsatz, 01.10.2013 37 Andri Steiner snowflake productions gmbh Bruchstrasse 43 6003 Luzern +41 58 680 32 97 [email protected]