SlideShare ist ein Scribd-Unternehmen logo
Performance durch Caching

Fabrizio Branca
System Developer bei AOE media



Mail:      mail (at) fabrizio (minus) branca (dot) de
Twitter:   @fbrnc
Blog:      http://www.fabrizio-branca.de
Agenda


                          Reverse Proxy
  Ein-    Probleme und
                            Caching
führung   Optimierungen
                           mit Varnish
Agenda


                          Reverse Proxy
  Ein-    Probleme und
                            Caching
führung   Optimierungen
                           mit Varnish
Funktionsweise Cache

                 Mage::app()->getCacheInstance()
                 Mage_Core_Model_Cache


                 Mage::app()->getCache() oder
                 Mage::app()->getCacheInstance()->getFrontend()
                 Varien_Cache_Core




… extends
Zend_Cache_Backend
Two-Level Cache
        Mehr Details:
        http://www.fabrizio-branca.de/magento-caching-internals.html
Agenda


                          Reverse Proxy
  Ein-    Probleme und
                            Caching
führung   Optimierungen
                           mit Varnish
Alte Cache-Einträge entfernen




• Problem: Abgelaufene Cache-Einträge werden
  nicht gelöscht und sammeln sich an.
• Je größer der Cache, desto langsamer der
  Zugriff
Alte Cache-Einträge entfernen
• Lösung: Regelmäßig Cache aufräumen
 Mage::app()->getCache()->clean(Zend_Cache::CLEANING_MODE_OLD);

• Modul: Aoe_CacheCleaner
 http://www.fabrizio-branca.de/magento-automatic-cache-
 cleaner.html
• Github:
 https://github.com/fbrnc/Aoe_CacheCleaner
Alte Cache-Einträge entfernen
Alte Cache-Einträge entfernen
Probleme im Database Cache Backend:
• Fehlerhaftes SQL
  – Einige „?“ fehlen
• Tags werden nicht gelöscht
  – In 0.8.22 wurde ein Foreign-Key eingefügt, der die
    Tags „on delete“ löscht. In 0.8.27 wurde der Key
    wieder entfernt.
• Patch:
 https://gist.github.com/971318
Problem: Tag-Basiertes Löschen
• Wird innerhalb Magento sehr oft verwendet
• Wird vom APC Backend nicht unterstützt
• Kann extrem lange dauern, wenn das File
  Backend verwendet wird.
  – Lösung: Cache-Commands abfangen, in eine
    Queue schreiben und asynchron abarbeiten.
  – Beschleunigt außerdem auch den Import-
    Vorgang
  – http://www.fabrizio-branca.de/magento-
    asynchronous-cache.html
  – https://github.com/fbrnc/Aoe_AsyncCache
Bug: 1st-Level Cache Priorität
Bug: 1st-Level Cache Priorität
Bug: 1st-Level Cache Priorität
                                                            $priority = 10
class Varien_Cache_Core extends Zend_Cache_Core {
    […]
    public function save($data, $id = null, $tags = array(),
    $specificLifetime = false, $priority = 8) {
        $tags = $this->_tags($tags);
        return parent::save($data, $id, $tags, $specificLifetime, $priority);
    }
    […]
}



class Zend_Cache_Backend_TwoLevels […] {

    private function _getFastLifetime($lifetime, $priority, $maxLifetime = null) {
        […]
        $fastLifetime = (int) ($lifetime / (11 - $priority));
        […]
        return $fastLifetime;
    }

}
Bug: 1st-Level Cache Priorität




• Patch:
 https://gist.github.com/971320
Weitere Probleme
• Fast cache wird immer neu geschrieben
  auto_refresh_fast_cache = true
  => auto_refresh_fast_cache = false
• Kann inzwischen konfiguriert werden (default: false)


• Verzeichnistiefe des File Cache
  hashed_directory_level = 1
  => hashed_directory_level = 3


• APC-Parameter (Größe, apc.stat, apc.ttl)
  http://www.fabrizio-branca.de/wenn-der-apc-cache-
  volllaeuft.html
Agenda


                          Reverse Proxy
  Ein-    Probleme und
                            Caching
führung   Optimierungen
                           mit Varnish
Reverse proxy caching




              Request

Browser                  Magento
                         (Apache + PHP + Mysql)
              Response
Reverse proxy caching




Browser      Varnish    Magento
                        (Apache + PHP + Mysql)
