Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

bephpug - varnish & co

4,239 views

Published on

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

Published in: Technology

bephpug - varnish & co

  1. 1. bephpug http://www.bephpug.de 1Freitag, 13. Mai 2011
  2. 2. varnish & co Florian Holzhauer - @fholzhauer Vortrag bephpug Juni 2010 http://holzhauer.it 2Freitag, 13. Mai 2011
  3. 3. Disclaimer „Bauchentscheidungen“ nicht totoptimiert Aufwand / Nutzen Es gibt meistens mehr als eine Lösung lighttpd, nginx, $webserver XCache, APC, eAccelerator 3Freitag, 13. Mai 2011
  4. 4. Überblick Problem: LAMP-Maschine unter Last varnish Standard-Administration fancy features Optimierung für Faule: xCache, tuning-primer.sh 4Freitag, 13. Mai 2011
  5. 5. 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
  6. 6. Performanceschwein Wordpress stadt-bremerhaven.de 6Freitag, 13. Mai 2011
  7. 7. 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
  8. 8. 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
  9. 9. Super Plan. b3091322.crawl.yahoo.net ist übrigens inzwischen seit Monaten Traffic-Platz 1.. 9Freitag, 13. Mai 2011
  10. 10. lawblog.de: 2010 300.000 Hits pro Tag busybox httpd/1.35 varnish 2.1 + lighttpd Eigener Server bei vollmar.net 10Freitag, 13. Mai 2011
  11. 11. Aktuelles Setup pound wp_cache varnish lighttpd php-fcgi XCache greensql* monit mysql munin 11Freitag, 13. Mai 2011
  12. 12. 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
  13. 13. varnish: Features VCL - Configlanguage Loadbalancing with health checking of backends Partial ESI support URL rewriting Graceful handling of dead backends 13Freitag, 13. Mai 2011
  14. 14. Varnish: Konzept 14Freitag, 13. Mai 2011
  15. 15. 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
  16. 16. 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
  17. 17. 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
  18. 18. Varnish: ESI Seitenteile getrennt cachen z.B. „Widgets“ nicht alle ESI Features index.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
  19. 19. Varnish: Load balancing Health Polling Kaputtes Backend = „auslassen“ Backendwahl: Random, Round-Robin ..oder via VCL 19Freitag, 13. Mai 2011
  20. 20. 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
  21. 21. 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
  22. 22. Advanced Features varnish-misc Mailingliste Unterschiedliche Behandlung von Mobilclients sticky load balancing Mehrere Varnish-Instanzen 22Freitag, 13. Mai 2011
  23. 23. Varnish: Tut nicht HTTPS Cookies „eigene“ Content-Modifikationen Logfiles 23Freitag, 13. Mai 2011
  24. 24. Varnish: HTTPS varnish spricht nur plain http „Fix“: Pound oder Stunnel davor Problem: $_SERVER[„HTTPS“]; Problem: $_SERVER[„REMOTE_ADDR“]; 24Freitag, 13. Mai 2011
  25. 25. Varnish: Cookies Philosophie: „nur nicht personalisierte Seiten cachen“ Workaround: unset beresp.http.set-cookie; 25Freitag, 13. Mai 2011
  26. 26. Varnish: Content Modifikationen Varnish „interessiert“ Seiten-Content nie ausser ESI Nur Header-Modifikationen in beide Richtungen 26Freitag, 13. Mai 2011
  27. 27. 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
  28. 28. 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
  29. 29. Varnish: Tools varnishhist Geschwindigkeits-Histogramm varnishstat „top“ für varnish varnishlog zeigt/filtert shared memory log 29Freitag, 13. Mai 2011
  30. 30. 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
  31. 31. Bonustrack: Monit varnish war früher wacklig Bei Wartungsdowntime nicht vergessen :-) Monit checkt alle n Minuten die Prozesse /etc/monit/conf.d/varnish check process varnish with pidfile /var/run/varnishd.pid start program = "/etc/init.d/varnish start" stop program = "/etc/init.d/varnish stop" if totalmem > 1024.0 MB for 5 cycles then restart if loadavg(5min) greater than 10 for 8 cycles then stop if 3 restarts within 5 cycles then timeout 31Freitag, 13. Mai 2011
  32. 32. Bonustrack: Munin Wiggly lines! Rudimentäres Tresholdmonitoring, nagios- Anbindung 32Freitag, 13. Mai 2011
  33. 33. Wiggly lines Was bringt varnish eigentlich? komplett aus nur / und feeds komplett an 33Freitag, 13. Mai 2011
  34. 34. Wiggly lines II 34Freitag, 13. Mai 2011
  35. 35. Genug varnish. pound wp_cache varnish lighttpd php-fcgi XCache greensql* monit mysql munin 35Freitag, 13. Mai 2011
  36. 36. 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
  37. 37. 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
  38. 38. 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
  39. 39. XCache: Opcode PHP Opcode Caching Unbedingt Default-Config „aufbohren“ Web-Interface hilft 39Freitag, 13. Mai 2011
  40. 40. 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
  41. 41. 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
  42. 42. 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
  43. 43. tuning_primer.sh 43Freitag, 13. Mai 2011
  44. 44. 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
  45. 45. 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
  46. 46. Caching „Your mileage may vary“ Caching massiv Anwendungsspezifisch Blind überall cachen bringt Ärger Race Conditions Redundante Datenhaltung Cache purging? 46Freitag, 13. Mai 2011
  47. 47. Caching Besser: Bottlenecks finden PHP Profiling Benchmarks Ideal: Applikation braucht gar keinen Cache 47Freitag, 13. Mai 2011
  48. 48. Danke :-) Fragen? http://www.varnish-cache.org http://www.apsis.ch/pound/ http://www.greensql.net http://xcache.lighttpd.net/ 48Freitag, 13. Mai 2011
  49. 49. Aktuelles Setup pound wp_cache varnish lighttpd php-fcgi XCache greensql* monit mysql munin 49Freitag, 13. Mai 2011
  50. 50. 50Freitag, 13. Mai 2011

×