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

OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

Embed Size (px)

Citation preview

Page 1: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Jede Sekunde zählt

Webbeschleuniger Varnish im Einsatz

Page 2: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Agenda Über snowflakeWieso HTTP Caching

Alternativen Funktionsweise

Über Varnish

Module & Integrationen

Page 3: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Über mich

Andri SteinerLeiter Hosting

Datacenter Automation

Varnishevangelist ☺

VW Bus SchrauberGleitschirmpilot

Page 4: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

snowflakekurz vorgestellt Gegründet 1999

Büros in Zürich, Bern und Luzern

VarnishHosting & Integrations-partner

Fokus auf Open Source Technologien und Weblösungen

rund 50 Mitarbeiter

Page 5: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Hosting

Service & Support

SchulungDesign

Beratung und Konzeption Umsetzung

snowflakekurz vorgestellt

Page 6: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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 / VarnishSoftware AS

kommerzieller Support,Zusatzmodule

2006: v12008: v22011: v3

Integrations-/Hosting-/Schulungs-Partner

Varnishkurz vorgestellt

Page 7: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Page 8: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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/sauf Desktop Hardware

1s Verzögerung-11% Besucher-16% Zufriedenh.-7% Verkäufe

Page 9: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Server entlastenweniger Server, kleinere Server

massive Kosten-einsparungen

von 14 auf 2 (1) Server

Page 10: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Weitere Vorteile Redundanz

DoS

Business Logik in VCL

sehr schnellsehr flexibel

geografische Verteilung Load Balancer

Lizenz

Page 11: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Softwarez.B. Squidlangsamerweniger flexibelkein SupportAlternativen

Hardwarez.B. BigIP

weniger flexibelsehr teuer

CDNsgut für reines HTTP CachingunflexibelVendor Lock-Insehr teuer

Caching auf Applikations-ebenelangsamerunflexibelAbhängigkeiten

Hardware

hohe Kostenkein/kleiner Geschwindigkeits-zuwachs

SSL Support

in den meisten Alternativen enthaltenNICHT in Varnish

Page 12: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

sub vcl_fetch {# Cache only GET or HEAD Requestsif (req.request != "GET" && req.request != "HEAD") {

return (hit_for_pass);}

# Cache static filesif (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 Pagesif (beresp.http.TYPO3­Pid && beresp.http.Pragma == "public") {

unset beresp.http.Set­Cookie;return (deliver);

}

# do not cache everything elsereturn (hit_for_pass);

}

FunktionsweiseHTTP reverse Proxy Server

Caching im RAM/Swap

sehr effiziente Programmierung

VCL

Varnish Configuration Language

Page 13: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

ESIEdge 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

Page 14: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Page 15: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Page 16: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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 Headerregular Expressions

Eingriff in jedem Status möglich

Page 17: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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 Requestsif (req.request != "GET" && req.request != "HEAD") {

return (pass);}

# Cache static Pagesif (beresp.http.TYPO3-Pid && beresp.http.Pragma == "public") {

unset beresp.http.Set-Cookie;return (deliver);

}}

Page 18: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

VCLBackend DirectorProbes

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;}

}

Page 19: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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 Handlingif (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);}

Page 20: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

VCLCookie Handling

sub vcl_recv {if (req.http.Cookie) {

# throw away Google Analytics Cookiesset req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *__utm[a-z]=[^;]+;? *", "\1");

# throw away Client related Cookiesset req.http.Cookie = regsuball(req.http.Cookie, "(^|; ) *client_[0-9a-zA-Z_]+=[^;]+;? *", "\1");

# throw away eID related Cookies on all non-eID related Requestif (!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;

}}

}

Page 21: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

VCLGrace Mode

sub vcl_recv {set req.grace = 6h;

}

sub vcl_fetch {set beresp.grace = 6h;

}

Page 22: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

VCLSaint Mode

sub vcl_fetch {

if (beresp.status >= 500 && req.request != "POST") { set beresp.saintmode = 10s; return(restart);

}

}

Page 23: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

VCLCache 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;

}}

Page 24: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Möglichkeiten

sauberes Backendwenig VCLCaching anhand HTTP Headerwenige - keine Ausnahmen

„schwieriges“ BackendHTTP Header in- konsistent„cache all but some“

keine Zeit, schnelle Implementation, Probleme lindern

Microcaching

Kombinationen

Page 25: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Möglichkeiten10 bestbesuchte Seiten

Weitere, wichtige Seiten

Integration vornehmen, weitere Seiten später anpassen

Ziele setzen, Kompromisse eingehen

Herausforderung: für sich richtige Strategie fest-legen

Page 26: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Logging shared Memorysehr mächtig,aber auch komplex

varnishstatvarnishtopvarnishlog

   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:12Hitrate ratio:       10      100      272Hitrate 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

Page 27: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Debugging 3rd Party Tools VAC/VCSeigene 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

Page 28: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

ModuleAdministration Console Custom Statistics Paywall

freie & kostenpflichtige Module

Page 29: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

VarnishAdministrationConsole

zentrales Kontrollzentrum echtzeit Grafiken

kontrolle mehrerer Server

Page 30: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

VarnishCustomStatistics echtzeit Daten

„Whats hot“

Ladezeiten

Cache hits/missVerursacher von Backend Hits

shared memory JSON API

Page 31: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

VarnishPaywall Zugriffskontrolle

Zeitungen MagazineIntranets

AbosMicropaymentMeteredusw.

Page 32: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

weitere ModuleMobile Device Detection API Acceleration Hashninja

weitere (freie und unfreie) unterhttps://www.varnish-cache.org/vmod

Page 33: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Integrationen TYPO3 Magento Wordpress

weitere ...

Page 34: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

TYPO3 IntegrationKISS / minimalinvasiv

sendet Cache Infos in eigenem Header an Varnish

sendet TYPO3 Cache Kommandos an Varnish

Dokumentation & Code auf GitHubhttps://github.com/snowflakech/typo3-varnish

Page 35: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Page 36: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

weitere Informationen

Communityhttps://www.varnish-cache.org/„varnish-misc“ Maillinglist

Kommerziellhttp://www.snowflake.ch/varnish/http://www.varnish-software.com/

nochmal sehen?https://speakerdeck.com/steinair

Page 37: OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz

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

Andri Steinersnowflake productions gmbhBruchstrasse 436003 Luzern

+41 58 680 32 [email protected]