bephpug - varnish & co

Post on 22-Oct-2014

4084 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

01.06.2010 - http://wiki.pooteeweet.org/BEPHPUG/

Transcript

bephpughttp://www.bephpug.de

1Freitag, 13. Mai 2011

varnish & coFlorian Holzhauer - @fholzhauerVortrag bephpug Juni 2010http://holzhauer.it

2Freitag, 13. Mai 2011

Disclaimer

„Bauchentscheidungen“

nicht totoptimiert

Aufwand / Nutzen

Es gibt meistens mehr als eine Lösung

lighttpd, nginx, $webserver

XCache, APC, eAccelerator

3Freitag, 13. Mai 2011

Überblick

Problem: LAMP-Maschine unter Last

varnish

Standard-Administration

fancy features

Optimierung für Faule: xCache, tuning-primer.sh

4Freitag, 13. Mai 2011

Beispiel: lawblog.de

Kein „echtes“ Kundenprojekt, trotzdem viel Last

Guter Kontakt, alle Adminfreiheiten

Testbed für neue Tools

Sehr gutes Besucher-Feedback

Klassische L(A)MP-Anwendung: Wordpress, Lighttpd, MySQL, PHP.

5Freitag, 13. Mai 2011

PerformanceschweinWordpress

stadt-bremerhaven.de

6Freitag, 13. Mai 2011

lawblog.de: 2005

„Wahnsinn, 3.000 Besucher an einem Tag!“

..und dann kam Spiegel Online

Load > 70, lokale Konsole tot

Apache 1.3, Wordpress 1.5, nichts optimiert

7Freitag, 13. Mai 2011

Schnapsidee: Blacklist

Viele Bots, Crawler, komische Scripte

wget -m http://www.lawblog.de/

„Offline lesen“ (...)

Idee: Automatisiert die Top-5-Traffic-erzeuger jeden Monat in die Blacklist.

8Freitag, 13. Mai 2011

Super Plan.

b3091322.crawl.yahoo.net ist übrigens inzwischen seit Monaten Traffic-Platz 1..

9Freitag, 13. Mai 2011

lawblog.de: 2010300.000 Hits pro Tag

busybox httpd/1.35 varnish 2.1 + lighttpd

Eigener Server bei vollmar.net

10Freitag, 13. Mai 2011

Aktuelles Setup

pound

varnish lighttpd php-fcgi

greensql*

mysql

wp_cache

XCache

monit

munin

11Freitag, 13. Mai 2011

varnish

Reverse Proxy

„Squid is 1975 architecture, varnish 2006“

http://varnish-cache.org/wiki/ArchitectNotes

„One varnish doing about 4320 million req/day, peaks at 8K reqs/s.

This particular varnishbox is a HP Proliant BL460c G1 2XDualcore 2.66 Ghz with 6 GB of RAM.Running Centos5.3. Only tuning is /var/lib/varnish on tmpfs“

(Aus: varnish-misc Mailingliste)

12Freitag, 13. Mai 2011

varnish: Features

VCL - Configlanguage

Loadbalancing with health checking of backends

Partial ESI support

URL rewriting

Graceful handling of dead backends

13Freitag, 13. Mai 2011

Varnish: Konzept

14Freitag, 13. Mai 2011

Varnish: VCL