Reverse proxy caching




Browser        Nginx              Varnish   Magento
                                            (Apache + PHP + Mysql)



          -Verschlüsselung /
          Entschlüsselung (SSL)
          -Kompression
Reverse proxy caching




Browser   Nginx   Varnish   Magento
                            (Apache + PHP + Mysql)
Varnish


   HTTP         Caching         Load     Failover
Accelerator   Reverse Proxy   Balancer   system




       „Varnish makes websites fly“
Varnish
• Entwickelt von Poul-Henning Kamp
• Varnish Configuration Language (VCL)
  – DSL, wird intern in C Code übersetzt und
    dann compiliert
• Varnish überlässt die Thread- und
  Speicherverwaltung dem Betriebssystem
• Weitere Tools: varnishtop, varnishlog,…
• Online-Dokumentation:
  http://www.varnish-cache.org/docs/2.1/
Installation
• In Ubuntu:
sudo apt-get install varnish
sudo vi /etc/default/varnish
START=yes
sudo /etc/init.d varnish start
• Wird in Zukunft automatisch gestartet
• Läuft per default auf Port 6081
• Verwendet per default 127.0.0.1:8080 als
  Backend
• /etc/varnish/default.vcl
Request Lifecycle (vereinfacht)




                Kompletter Workflow: http://www.varnish-cache.org/trac/wiki/VCLExampleDefault
Cachebare Seiten
•   cms_index_index (Startseite)
•   cms_page_view (CMS Seiten)
•   catalog_product_view (Produkt-Singleviews)
•   catalog_category_view (Produkt-Listen)
(Muss ggf. an die Anforderungen und Besonderheiten des Shops angepasst
   werden)



                                                aller Page-Requests
                                                (geschätzt)
Performance durch Caching
Dynamische
(benutzerspezifische)
      Inhalte
Platzhalter für dynamische Teile
<layout>
   <default>
      <reference name="right">

         <block type="core/text" name="ph_cart" before="-">
            <action method="setText"><param><![CDATA[
               <div id="cart_sidebar" class="placeholder"
               rel="cart_sidebar">Placeholder Cart</div>
            ]]></param></action>
         </block>

         <action method="unsetChild"><param>cart_sidebar</param></action>

      </reference>
   </default>
</layout>
Modul „Aoe_Static“
• Sendet HTTP Header um Varnish zu
  steuern.
• Bindet JavaScript ein, das die
  dynamischen Inhalte holt und die
  Platzhalter ersetzt.
• Controller, der die dynamischen Inhalte
  ausliefert.
• https://github.com/fbrnc/Aoe_Static
• https://github.com/fbrnc/Aoe_StaticDemo
Ablauf cachebare Seiten
 Browser                                    Varnish                                     Magento

           Seite anfordern (HTTP Request)
                                                               Seite anfordern


                                                       Statische Seite wird ausgeliefert.
                   Statische Seite wird                Platzhalter für dynamische Teile.
                       ausgeliefert                          Cache-Control Header
      Seite wird
      gerendert
                            Ajax Request fordert dynamische Inhalte an
                           und übermittelt gerade angesehenes Produkt



                                JSON Response mit dynamischen Inhalten

      Platzhalter werden ersetzt
      Session Cookie wird geschrieben
Ablauf nicht-cachebare Seiten
 Browser                                    Varnish                     Magento

           Seite anfordern (HTTP Request)
                                                      Seite anfordern




               Seite wird ausgeliefert

      Seite wird
      gerendert
VCL
sub vcl_recv {
    if (req.http.x-forwarded-for) {
        set req.http.X-Forwarded-For =
        req.http.X-Forwarded-For ", " client.ip;
    } else {
        set req.http.X-Forwarded-For = client.ip;
    }
    if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT"
        && req.request != "POST" && req.request != "TRACE"
        && req.request != "OPTIONS" && req.request != "DELETE") {
        /* Non-RFC2616 or CONNECT which is weird. */
        return (pipe);
    }
    if (req.request != "GET" && req.request != "HEAD") {
        /* We only deal with GET and HEAD by default */
        return (pass);
    }
    if (req.http.Authorization || req.http.Cookie) {
        /* Not cacheable by default */
        return (pass);
    }
    return (lookup);
}
VCL

