Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Performance durch Caching

802 Aufrufe

Veröffentlicht am

May 18, 2011

Die Folien zum Vortrag "Performance durch Caching (Teil 2)" auf der Meet Magento #5 2011

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

Performance durch Caching

  1. 1. Performance durch CachingFabrizio BrancaSystem Developer bei AOE mediaMail: mail (at) fabrizio (minus) branca (dot) deTwitter: @fbrncBlog: http://www.fabrizio-branca.de
  2. 2. Ein-führungAgendaProbleme undOptimierungenReverse ProxyCachingmit Varnish
  3. 3. Ein-führungAgendaProbleme undOptimierungenReverse ProxyCachingmit Varnish
  4. 4. Funktionsweise CacheMage::app()->getCacheInstance()Mage_Core_Model_CacheMage::app()->getCache() oderMage::app()->getCacheInstance()->getFrontend()Varien_Cache_Core… extendsZend_Cache_Backend
  5. 5. Two-Level CacheMehr Details:http://www.fabrizio-branca.de/magento-caching-internals.html
  6. 6. Ein-führungAgendaProbleme undOptimierungenReverse ProxyCachingmit Varnish
  7. 7. Alte Cache-Einträge entfernen• Problem: Abgelaufene Cache-Einträge werdennicht gelöscht und sammeln sich an.• Je größer der Cache, desto langsamer derZugriff
  8. 8. • 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_CacheCleanerAlte Cache-Einträge entfernen
  9. 9. Alte Cache-Einträge entfernen
  10. 10. 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 dieTags „on delete“ löscht. In 0.8.27 wurde der Keywieder entfernt.• Patch:https://gist.github.com/971318Alte Cache-Einträge entfernen
  11. 11. • Wird innerhalb Magento sehr oft verwendet• Wird vom APC Backend nicht unterstützt• Kann extrem lange dauern, wenn das FileBackend verwendet wird.– Lösung: Cache-Commands abfangen, in eineQueue 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_AsyncCacheProblem: Tag-Basiertes Löschen
  12. 12. Bug: 1st-Level Cache Priorität
  13. 13. Bug: 1st-Level Cache Priorität
  14. 14. Bug: 1st-Level Cache Prioritätclass 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
  15. 15. Bug: 1st-Level Cache Priorität• Patch:https://gist.github.com/971320
  16. 16. • 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.htmlWeitere Probleme
  17. 17. Ein-führungAgendaProbleme undOptimierungenReverse ProxyCachingmit Varnish
  18. 18. Reverse proxy cachingBrowser Magento(Apache + PHP + Mysql)RequestResponse
  19. 19. Reverse proxy cachingBrowser Magento(Apache + PHP + Mysql)Varnish
  20. 20. Reverse proxy cachingBrowser VarnishNginx Magento(Apache + PHP + Mysql)-Verschlüsselung /Entschlüsselung (SSL)-Kompression
  21. 21. Reverse proxy cachingBrowser VarnishNginx Magento(Apache + PHP + Mysql)
  22. 22. VarnishHTTPAcceleratorCachingReverse ProxyLoadBalancerFailoversystem„Varnish makes websites fly“
  23. 23. • Entwickelt von Poul-Henning Kamp• Varnish Configuration Language (VCL)– DSL, wird intern in C Code übersetzt unddann compiliert• Varnish überlässt die Thread- undSpeicherverwaltung dem Betriebssystem• Weitere Tools: varnishtop, varnishlog,…• Online-Dokumentation:http://www.varnish-cache.org/docs/2.1/Varnish
  24. 24. • In Ubuntu:sudo apt-get install varnishsudo vi /etc/default/varnishSTART=yessudo /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 alsBackend• /etc/varnish/default.vclInstallation
  25. 25. Request Lifecycle (vereinfacht)Kompletter Workflow: http://www.varnish-cache.org/trac/wiki/VCLExampleDefault
  26. 26. • 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 angepasstwerden)Cachebare Seitenaller Page-Requests(geschätzt)
  27. 27. Dynamische(benutzerspezifische)Inhalte
  28. 28. 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>
  29. 29. • Sendet HTTP Header um Varnish zusteuern.• Bindet JavaScript ein, das diedynamischen Inhalte holt und diePlatzhalter ersetzt.• Controller, der die dynamischen Inhalteausliefert.• https://github.com/fbrnc/Aoe_Static• https://github.com/fbrnc/Aoe_StaticDemoModul „Aoe_Static“
  30. 30. Ablauf cachebare SeitenSeite anfordern (HTTP Request)Statische Seite wirdausgeliefertSeite anfordernStatische Seite wird ausgeliefert.Platzhalter für dynamische Teile.Cache-Control HeaderAjax Request fordert dynamische Inhalte anund übermittelt gerade angesehenes ProduktJSON Response mit dynamischen InhaltenPlatzhalter werden ersetztSession Cookie wird geschriebenSeite wirdgerendertBrowser Varnish Magento
  31. 31. Ablauf nicht-cachebare SeitenSeite anfordern (HTTP Request)Seite wird ausgeliefertSeite anfordernSeite wirdgerendertBrowser Varnish Magento
  32. 32. VCLsub 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);}
  33. 33. VCLsub 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);}
  34. 34. VCLsub 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);}
  35. 35. VCLsub 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)";}}
  36. 36. Demo
  37. 37. BenchmarksMagentoohne Cache0,85Seiten/Sekunde2,4Seiten/Sekunde416,67Seiten/SekundeMagento mitAPC+File CacheMagentomit Varnish
  38. 38. • Anstatt AJAX:Edge Side Includes „ESI“ (W3C)<esi:include src="phone/call/getBlock/id/cart_sidebar" />– Nachteil: langsamer, aufwendiger• Caching dynamischer Inhalte unterBerücksichtigung der Session-Id– Nachteil: weniger Cache Hits• „Purge“ um geänderte Inhalte zuaktualisierenErweitert
  39. 39. • Varnish (inkl. Dokumentation)http://www.varnish-cache.org• Poul-Henning Kamp über Varnishhttp://vimeo.com/16676188• http://www.fabrizio-branca.de• https://github.com/fbrncWeitere Informationen
  40. 40. Fragen?Mail: mail (at) fabrizio (minus) branca (dot) deTwitter: @fbrncBlog: http://www.fabrizio-branca.de

×