sub vcl_fetch { if (req.url ~ "^/index.php/archives/200") { set beresp.http.Cache-Control = "max-age=1000"; set beresp.ttl = 600s; unset beresp.http.set-cookie; return (deliver); } if (req.url ~ "^/$") { set beresp.http.Cache-Control = "max-age=30"; set beresp.ttl = 15s; unset beresp.http.set-cookie; return (deliver); } if (req.url ~ "\.(png|gif|jpg|swf|css|js)$") { set beresp.http.Cache-Control = "max-age=14400"; set beresp.ttl = 1w; unset beresp.http.set-cookie; return (deliver); }

15Freitag, 13. Mai 2011

Varnish: VCL

TTL und Co für die jeweilige Seite anpassen

Alter Content darf länger in den Cache

Grafiken: welche ändern sich oft, welche nie?

vcl_hash: „Was ist der selbe Request“

16Freitag, 13. Mai 2011

Varnish: VCL

In VCL programs, C program code can be put anywhere, simply by enclosing it in C{ ... }C

sub vcl_fetch { if (req.url ~ "^/something-special") { C{! ! syslog(LOG_ERR, "Spurious response from backend: xid %s request %s %s \"%s\" %d \"%s\" \"%s\"", VRT_r_req_xid(sp), VRT_r_req_request(sp), VRT_GetHdr(sp, HDR_REQ, "\005host:"), VRT_r_req_url(sp), VRT_r_obj_status(sp), VRT_r_obj_response(sp), VRT_GetHdr(sp, HDR_OBJ, "\011Location:"));! }C }

17Freitag, 13. Mai 2011

Varnish: ESISeitenteile getrennt cachen

z.B. „Widgets“

nicht alle ESI Featuresindex.html:<HTML><BODY>The time is: <esi:include src="/cgi-bin/date.cgi"/> at this very moment.</BODY></HTML>

config:sub vcl_fetch { if (req.url == "/index.html") { esi; /* Do ESI processing */ set obj.ttl = 24 h; } elseif (req.url == "/cgi-bin/date.cgi") { set obj.ttl = 1m; }}

18Freitag, 13. Mai 2011

Varnish: Load balancing

Health Polling

Kaputtes Backend = „auslassen“

Backendwahl: Random, Round-Robin

..oder via VCL

19Freitag, 13. Mai 2011

Varnish: Backend tricks

Neuen Content abholen während alter noch ausgeliefert wird

Defektes Backend: Interne TTL hochdrehen („grace“)

Gestaltbare Fehlermeldung

„Der Webserver wird einer Wartung unterzogen. Etwas Geduld.“

20Freitag, 13. Mai 2011

Varnish: Purge

Content explizit invalidieren

Über Telnet-Schnittstelle oder Console-Tool

Auch Wildcards

Optional: HTTP Purge Requests

Das Webscript kann selbst Updates triggern

21Freitag, 13. Mai 2011

Advanced Features

varnish-misc Mailingliste

Unterschiedliche Behandlung von Mobilclients

sticky load balancing

Mehrere Varnish-Instanzen

22Freitag, 13. Mai 2011

Varnish: Tut nicht

HTTPS

Cookies

„eigene“ Content-Modifikationen

Logfiles

23Freitag, 13. Mai 2011

Varnish: HTTPS

varnish spricht nur plain http

„Fix“: Pound oder Stunnel davor

Problem: $_SERVER[„HTTPS“];

Problem: $_SERVER[„REMOTE_ADDR“];

24Freitag, 13. Mai 2011

Varnish: Cookies

Philosophie: „nur nicht personalisierte Seiten cachen“

Workaround: unset beresp.http.set-cookie;

25Freitag, 13. Mai 2011

Varnish: Content Modifikationen

Varnish „interessiert“ Seiten-Content nie

ausser ESI

Nur Header-Modifikationen

in beide Richtungen

26Freitag, 13. Mai 2011

Varnish: logfiles

Varnish hat sehr gute Debuggingtools

aber: Log nur in shared memory, wird nicht geschrieben

„Fix“: varnishncsa

Liest shared memory, schreibt nach Apache-format-Log

27Freitag, 13. Mai 2011

varnish: 2.1

Bei Howtos aufpassen:

varnish 2.1 ist an verschiedenen Stellen mit anderer Syntax

pre-2.1-Config lassen sich nicht immer starten

machen seltsame Dinge

Änderung: req heisst nun beresp

28Freitag, 13. Mai 2011

Varnish: Tools

varnishhist

Geschwindigkeits-Histogramm

varnishstat

„top“ für varnish

varnishlog

zeigt/filtert shared memory log

29Freitag, 13. Mai 2011

varnish: Quick‘n dirty

Webserver von Port 80 wegziehen

vi /etc/default/varnish

varnish auf Port 80

vi /etc/varnish/default.vcl

backend anpassen: Webserver-IP und -Port

Starten, fertig.

30Freitag, 13. Mai 2011

Bonustrack: Monit

varnish war früher wacklig

Bei Wartungsdowntime nicht vergessen :-)

Monit checkt alle n Minuten die Prozesse

/etc/monit/conf.d/varnishcheck process varnish with pidfile /var/run/varnishd.pidstart program = "/etc/init.d/varnish start"stop program = "/etc/init.d/varnish stop"if totalmem > 1024.0 MB for 5 cycles then restartif loadavg(5min) greater than 10 for 8 cycles then stopif 3 restarts within 5 cycles then timeout

31Freitag, 13. Mai 2011

Bonustrack: MuninWiggly lines!

Rudimentäres Tresholdmonitoring, nagios-Anbindung

32Freitag, 13. Mai 2011

Wiggly linesWas bringt varnish eigentlich?

komplett aus

komplett annur / und feeds

33Freitag, 13. Mai 2011

Wiggly lines II

34Freitag, 13. Mai 2011

Genug varnish.

35

pound

varnish lighttpd php-fcgi

greensql*

mysql

wp_cache

XCache

monit

munin

Freitag, 13. Mai 2011

pound

Kann Loadbalancing

mit Session Handling

Kann bis auf caching viel was varnish auch kann

HTTP Sanitizing

Bei mir: Reiner HTTPS->HTTP Wrapper

36Freitag, 13. Mai 2011

wp_cache

Wordpressplugin

Schreibt gerenderte Seite nach HTML

Neugeneration via wp-event-handler

„Müsste man mal:“

wp_cache triggert Purge-Request bei varnish

37Freitag, 13. Mai 2011

wp_cache

Kann auch via .htaccess bzw lighty-lua direkt auf HTML, kein PHP-Interpreter mehr im Spiel

Nur noch historisch anwesender „Fallback“, bringt wegen varnish nur wenig Geschwindigkeit

38Freitag, 13. Mai 2011

XCache: Opcode

PHP Opcode Caching

Unbedingt Default-Config „aufbohren“

Web-Interface hilft

39Freitag, 13. Mai 2011

XCache: varcache

Kann auch varcache

„memcached für arme“

Weniger Features, aber dafür ein Daemon weniger

Obskure Race-Conditions bei Wordpress

40Freitag, 13. Mai 2011

MySQL „Tuning“

Halbe „Wissenschaft“

Gute Literatur

Aber: Oft reicht auch die faule Variante

..und ich bin gern faul :-)

