SlideShare ist ein Scribd-Unternehmen logo
bephpug
                   http://www.bephpug.de

                                     1
Freitag, 13. Mai 2011
varnish & co
                   Florian Holzhauer - @fholzhauer
                   Vortrag bephpug Juni 2010
                   http://holzhauer.it

                                               2
Freitag, 13. Mai 2011
Disclaimer
                    „Bauchentscheidungen“

                        nicht totoptimiert

                        Aufwand / Nutzen

                    Es gibt meistens mehr als eine Lösung

                        lighttpd, nginx, $webserver

                        XCache, APC, eAccelerator


                                             3
Freitag, 13. Mai 2011
Überblick

                    Problem: LAMP-Maschine unter Last

                    varnish

                        Standard-Administration

                        fancy features

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



                                            4
Freitag, 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.


                                              5
Freitag, 13. Mai 2011
Performanceschwein
                    Wordpress




                    stadt-bremerhaven.de
                                           6
Freitag, 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




                                             7
Freitag, 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.



                                               8
Freitag, 13. Mai 2011
Super Plan.




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




                                                          9
Freitag, 13. Mai 2011
lawblog.de: 2010
                    300.000 Hits pro Tag

                    busybox httpd/1.35 varnish 2.1 + lighttpd

                    Eigener Server bei vollmar.net




                                            10
Freitag, 13. Mai 2011
Aktuelles Setup

                        pound
                                                              wp_cache
                        varnish   lighttpd        php-fcgi
                                                               XCache
                                                  greensql*
                                                               monit
                                                   mysql
                                                               munin


                                             11
Freitag, 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)
                                             12
Freitag, 13. Mai 2011
varnish: Features

                    VCL - Configlanguage

                    Loadbalancing with health checking of backends

                    Partial ESI support

                    URL rewriting

                    Graceful handling of dead backends



                                          13
Freitag, 13. Mai 2011
Varnish: Konzept




                              14
Freitag, 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);
             }

                                               15
Freitag, 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“




                                           16
Freitag, 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
              }




                                             17
Freitag, 13. Mai 2011
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;
             }
         }

                                                  18
Freitag, 13. Mai 2011
Varnish: Load balancing

                    Health Polling

                        Kaputtes Backend = „auslassen“

                    Backendwahl: Random, Round-Robin

                        ..oder via VCL




                                           19
Freitag, 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.“


                                            20
Freitag, 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



                                             21
Freitag, 13. Mai 2011
Advanced Features

                    varnish-misc Mailingliste

                        Unterschiedliche Behandlung von Mobilclients

                        sticky load balancing

                        Mehrere Varnish-Instanzen




                                                22
Freitag, 13. Mai 2011
Varnish: Tut nicht

                    HTTPS

                    Cookies

                    „eigene“ Content-Modifikationen

                    Logfiles




                                         23
Freitag, 13. Mai 2011
Varnish: HTTPS

                    varnish spricht nur plain http

                    „Fix“: Pound oder Stunnel davor

                    Problem: $_SERVER[„HTTPS“];

                    Problem: $_SERVER[„REMOTE_ADDR“];




                                             24
Freitag, 13. Mai 2011
Varnish: Cookies


                    Philosophie: „nur nicht personalisierte Seiten
                    cachen“

                    Workaround: unset beresp.http.set-cookie;




                                            25
Freitag, 13. Mai 2011
Varnish: Content
                    Modifikationen

                    Varnish „interessiert“ Seiten-Content nie

                        ausser ESI

                    Nur Header-Modifikationen

                        in beide Richtungen




                                              26
Freitag, 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



                                             27
Freitag, 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


                                              28
Freitag, 13. Mai 2011
Varnish: Tools
                    varnishhist

                        Geschwindigkeits-Histogramm

                    varnishstat

                        „top“ für varnish

                    varnishlog

                        zeigt/filtert shared memory log


                                             29
Freitag, 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.


                                              30
Freitag, 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/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




                                                  31
Freitag, 13. Mai 2011
Bonustrack: Munin
                    Wiggly lines!

                    Rudimentäres Tresholdmonitoring, nagios-
                    Anbindung




                                          32
Freitag, 13. Mai 2011
Wiggly lines
                    Was bringt varnish eigentlich?

                                      komplett aus




                    nur / und feeds                  komplett an




                                                        33