sub vcl_hash {
    set req.hash += req.url;
    if (req.http.host) {
        set req.hash += req.http.host;
    } else {
        set req.hash += server.ip;
    }
    return (hash);
}
VCL
sub vcl_fetch {
    if (beresp.status == 302 || beresp.status == 301 || beresp.status == 418) {
        return (pass);
    }

    if (beresp.http.aoestatic == "cache") {
        remove beresp.http.Set-Cookie;
        remove beresp.http.X-Cache;
        remove beresp.http.Server;
        remove beresp.http.Age;
        set beresp.grace = 2m;
        set beresp.http.X_AOESTATIC_FETCH = "Removed cookie in vcl_fetch";
    }

    if (!beresp.cacheable) {
        return (pass);
    }

    return (deliver);
}
VCL


sub vcl_deliver {
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
        set resp.http.Server = "Varnish (HIT)";
    } else {
        set resp.http.X-Cache = "MISS";
        set resp.http.Server = "Varnish (MISS)";
    }
}
Demo
Benchmarks                                  416,67
                                           Seiten/Sekunde




          0,85                2,4
                          Seiten/Sekunde
       Seiten/Sekunde


        Magento          Magento mit        Magento
       ohne Cache       APC+File Cache     mit Varnish
Erweitert
• Anstatt AJAX:
  Edge Side Includes „ESI“ (W3C)
 <esi:include src="phone/call/getBlock/id/cart_sidebar" />
  – Nachteil: langsamer, aufwendiger

• Caching dynamischer Inhalte unter
  Berücksichtigung der Session-Id
  – Nachteil: weniger Cache Hits

• „Purge“ um geänderte Inhalte zu
  aktualisieren
Weitere Informationen
• Varnish (inkl. Dokumentation)
  http://www.varnish-cache.org
• Poul-Henning Kamp über Varnish
  http://vimeo.com/16676188

• http://www.fabrizio-branca.de
• https://github.com/fbrnc
Fragen?



Mail:      mail (at) fabrizio (minus) branca (dot) de
Twitter:   @fbrnc
Blog:      http://www.fabrizio-branca.de

Weitere ähnliche Inhalte

PDF
High Performance Multi-Server Magento in der Cloud
 
PDF
Performance durch Caching
 
PDF
Query Result Caching
PDF
Datenbankoptimierung
PDF
Auszug Seminarunterlagen "Tomcat 6.x"
PPTX
Dockerize It - Mit apex in die amazon cloud
PDF
Campixx 2012-ladezeit-extreme
KEY
Varnish PHP Unconference Hamburg 2012
High Performance Multi-Server Magento in der Cloud
 
Performance durch Caching
 
Query Result Caching
Datenbankoptimierung
Auszug Seminarunterlagen "Tomcat 6.x"
Dockerize It - Mit apex in die amazon cloud
Campixx 2012-ladezeit-extreme
Varnish PHP Unconference Hamburg 2012

Was ist angesagt? (15)

PDF
Web-Performance-Optimierung mit varnish
PPTX
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
PDF
Webanwendungen mit Apache HBase entwickeln
PDF
Web-Performance-Optimierung mit varnish
PDF
What is new in xen Server
PDF
Tipps und Skripts aus dem Leben eines Connections Admins
PPTX
Wordpress on steroids
PDF
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
PDF
JBoss AS / EAP Clustering
PDF
JBoss EAP clustering
PDF
DOAG: NoSQL with MySQL
PDF
Caching in Hibernate
PDF
Startups in „Die Höhle der Löwen“ - SEODAY 2016
PDF
Caching - Hintergründe, Patterns und Best Practices
PDF
Exadata with VM as Consolidation Plattform
Web-Performance-Optimierung mit varnish
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Webanwendungen mit Apache HBase entwickeln
Web-Performance-Optimierung mit varnish
What is new in xen Server
Tipps und Skripts aus dem Leben eines Connections Admins
Wordpress on steroids
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
JBoss AS / EAP Clustering
JBoss EAP clustering
DOAG: NoSQL with MySQL
Caching in Hibernate
Startups in „Die Höhle der Löwen“ - SEODAY 2016
Caching - Hintergründe, Patterns und Best Practices
Exadata with VM as Consolidation Plattform
Anzeige

Ähnlich wie Performance durch Caching (20)

