Download - Performance durch Caching
![Page 1: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/1.jpg)
Performance durch Caching
Fabrizio BrancaSystem Developer bei AOE media
Mail: mail (at) fabrizio (minus) branca (dot) de
Twitter: @fbrnc
Blog: http://www.fabrizio-branca.de
![Page 2: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/2.jpg)
Ein-führung
Agenda
Probleme und Optimierungen
Reverse Proxy Caching
mit Varnish
![Page 3: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/3.jpg)
Ein-führung
Agenda
Probleme und Optimierungen
Reverse Proxy Caching
mit Varnish
![Page 4: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/4.jpg)
Funktionsweise Cache
Mage::app()->getCacheInstance()Mage_Core_Model_Cache
Mage::app()->getCache() oderMage::app()->getCacheInstance()->getFrontend()Varien_Cache_Core
… extendsZend_Cache_Backend
![Page 5: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/5.jpg)
Two-Level Cache
Mehr Details:http://www.fabrizio-branca.de/magento-caching-internals.html
![Page 6: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/6.jpg)
Ein-führung
Agenda
Probleme und Optimierungen
Reverse Proxy Caching
mit Varnish
![Page 7: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/7.jpg)
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
![Page 8: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/8.jpg)
• Lösung: Regelmäßig Cache aufräumenMage::app()->getCache()->clean(Zend_Cache::CLEANING_MODE_OLD);
• Modul: Aoe_CacheCleanerhttp://www.fabrizio-branca.de/magento-automatic-cache-
cleaner.html
• Github:https://github.com/fbrnc/Aoe_CacheCleaner
Alte Cache-Einträge entfernen
![Page 9: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/9.jpg)
Alte Cache-Einträge entfernen
![Page 10: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/10.jpg)
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
Alte Cache-Einträge entfernen
![Page 11: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/11.jpg)
• 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
Problem: Tag-Basiertes Löschen
![Page 12: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/12.jpg)
Bug: 1st-Level Cache Priorität
![Page 13: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/13.jpg)
Bug: 1st-Level Cache Priorität
![Page 14: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/14.jpg)
Bug: 1st-Level Cache Priorität
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;
}
}
$priority = 10
![Page 15: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/15.jpg)
Bug: 1st-Level Cache Priorität
• Patch:https://gist.github.com/971320
![Page 16: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/16.jpg)
• Fast cache wird immer neu geschriebenauto_refresh_fast_cache = true=> auto_refresh_fast_cache = false
• Kann inzwischen konfiguriert werden (default: false)
• Verzeichnistiefe des File Cachehashed_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
Weitere Probleme
![Page 17: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/17.jpg)
Ein-führung
Agenda
Probleme und Optimierungen
Reverse Proxy Caching
mit Varnish
![Page 18: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/18.jpg)
Reverse proxy caching
Browser Magento(Apache + PHP + Mysql)
Request
Response
![Page 19: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/19.jpg)
Reverse proxy caching
Browser Magento(Apache + PHP + Mysql)
Varnish
![Page 20: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/20.jpg)
Reverse proxy caching
Browser VarnishNginx Magento(Apache + PHP + Mysql)
-Verschlüsselung / Entschlüsselung (SSL)-Kompression
![Page 21: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/21.jpg)
Reverse proxy caching
Browser VarnishNginx Magento(Apache + PHP + Mysql)
![Page 22: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/22.jpg)
Varnish
HTTP Accelerator
Caching Reverse Proxy
LoadBalancer
Failover system
„Varnish makes websites fly“
![Page 23: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/23.jpg)
• 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/
Varnish
![Page 24: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/24.jpg)
• 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
Installation
![Page 25: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/25.jpg)
Request Lifecycle (vereinfacht)
Kompletter Workflow: http://www.varnish-cache.org/trac/wiki/VCLExampleDefault
![Page 26: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/26.jpg)
• 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)
Cachebare Seiten
aller Page-Requests(geschätzt)
![Page 27: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/27.jpg)
![Page 28: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/28.jpg)
Dynamische (benutzerspezifische)
Inhalte
![Page 29: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/29.jpg)
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>
![Page 30: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/30.jpg)
• 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
Modul „Aoe_Static“
![Page 31: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/31.jpg)
Ablauf cachebare Seiten
Seite anfordern (HTTP Request)
Statische Seite wird ausgeliefert
Seite anfordern
Statische Seite wird ausgeliefert.Platzhalter für dynamische Teile.
Cache-Control Header
Ajax Request fordert dynamische Inhalte anund übermittelt gerade angesehenes Produkt
JSON Response mit dynamischen Inhalten
Platzhalter werden ersetztSession Cookie wird geschrieben
Seite wird gerendert
Browser Varnish Magento
![Page 32: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/32.jpg)
Ablauf nicht-cachebare Seiten
Seite anfordern (HTTP Request)
Seite wird ausgeliefert
Seite anfordern
Seite wird gerendert
Browser Varnish Magento
![Page 33: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/33.jpg)
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);
}
![Page 34: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/34.jpg)
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);
}
![Page 35: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/35.jpg)
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);}
![Page 36: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/36.jpg)
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)";
}}
![Page 37: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/37.jpg)
Demo
![Page 38: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/38.jpg)
Benchmarks
Magentoohne Cache
0,85 Seiten/Sekunde
2,4 Seiten/Sekunde
416,67 Seiten/Sekunde
Magento mit APC+File Cache
Magentomit Varnish
![Page 39: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/39.jpg)
• 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
Erweitert
![Page 40: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/40.jpg)
• 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
Weitere Informationen
![Page 41: Performance durch Caching](https://reader033.vdocuments.net/reader033/viewer/2022052904/557d6841d8b42a30708b4579/html5/thumbnails/41.jpg)
Fragen?
Mail: mail (at) fabrizio (minus) branca (dot) de
Twitter: @fbrnc
Blog: http://www.fabrizio-branca.de