Freitag, 13. Mai 2011
Wiggly lines II




                                34
Freitag, 13. Mai 2011
Genug varnish.

                        pound
                                                              wp_cache
                        varnish   lighttpd        php-fcgi
                                                               XCache
                                                  greensql*
                                                               monit
                                                   mysql
                                                               munin


                                             35
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



                                               36
Freitag, 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



                                            37
Freitag, 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




                                            38
Freitag, 13. Mai 2011
XCache: Opcode
                    PHP Opcode Caching

                    Unbedingt Default-Config „aufbohren“

                    Web-Interface hilft




                                          39
Freitag, 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



                                            40
Freitag, 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


                                                41
Freitag, 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


                                            42
Freitag, 13. Mai 2011
tuning_primer.sh




                               43
Freitag, 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



                                              44
Freitag, 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



                                             45
Freitag, 13. Mai 2011
Caching
                    „Your mileage may vary“

                        Caching massiv Anwendungsspezifisch

                    Blind überall cachen bringt Ärger

                        Race Conditions

                        Redundante Datenhaltung

                        Cache purging?


                                            46
Freitag, 13. Mai 2011
Caching

                    Besser: Bottlenecks finden

                        PHP Profiling

                        Benchmarks

                    Ideal: Applikation braucht gar keinen Cache




                                           47
Freitag, 13. Mai 2011
Danke :-)

                    Fragen?

                    http://www.varnish-cache.org

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

                    http://www.greensql.net

                    http://xcache.lighttpd.net/



                                            48
Freitag, 13. Mai 2011
Aktuelles Setup

                        pound
                                                              wp_cache
                        varnish   lighttpd        php-fcgi
                                                               XCache
                                                  greensql*
                                                               monit
                                                   mysql
                                                               munin


                                             49
Freitag, 13. Mai 2011
50
Freitag, 13. Mai 2011

Weitere ähnliche Inhalte

Ähnlich wie bephpug - varnish & co

Rails in Production - telewebber Architektur
Rails in Production - telewebber ArchitekturRails in Production - telewebber Architektur
Rails in Production - telewebber Architektur
Heiko Seebach
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
Sebastian Springer
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
Ulrich Krause
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
NETWAYS
 
Entwicklung in Open Source Projekten - MediaWiki
Entwicklung in Open Source Projekten - MediaWikiEntwicklung in Open Source Projekten - MediaWiki
Entwicklung in Open Source Projekten - MediaWiki
Johan
 
Sesam (APEX) Öffne Dich
Sesam (APEX) Öffne DichSesam (APEX) Öffne Dich
Sesam (APEX) Öffne Dich
Oliver Lemm
 
Einsteiger Workshop
Einsteiger WorkshopEinsteiger Workshop
Einsteiger Workshop
FunThomas424242
 
Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?
GFU Cyrus AG
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
AOE
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
AOE
 
Top 10 Internet Trends 2003
Top 10 Internet Trends 2003Top 10 Internet Trends 2003
Top 10 Internet Trends 2003
Jürg Stuker
 
Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"
schellsoft
 
Last- und Performancetesting
Last- und PerformancetestingLast- und Performancetesting
Last- und Performancetesting
Jürg Stuker
 
Wordpress on steroids
Wordpress on steroidsWordpress on steroids
Wordpress on steroids
Blogwerk AG
 
NEXT11, Puzzle pieces of our mobile web approach
NEXT11, Puzzle pieces of our mobile web approachNEXT11, Puzzle pieces of our mobile web approach
NEXT11, Puzzle pieces of our mobile web approach
wolframkriesing
 
JSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederJSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael Greifeneder
Christoph Pickl
 
Typo3 und Varnish
Typo3 und VarnishTypo3 und Varnish
Typo3 und Varnish
Oliver Thiele
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQL
FromDual GmbH
 

Ähnlich wie bephpug - varnish & co (20)

Rails in Production - telewebber Architektur
Rails in Production - telewebber ArchitekturRails in Production - telewebber Architektur
Rails in Production - telewebber Architektur
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 
NoSQL with MySQL
NoSQL with MySQLNoSQL with MySQL
NoSQL with MySQL
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
 
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
OSMC 2008 | Programmierung von Nagios-Plugins für NetApp Speichergeräte by In...
 