http://www.day32.com/MySQL/

tuning_primer.sh

41Freitag, 13. Mai 2011

tuning_primer.sh

Braucht „bc“

MySQLd sollte mindestens 24 Stunden laufen

sh ./tuning_primer.sh

„Übersetzt“ MySQL-Status-Variablen

Read-Only

Nicht einfach blind übernehmen

42Freitag, 13. Mai 2011

tuning_primer.sh

43Freitag, 13. Mai 2011

GreenSQL

„MySQL-Firewall“

Hängt vor dem MySQLd

Versucht Injections zu erkennen

learning mode

„Risk score“

SELECT ... WHERE user=x AND password=y OR 1

44Freitag, 13. Mai 2011

GreenSQL

Snake Oil?

„dann brauchen wir ja im Code nicht mehr validieren“

Eher: Letzte Rettung bei Wordpress 0-days

Wenn der Proof of Concept Exploit nicht tut, geht das Scriptkidde vielleicht einfach weg

45Freitag, 13. Mai 2011

Caching

„Your mileage may vary“

Caching massiv Anwendungsspezifisch

Blind überall cachen bringt Ärger

Race Conditions

Redundante Datenhaltung

Cache purging?

46Freitag, 13. Mai 2011

Caching

Besser: Bottlenecks finden

PHP Profiling

Benchmarks

Ideal: Applikation braucht gar keinen Cache

47Freitag, 13. Mai 2011

Danke :-)

Fragen?

http://www.varnish-cache.org

http://www.apsis.ch/pound/

http://www.greensql.net

http://xcache.lighttpd.net/

48Freitag, 13. Mai 2011

Aktuelles Setup

pound

varnish lighttpd php-fcgi

greensql*

mysql

wp_cache

XCache

monit

munin

49Freitag, 13. Mai 2011

50Freitag, 13. Mai 2011

top related