PDF
Performance durch Caching
PDF
Performance durch Caching
PDF
Typo3 und Varnish
PDF
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
ODP
Frontend Performance
PDF
Speedup your site mit Caching
PPTX
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
PDF
HTML5 Storage
PDF
High Performance Multi-Server Magento in der Cloud
PDF
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
PDF
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
PDF
PDF
Offline-Strategien für HTML5 Web Applikationen - bedcon13
PDF
HTML5 und node.js Grundlagen
PDF
Fanstatic pycon.de 2012
PDF
JavaScript Performance
ODP
Caching in PHP - Status Quo
PDF
Hdc2012 cordova-präsi
ODP
Ajax hands on - Refactoring Google Suggest
PPTX
Microservices mit Rust
Performance durch Caching
Performance durch Caching
Typo3 und Varnish
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
Frontend Performance
Speedup your site mit Caching
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
HTML5 Storage
High Performance Multi-Server Magento in der Cloud
HTML5 im Überblick - semantisches HTML, Geolocation, Offline-Webanwendungen, ...
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Offline-Strategien für HTML5 Web Applikationen - bedcon13
HTML5 und node.js Grundlagen
Fanstatic pycon.de 2012
JavaScript Performance
Caching in PHP - Status Quo
Hdc2012 cordova-präsi
Ajax hands on - Refactoring Google Suggest
Microservices mit Rust
Anzeige

Mehr von AOE (20)

PDF
Multithreaded XML Import (San Francisco Magento Meetup)
 
PDF
rock-solid TYPO3 development with continuous integration and deployment
 
PDF
Agile Management - Best Practice Day der Deutschen Bahn am 17.10.2013
 
PDF
Continuous Quality Assurance using Selenium WebDriver
 
PDF
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
 
PDF
SONY on TYPO3 - Rapid Global CMS Deployment
 
PDF
The typo3.org Relaunch Project
 
PDF
Searchperience Indexierungspipeline
 
PDF
Selenium 2 for PHP(Unit)
 
PDF
Angrybirds Magento Cloud Deployment
 
PDF
T3DD12 Caching with Varnish
 
PDF
T3DD12 community extension
 
PDF
Performance measurement and tuning
 
PDF
Domain Driven Design
 
PDF
Debugging, Monitoring and Profiling in TYPO3
 
PDF
Panasonic search
 
PPT
Open Source CMS TYPO3 at Cisco WebEx
 
PDF
Case Study NDD Distribution on TYPO3
 
PDF
Monier Enterprise Web CMS Global Relaunch
 
PDF
Hankook Tire Europe TYPO3 Implementation
 
Multithreaded XML Import (San Francisco Magento Meetup)
 
rock-solid TYPO3 development with continuous integration and deployment
 
Agile Management - Best Practice Day der Deutschen Bahn am 17.10.2013
 
Continuous Quality Assurance using Selenium WebDriver
 
Magento Imagine 2013: Fabrizio Branca - Learning To Fly: How Angry Birds Reac...
 
SONY on TYPO3 - Rapid Global CMS Deployment
 
The typo3.org Relaunch Project
 
Searchperience Indexierungspipeline
 
Selenium 2 for PHP(Unit)
 
Angrybirds Magento Cloud Deployment
 
T3DD12 Caching with Varnish
 
T3DD12 community extension
 
Performance measurement and tuning
 
Domain Driven Design
 
Debugging, Monitoring and Profiling in TYPO3
 
Panasonic search
 
Open Source CMS TYPO3 at Cisco WebEx
 
Case Study NDD Distribution on TYPO3
 
Monier Enterprise Web CMS Global Relaunch
 
Hankook Tire Europe TYPO3 Implementation
 