Entwicklung in Open Source Projekten - MediaWiki
Entwicklung in Open Source Projekten - MediaWikiEntwicklung in Open Source Projekten - MediaWiki
Entwicklung in Open Source Projekten - MediaWiki
 
WAC
WACWAC
WAC
 
Sesam (APEX) Öffne Dich
Sesam (APEX) Öffne DichSesam (APEX) Öffne Dich
Sesam (APEX) Öffne Dich
 
Einsteiger Workshop
Einsteiger WorkshopEinsteiger Workshop
Einsteiger Workshop
 
Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?Java oberflächlich betrachtet - Welche GUI ist die richtige?
Java oberflächlich betrachtet - Welche GUI ist die richtige?
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
 
Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
 
Top 10 Internet Trends 2003
Top 10 Internet Trends 2003Top 10 Internet Trends 2003
Top 10 Internet Trends 2003
 
Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"Auszug Seminarunterlagen "Tomcat 6.x"
Auszug Seminarunterlagen "Tomcat 6.x"
 
Last- und Performancetesting
Last- und PerformancetestingLast- und Performancetesting
Last- und Performancetesting
 
Wordpress on steroids
Wordpress on steroidsWordpress on steroids
Wordpress on steroids
 
NEXT11, Puzzle pieces of our mobile web approach
NEXT11, Puzzle pieces of our mobile web approachNEXT11, Puzzle pieces of our mobile web approach
NEXT11, Puzzle pieces of our mobile web approach
 
JSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederJSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael Greifeneder
 
Typo3 und Varnish
Typo3 und VarnishTypo3 und Varnish
Typo3 und Varnish
 
DOAG: NoSQL with MySQL
DOAG: NoSQL with MySQLDOAG: NoSQL with MySQL
DOAG: NoSQL with MySQL
 