Performance durch Caching

  • 1. Performance durch Caching Fabrizio Branca System Developer bei AOE media Mail: mail (at) fabrizio (minus) branca (dot) de Twitter: @fbrnc Blog: http://www.fabrizio-branca.de
  • 2. Agenda Reverse Proxy Ein- Probleme und Caching führung Optimierungen mit Varnish
  • 3. Agenda Reverse Proxy Ein- Probleme und Caching führung Optimierungen mit Varnish
  • 4. Funktionsweise Cache Mage::app()->getCacheInstance() Mage_Core_Model_Cache Mage::app()->getCache() oder Mage::app()->getCacheInstance()->getFrontend() Varien_Cache_Core … extends Zend_Cache_Backend
  • 5. Two-Level Cache Mehr Details: http://www.fabrizio-branca.de/magento-caching-internals.html
  • 6. Agenda Reverse Proxy Ein- Probleme und Caching führung Optimierungen mit Varnish
  • 7. Alte Cache-Einträge entfernen • Problem: Abgelaufene Cache-Einträge werden nicht gelöscht und sammeln sich an. • Je größer der Cache, desto langsamer der Zugriff
  • 8. Alte Cache-Einträge entfernen • Lösung: Regelmäßig Cache aufräumen Mage::app()->getCache()->clean(Zend_Cache::CLEANING_MODE_OLD); • Modul: Aoe_CacheCleaner http://www.fabrizio-branca.de/magento-automatic-cache- cleaner.html • Github: https://github.com/fbrnc/Aoe_CacheCleaner
  • 10. Alte Cache-Einträge entfernen Probleme im Database Cache Backend: • Fehlerhaftes SQL – Einige „?“ fehlen • Tags werden nicht gelöscht – In 0.8.22 wurde ein Foreign-Key eingefügt, der die Tags „on delete“ löscht. In 0.8.27 wurde der Key wieder entfernt. • Patch: https://gist.github.com/971318
  • 11. Problem: Tag-Basiertes Löschen • Wird innerhalb Magento sehr oft verwendet • Wird vom APC Backend nicht unterstützt • Kann extrem lange dauern, wenn das File Backend verwendet wird. – Lösung: Cache-Commands abfangen, in eine Queue schreiben und asynchron abarbeiten. – Beschleunigt außerdem auch den Import- Vorgang – http://www.fabrizio-branca.de/magento- asynchronous-cache.html – https://github.com/fbrnc/Aoe_AsyncCache
  • 12. Bug: 1st-Level Cache Priorität
  • 13. Bug: 1st-Level Cache Priorität
  • 14. Bug: 1st-Level Cache Priorität $priority = 10 class Varien_Cache_Core extends Zend_Cache_Core { […] public function save($data, $id = null, $tags = array(), $specificLifetime = false, $priority = 8) { $tags = $this->_tags($tags); return parent::save($data, $id, $tags, $specificLifetime, $priority); } […] } class Zend_Cache_Backend_TwoLevels […] { private function _getFastLifetime($lifetime, $priority, $maxLifetime = null) { […] $fastLifetime = (int) ($lifetime / (11 - $priority)); […] return $fastLifetime; } }
  • 15. Bug: 1st-Level Cache Priorität • Patch: https://gist.github.com/971320
  • 16. Weitere Probleme • Fast cache wird immer neu geschrieben auto_refresh_fast_cache = true => auto_refresh_fast_cache = false • Kann inzwischen konfiguriert werden (default: false) • Verzeichnistiefe des File Cache hashed_directory_level = 1 => hashed_directory_level = 3 • APC-Parameter (Größe, apc.stat, apc.ttl) http://www.fabrizio-branca.de/wenn-der-apc-cache- volllaeuft.html
  • 17. Agenda Reverse Proxy Ein- Probleme und Caching führung Optimierungen mit Varnish
  • 18. Reverse proxy caching Request Browser Magento (Apache + PHP + Mysql) Response
  • 19. Reverse proxy caching Browser Varnish Magento (Apache + PHP + Mysql)
  • 20. Reverse proxy caching Browser Nginx Varnish Magento (Apache + PHP + Mysql) -Verschlüsselung / Entschlüsselung (SSL) -Kompression
  • 21. Reverse proxy caching Browser Nginx Varnish Magento (Apache + PHP + Mysql)
  • 22. Varnish HTTP Caching Load Failover Accelerator Reverse Proxy Balancer system „Varnish makes websites fly“
  • 23. Varnish • Entwickelt von Poul-Henning Kamp • Varnish Configuration Language (VCL) – DSL, wird intern in C Code übersetzt und dann compiliert • Varnish überlässt die Thread- und Speicherverwaltung dem Betriebssystem • Weitere Tools: varnishtop, varnishlog,… • Online-Dokumentation: http://www.varnish-cache.org/docs/2.1/
  • 24. Installation • In Ubuntu: sudo apt-get install varnish sudo vi /etc/default/varnish START=yes sudo /etc/init.d varnish start • Wird in Zukunft automatisch gestartet • Läuft per default auf Port 6081 • Verwendet per default 127.0.0.1:8080 als Backend • /etc/varnish/default.vcl
  • 25. Request Lifecycle (vereinfacht) Kompletter Workflow: http://www.varnish-cache.org/trac/wiki/VCLExampleDefault
  • 26. Cachebare Seiten • cms_index_index (Startseite) • cms_page_view (CMS Seiten) • catalog_product_view (Produkt-Singleviews) • catalog_category_view (Produkt-Listen) (Muss ggf. an die Anforderungen und Besonderheiten des Shops angepasst werden) aller Page-Requests (geschätzt)
  • 29. Platzhalter für dynamische Teile <layout> <default> <reference name="right"> <block type="core/text" name="ph_cart" before="-"> <action method="setText"><param><![CDATA[ <div id="cart_sidebar" class="placeholder" rel="cart_sidebar">Placeholder Cart</div> ]]></param></action> </block> <action method="unsetChild"><param>cart_sidebar</param></action> </reference> </default> </layout>
  • 30. Modul „Aoe_Static“ • Sendet HTTP Header um Varnish zu steuern. • Bindet JavaScript ein, das die dynamischen Inhalte holt und die Platzhalter ersetzt. • Controller, der die dynamischen Inhalte ausliefert. • https://github.com/fbrnc/Aoe_Static • https://github.com/fbrnc/Aoe_StaticDemo
  • 31. Ablauf cachebare Seiten Browser Varnish Magento Seite anfordern (HTTP Request) Seite anfordern Statische Seite wird ausgeliefert. Statische Seite wird Platzhalter für dynamische Teile. ausgeliefert Cache-Control Header Seite wird gerendert Ajax Request fordert dynamische Inhalte an und übermittelt gerade angesehenes Produkt JSON Response mit dynamischen Inhalten Platzhalter werden ersetzt Session Cookie wird geschrieben
  • 32. Ablauf nicht-cachebare Seiten Browser Varnish Magento Seite anfordern (HTTP Request) Seite anfordern Seite wird ausgeliefert Seite wird gerendert
  • 33. VCL sub vcl_recv { if (req.http.x-forwarded-for) { set req.http.X-Forwarded-For = req.http.X-Forwarded-For ", " client.ip; } else { set req.http.X-Forwarded-For = client.ip; } if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE") { /* Non-RFC2616 or CONNECT which is weird. */ return (pipe); } if (req.request != "GET" && req.request != "HEAD") { /* We only deal with GET and HEAD by default */ return (pass); } if (req.http.Authorization || req.http.Cookie) { /* Not cacheable by default */ return (pass); } return (lookup); }
  • 34. VCL sub vcl_hash { set req.hash += req.url; if (req.http.host) { set req.hash += req.http.host; } else { set req.hash += server.ip; } return (hash); }
  • 35. VCL sub vcl_fetch { if (beresp.status == 302 || beresp.status == 301 || beresp.status == 418) { return (pass); } if (beresp.http.aoestatic == "cache") { remove beresp.http.Set-Cookie; remove beresp.http.X-Cache; remove beresp.http.Server; remove beresp.http.Age; set beresp.grace = 2m; set beresp.http.X_AOESTATIC_FETCH = "Removed cookie in vcl_fetch"; } if (!beresp.cacheable) { return (pass); } return (deliver); }
  • 36. VCL sub vcl_deliver { if (obj.hits > 0) { set resp.http.X-Cache = "HIT"; set resp.http.Server = "Varnish (HIT)"; } else { set resp.http.X-Cache = "MISS"; set resp.http.Server = "Varnish (MISS)"; } }
  • 37. Demo
  • 38. Benchmarks 416,67 Seiten/Sekunde 0,85 2,4 Seiten/Sekunde Seiten/Sekunde Magento Magento mit Magento ohne Cache APC+File Cache mit Varnish
  • 39. Erweitert • Anstatt AJAX: Edge Side Includes „ESI“ (W3C) <esi:include src="phone/call/getBlock/id/cart_sidebar" /> – Nachteil: langsamer, aufwendiger • Caching dynamischer Inhalte unter Berücksichtigung der Session-Id – Nachteil: weniger Cache Hits • „Purge“ um geänderte Inhalte zu aktualisieren
  • 40. Weitere Informationen • Varnish (inkl. Dokumentation) http://www.varnish-cache.org • Poul-Henning Kamp über Varnish http://vimeo.com/16676188 • http://www.fabrizio-branca.de • https://github.com/fbrnc
  • 41. Fragen? Mail: mail (at) fabrizio (minus) branca (dot) de Twitter: @fbrnc Blog: http://www.fabrizio-branca.de