bephpug - varnish & co

  • 1. bephpug http://www.bephpug.de 1 Freitag, 13. Mai 2011
  • 2. varnish & co Florian Holzhauer - @fholzhauer Vortrag bephpug Juni 2010 http://holzhauer.it 2 Freitag, 13. Mai 2011
  • 3. Disclaimer „Bauchentscheidungen“ nicht totoptimiert Aufwand / Nutzen Es gibt meistens mehr als eine Lösung lighttpd, nginx, $webserver XCache, APC, eAccelerator 3 Freitag, 13. Mai 2011
  • 4. Überblick Problem: LAMP-Maschine unter Last varnish Standard-Administration fancy features Optimierung für Faule: xCache, tuning-primer.sh 4 Freitag, 13. Mai 2011
  • 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. 5 Freitag, 13. Mai 2011
  • 6. Performanceschwein Wordpress stadt-bremerhaven.de 6 Freitag, 13. Mai 2011
  • 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 7 Freitag, 13. Mai 2011
  • 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. 8 Freitag, 13. Mai 2011
  • 9. Super Plan. b3091322.crawl.yahoo.net ist übrigens inzwischen seit Monaten Traffic-Platz 1.. 9 Freitag, 13. Mai 2011
  • 10. lawblog.de: 2010 300.000 Hits pro Tag busybox httpd/1.35 varnish 2.1 + lighttpd Eigener Server bei vollmar.net 10 Freitag, 13. Mai 2011
  • 11. Aktuelles Setup pound wp_cache varnish lighttpd php-fcgi XCache greensql* monit mysql munin 11 Freitag, 13. Mai 2011
  • 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) 12 Freitag, 13. Mai 2011
  • 13. varnish: Features VCL - Configlanguage Loadbalancing with health checking of backends Partial ESI support URL rewriting Graceful handling of dead backends 13 Freitag, 13. Mai 2011
  • 14. Varnish: Konzept 14 Freitag, 13. Mai 2011
  • 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); } 15 Freitag, 13. Mai 2011
  • 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“ 16 Freitag, 13. Mai 2011
  • 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 } 17 Freitag, 13. Mai 2011
  • 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; } } 18 Freitag, 13. Mai 2011
  • 19. Varnish: Load balancing Health Polling Kaputtes Backend = „auslassen“ Backendwahl: Random, Round-Robin ..oder via VCL 19 Freitag, 13. Mai 2011
  • 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.“ 20 Freitag, 13. Mai 2011
  • 21. Varnish: Purge Content explizit invalidieren Über Telnet-Schnittstelle oder Console-Tool Auch Wildcards Optional: HTTP Purge Requests Das Webscript kann selbst Updates triggern 21 Freitag, 13. Mai 2011
  • 22. Advanced Features varnish-misc Mailingliste Unterschiedliche Behandlung von Mobilclients sticky load balancing Mehrere Varnish-Instanzen 22 Freitag, 13. Mai 2011
  • 23. Varnish: Tut nicht HTTPS Cookies „eigene“ Content-Modifikationen Logfiles 23 Freitag, 13. Mai 2011
  • 24. Varnish: HTTPS varnish spricht nur plain http „Fix“: Pound oder Stunnel davor Problem: $_SERVER[„HTTPS“]; Problem: $_SERVER[„REMOTE_ADDR“]; 24 Freitag, 13. Mai 2011
  • 25. Varnish: Cookies Philosophie: „nur nicht personalisierte Seiten cachen“ Workaround: unset beresp.http.set-cookie; 25 Freitag, 13. Mai 2011
  • 26. Varnish: Content Modifikationen Varnish „interessiert“ Seiten-Content nie ausser ESI Nur Header-Modifikationen in beide Richtungen 26 Freitag, 13. Mai 2011
  • 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 27 Freitag, 13. Mai 2011
  • 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 28 Freitag, 13. Mai 2011
  • 29. Varnish: Tools varnishhist Geschwindigkeits-Histogramm varnishstat „top“ für varnish varnishlog zeigt/filtert shared memory log 29 Freitag, 13. Mai 2011
  • 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. 30 Freitag, 13. Mai 2011
  • 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 31 Freitag, 13. Mai 2011
  • 32. Bonustrack: Munin Wiggly lines! Rudimentäres Tresholdmonitoring, nagios- Anbindung 32 Freitag, 13. Mai 2011
  • 33. Wiggly lines Was bringt varnish eigentlich? komplett aus nur / und feeds komplett an 33 Freitag, 13. Mai 2011
  • 34. Wiggly lines II 34 Freitag, 13. Mai 2011
  • 35. Genug varnish. pound wp_cache varnish lighttpd php-fcgi XCache greensql* monit mysql munin 35 Freitag, 13. Mai 2011
  • 36. pound Kann Loadbalancing mit Session Handling Kann bis auf caching viel was varnish auch kann HTTP Sanitizing Bei mir: Reiner HTTPS->HTTP Wrapper 36 Freitag, 13. Mai 2011
  • 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 37 Freitag, 13. Mai 2011
  • 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 38 Freitag, 13. Mai 2011
  • 39. XCache: Opcode PHP Opcode Caching Unbedingt Default-Config „aufbohren“ Web-Interface hilft 39 Freitag, 13. Mai 2011
  • 40. XCache: varcache Kann auch varcache „memcached für arme“ Weniger Features, aber dafür ein Daemon weniger Obskure Race-Conditions bei Wordpress 40 Freitag, 13. Mai 2011
  • 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 41 Freitag, 13. Mai 2011
  • 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 42 Freitag, 13. Mai 2011
  • 43. tuning_primer.sh 43 Freitag, 13. Mai 2011
  • 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 44 Freitag, 13. Mai 2011
  • 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 45 Freitag, 13. Mai 2011
  • 46. Caching „Your mileage may vary“ Caching massiv Anwendungsspezifisch Blind überall cachen bringt Ärger Race Conditions Redundante Datenhaltung Cache purging? 46 Freitag, 13. Mai 2011
  • 47. Caching Besser: Bottlenecks finden PHP Profiling Benchmarks Ideal: Applikation braucht gar keinen Cache 47 Freitag, 13. Mai 2011
  • 48. Danke :-) Fragen? http://www.varnish-cache.org http://www.apsis.ch/pound/ http://www.greensql.net http://xcache.lighttpd.net/ 48 Freitag, 13. Mai 2011
  • 49. Aktuelles Setup pound wp_cache varnish lighttpd php-fcgi XCache greensql* monit mysql munin 49 Freitag, 13. Mai 2011