SlideShare a Scribd company logo
1 of 41
Download to read offline
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
Ein-
führung
Agenda
Probleme und
Optimierungen
Reverse Proxy
Caching
mit Varnish
Ein-
führung
Agenda
Probleme und
Optimierungen
Reverse Proxy
Caching
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
Ein-
führung
Agenda
Probleme und
Optimierungen
Reverse Proxy
Caching
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
• 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
Alte Cache-Einträge entfernen
• 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
Bug: 1st-Level Cache Priorität
Bug: 1st-Level Cache Priorität
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
Bug: 1st-Level Cache Priorität
• Patch:
https://gist.github.com/971320
• 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
Weitere Probleme
Ein-
führung
Agenda
Probleme und
Optimierungen
Reverse Proxy
Caching
mit Varnish
Reverse proxy caching
Browser Magento
(Apache + PHP + Mysql)
Request
Response
Reverse proxy caching
Browser Magento
(Apache + PHP + Mysql)
Varnish
Reverse proxy caching
Browser VarnishNginx Magento
(Apache + PHP + Mysql)
-Verschlüsselung /
Entschlüsselung (SSL)
-Kompression
Reverse proxy caching
Browser VarnishNginx Magento
(Apache + PHP + Mysql)
Varnish
HTTP
Accelerator
Caching
Reverse Proxy
Load
Balancer
Failover
system
„Varnish makes websites fly“
• 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
• 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
Request Lifecycle (vereinfacht)
Kompletter Workflow: http://www.varnish-cache.org/trac/wiki/VCLExampleDefault
• 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)
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>
• 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“
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 an
und übermittelt gerade angesehenes Produkt
JSON Response mit dynamischen Inhalten
Platzhalter werden ersetzt
Session Cookie wird geschrieben
Seite wird
gerendert
Browser Varnish Magento
Ablauf nicht-cachebare Seiten
Seite anfordern (HTTP Request)
Seite wird ausgeliefert
Seite anfordern
Seite wird
gerendert
Browser Varnish Magento
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
Magento
ohne Cache
0,85
Seiten/Sekunde
2,4
Seiten/Sekunde
416,67
Seiten/Sekunde
Magento mit
APC+File Cache
Magento
mit Varnish
• 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
• 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
Fragen?
Mail: mail (at) fabrizio (minus) branca (dot) de
Twitter: @fbrnc
Blog: http://www.fabrizio-branca.de

More Related Content

What's hot

MK2014 FileMaker Server 13 by Thomas Hahn
MK2014 FileMaker Server 13 by Thomas HahnMK2014 FileMaker Server 13 by Thomas Hahn
MK2014 FileMaker Server 13 by Thomas HahnVerein FM Konferenz
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenMayflower GmbH
 
Open-Source-Monitoring von Netzwerkkomponenten mit check_nwc_health
Open-Source-Monitoring von Netzwerkkomponenten mit check_nwc_healthOpen-Source-Monitoring von Netzwerkkomponenten mit check_nwc_health
Open-Source-Monitoring von Netzwerkkomponenten mit check_nwc_healthGerhard Lausser
 
Bidirektionale Verbindungen für Webanwendungen
Bidirektionale Verbindungen für WebanwendungenBidirektionale Verbindungen für Webanwendungen
Bidirektionale Verbindungen für WebanwendungenMarco Rico Gomez
 
Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)Martin Kliehm
 
Campixx 2012-ladezeit-extreme
Campixx 2012-ladezeit-extremeCampixx 2012-ladezeit-extreme
Campixx 2012-ladezeit-extremeAlexander Merkel
 
PhpStorm 6 Configuration for TYPO3
PhpStorm 6 Configuration for TYPO3PhpStorm 6 Configuration for TYPO3
PhpStorm 6 Configuration for TYPO3marco-huber
 
Monitoring von SAP mit check_sap_health
Monitoring von SAP mit check_sap_healthMonitoring von SAP mit check_sap_health
Monitoring von SAP mit check_sap_healthGerhard Lausser
 
Web-Performance-Optimierung mit varnish
Web-Performance-Optimierung mit varnishWeb-Performance-Optimierung mit varnish
Web-Performance-Optimierung mit varnishSpeedPartner GmbH
 
Skalieren einer Web Anwendung
Skalieren einer Web Anwendung Skalieren einer Web Anwendung
Skalieren einer Web Anwendung Jonathan Weiss
 
Web-Performance-Optimierung mit varnish
Web-Performance-Optimierung mit varnishWeb-Performance-Optimierung mit varnish
Web-Performance-Optimierung mit varnishSpeedPartner GmbH
 
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
 
WordPress Multisite
WordPress MultisiteWordPress Multisite
WordPress MultisiteWalter Ebert
 
Tipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections AdminsTipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections AdminsKlaus Bild
 

What's hot (18)

Dockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloudDockerize It - Mit apex in die amazon cloud
Dockerize It - Mit apex in die amazon cloud
 
Typo3 und Varnish
Typo3 und VarnishTypo3 und Varnish
Typo3 und Varnish
 
MK2014 FileMaker Server 13 by Thomas Hahn
MK2014 FileMaker Server 13 by Thomas HahnMK2014 FileMaker Server 13 by Thomas Hahn
MK2014 FileMaker Server 13 by Thomas Hahn
 
HTML5 und node.js Grundlagen
HTML5 und node.js GrundlagenHTML5 und node.js Grundlagen
HTML5 und node.js Grundlagen
 
Open-Source-Monitoring von Netzwerkkomponenten mit check_nwc_health
Open-Source-Monitoring von Netzwerkkomponenten mit check_nwc_healthOpen-Source-Monitoring von Netzwerkkomponenten mit check_nwc_health
Open-Source-Monitoring von Netzwerkkomponenten mit check_nwc_health
 
Offline Arbeiten
Offline ArbeitenOffline Arbeiten
Offline Arbeiten
 
Bidirektionale Verbindungen für Webanwendungen
Bidirektionale Verbindungen für WebanwendungenBidirektionale Verbindungen für Webanwendungen
Bidirektionale Verbindungen für Webanwendungen
 
check_sap_health
check_sap_healthcheck_sap_health
check_sap_health
 
Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)
 
Campixx 2012-ladezeit-extreme
Campixx 2012-ladezeit-extremeCampixx 2012-ladezeit-extreme
Campixx 2012-ladezeit-extreme
 
PhpStorm 6 Configuration for TYPO3
PhpStorm 6 Configuration for TYPO3PhpStorm 6 Configuration for TYPO3
PhpStorm 6 Configuration for TYPO3
 
Monitoring von SAP mit check_sap_health
Monitoring von SAP mit check_sap_healthMonitoring von SAP mit check_sap_health
Monitoring von SAP mit check_sap_health
 
Web-Performance-Optimierung mit varnish
Web-Performance-Optimierung mit varnishWeb-Performance-Optimierung mit varnish
Web-Performance-Optimierung mit varnish
 
Skalieren einer Web Anwendung
Skalieren einer Web Anwendung Skalieren einer Web Anwendung
Skalieren einer Web Anwendung
 
Web-Performance-Optimierung mit varnish
Web-Performance-Optimierung mit varnishWeb-Performance-Optimierung mit varnish
Web-Performance-Optimierung mit varnish
 
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...
 
WordPress Multisite
WordPress MultisiteWordPress Multisite
WordPress Multisite
 
Tipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections AdminsTipps und Skripts aus dem Leben eines Connections Admins
Tipps und Skripts aus dem Leben eines Connections Admins
 

Similar to Performance durch Caching

Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch CachingAOE
 
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEARCH ONE
 
Caching - Hintergründe, Patterns und Best Practices
Caching - Hintergründe, Patterns und Best PracticesCaching - Hintergründe, Patterns und Best Practices
Caching - Hintergründe, Patterns und Best PracticesMichael Plöd
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudAOE
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit RustJens Siebert
 
OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz
OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im EinsatzOpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz
OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im EinsatzDigicomp Academy AG
 
Echtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisierenEchtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisierenMT AG
 
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhenDietrichRordorf
 
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...OPEN KNOWLEDGE GmbH
 
HTML5 Storage
HTML5 StorageHTML5 Storage
HTML5 Storageadesso AG
 
Speedup your site mit Caching
Speedup your site mit CachingSpeedup your site mit Caching
Speedup your site mit Cachingwpmeetupka
 
Backend-Services mit Rust
Backend-Services mit RustBackend-Services mit Rust
Backend-Services mit RustJens Siebert
 
Ajax and JavaScript mit Ruby on Rails
Ajax and JavaScript mit Ruby on RailsAjax and JavaScript mit Ruby on Rails
Ajax and JavaScript mit Ruby on RailsJonathan Weiss
 
Frontend Performance
Frontend PerformanceFrontend Performance
Frontend PerformanceNico Steiner
 
MT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG: Ajax Rezepte fuer web services mit jquery und ajaxMT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG: Ajax Rezepte fuer web services mit jquery und ajaxMT AG
 
Webanwendungen mit Apache HBase entwickeln
Webanwendungen mit Apache HBase entwickelnWebanwendungen mit Apache HBase entwickeln
Webanwendungen mit Apache HBase entwickelnRoman Roelofsen
 
Ajax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google SuggestAjax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google SuggestBastian Feder
 

Similar to Performance durch Caching (20)

Performance durch Caching
Performance durch CachingPerformance durch Caching
Performance durch Caching
 
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-FreaksSEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
SEO Day 2016: Perfekte Ladezeiten und SEO-Hosting für Speed-Freaks
 
Caching - Hintergründe, Patterns und Best Practices
Caching - Hintergründe, Patterns und Best PracticesCaching - Hintergründe, Patterns und Best Practices
Caching - Hintergründe, Patterns und Best Practices
 
High Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der CloudHigh Performance Multi-Server Magento in der Cloud
High Performance Multi-Server Magento in der Cloud
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
Node.js
Node.jsNode.js
Node.js
 
OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz
OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im EinsatzOpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz
OpenTuesday: Jede Sekunde zählt - Webbeschleuniger Varnish im Einsatz
 
Echtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisierenEchtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisieren
 
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
10 Stunden / 5 Massnahmen: Sicherheit einer Web App erhöhen
 
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
Rufen Sie nicht an – wir rufen Sie an! | Server-sent Events und Web-Sockets i...
 
HTML5 Storage
HTML5 StorageHTML5 Storage
HTML5 Storage
 
Speedup your site mit Caching
Speedup your site mit CachingSpeedup your site mit Caching
Speedup your site mit Caching
 
Hdc2012 cordova-präsi
Hdc2012 cordova-präsiHdc2012 cordova-präsi
Hdc2012 cordova-präsi
 
Backend-Services mit Rust
Backend-Services mit RustBackend-Services mit Rust
Backend-Services mit Rust
 
Ajax and JavaScript mit Ruby on Rails
Ajax and JavaScript mit Ruby on RailsAjax and JavaScript mit Ruby on Rails
Ajax and JavaScript mit Ruby on Rails
 
Frontend Performance
Frontend PerformanceFrontend Performance
Frontend Performance
 
MT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG: Ajax Rezepte fuer web services mit jquery und ajaxMT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG: Ajax Rezepte fuer web services mit jquery und ajax
 
Rack-Middleware
Rack-MiddlewareRack-Middleware
Rack-Middleware
 
Webanwendungen mit Apache HBase entwickeln
Webanwendungen mit Apache HBase entwickelnWebanwendungen mit Apache HBase entwickeln
Webanwendungen mit Apache HBase entwickeln
 
Ajax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google SuggestAjax hands on - Refactoring Google Suggest
Ajax hands on - Refactoring Google Suggest
 

More from AOE

Re-inventing airport non-aeronautical revenue generation post COVID-19
Re-inventing airport non-aeronautical revenue generation post COVID-19Re-inventing airport non-aeronautical revenue generation post COVID-19
Re-inventing airport non-aeronautical revenue generation post COVID-19AOE
 
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019AOE
 
Flamingo presentation at code.talks commerce by Daniel Pötzinger
Flamingo presentation at code.talks commerce by Daniel PötzingerFlamingo presentation at code.talks commerce by Daniel Pötzinger
Flamingo presentation at code.talks commerce by Daniel PötzingerAOE
 
A bag full of trust - Christof Braun at AOE Conference 2018
A bag full of trust - Christof Braun at AOE Conference 2018A bag full of trust - Christof Braun at AOE Conference 2018
A bag full of trust - Christof Braun at AOE Conference 2018AOE
 
Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...
Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...
Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...AOE
 
Frankfurt Airport Digitalization Case Study
Frankfurt Airport Digitalization Case StudyFrankfurt Airport Digitalization Case Study
Frankfurt Airport Digitalization Case StudyAOE
 
This is what has to change for Travel Retail to survive - Manuel Heidler, AOE
This is what has to change for Travel Retail to survive - Manuel Heidler, AOEThis is what has to change for Travel Retail to survive - Manuel Heidler, AOE
This is what has to change for Travel Retail to survive - Manuel Heidler, AOEAOE
 
AOEconf17: Application Security
AOEconf17: Application SecurityAOEconf17: Application Security
AOEconf17: Application SecurityAOE
 
AOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar InsightsAOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar InsightsAOE
 
AOEconf17: A flight through our OM³ Systems
AOEconf17: A flight through our OM³ SystemsAOEconf17: A flight through our OM³ Systems
AOEconf17: A flight through our OM³ SystemsAOE
 
AOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar InsightsAOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar InsightsAOE
 
AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...
AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...
AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...AOE
 
AOEconf17: Agile scaling concepts
AOEconf17: Agile scaling conceptsAOEconf17: Agile scaling concepts
AOEconf17: Agile scaling conceptsAOE
 
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...AOE
 
AOEconf17: UI challenges in a microservice world
AOEconf17: UI challenges in a microservice worldAOEconf17: UI challenges in a microservice world
AOEconf17: UI challenges in a microservice worldAOE
 
AOEconf17: Application Security - Bastian Ike
AOEconf17: Application Security - Bastian IkeAOEconf17: Application Security - Bastian Ike
AOEconf17: Application Security - Bastian IkeAOE
 
AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...
AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...
AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...AOE
 
AOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan Rotsch
AOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan RotschAOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan Rotsch
AOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan RotschAOE
 
Joern Bock: The basic concept of an agile organisation
Joern Bock: The basic concept of an agile organisationJoern Bock: The basic concept of an agile organisation
Joern Bock: The basic concept of an agile organisationAOE
 
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...AOE
 

More from AOE (20)

Re-inventing airport non-aeronautical revenue generation post COVID-19
Re-inventing airport non-aeronautical revenue generation post COVID-19Re-inventing airport non-aeronautical revenue generation post COVID-19
Re-inventing airport non-aeronautical revenue generation post COVID-19
 
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
Flamingo - Inspiring Commerce Frontend made in Go - Meet Magento 2019
 
Flamingo presentation at code.talks commerce by Daniel Pötzinger
Flamingo presentation at code.talks commerce by Daniel PötzingerFlamingo presentation at code.talks commerce by Daniel Pötzinger
Flamingo presentation at code.talks commerce by Daniel Pötzinger
 
A bag full of trust - Christof Braun at AOE Conference 2018
A bag full of trust - Christof Braun at AOE Conference 2018A bag full of trust - Christof Braun at AOE Conference 2018
A bag full of trust - Christof Braun at AOE Conference 2018
 
Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...
Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...
Digitalizing the Global Travel Retail World - Kian Gould at Global Retailing ...
 
Frankfurt Airport Digitalization Case Study
Frankfurt Airport Digitalization Case StudyFrankfurt Airport Digitalization Case Study
Frankfurt Airport Digitalization Case Study
 
This is what has to change for Travel Retail to survive - Manuel Heidler, AOE
This is what has to change for Travel Retail to survive - Manuel Heidler, AOEThis is what has to change for Travel Retail to survive - Manuel Heidler, AOE
This is what has to change for Travel Retail to survive - Manuel Heidler, AOE
 
AOEconf17: Application Security
AOEconf17: Application SecurityAOEconf17: Application Security
AOEconf17: Application Security
 
AOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar InsightsAOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar Insights
 
AOEconf17: A flight through our OM³ Systems
AOEconf17: A flight through our OM³ SystemsAOEconf17: A flight through our OM³ Systems
AOEconf17: A flight through our OM³ Systems
 
AOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar InsightsAOEconf17: AOE Tech Radar Insights
AOEconf17: AOE Tech Radar Insights
 
AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...
AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...
AOEconf17: Pets vs. Cattle - modern Application Infrastructure - by Fabrizio ...
 
AOEconf17: Agile scaling concepts
AOEconf17: Agile scaling conceptsAOEconf17: Agile scaling concepts
AOEconf17: Agile scaling concepts
 
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
AOEcon17: Searchperience - The journey from PHP and Solr to Scala and Elastic...
 
AOEconf17: UI challenges in a microservice world
AOEconf17: UI challenges in a microservice worldAOEconf17: UI challenges in a microservice world
AOEconf17: UI challenges in a microservice world
 
AOEconf17: Application Security - Bastian Ike
AOEconf17: Application Security - Bastian IkeAOEconf17: Application Security - Bastian Ike
AOEconf17: Application Security - Bastian Ike
 
AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...
AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...
AOEconf17: Management 3.0 - the secret to happy, performing and motivated sel...
 
AOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan Rotsch
AOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan RotschAOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan Rotsch
AOEconf17: How to eat an elePHPant, congstar style - Timo Fuchs & Stefan Rotsch
 
Joern Bock: The basic concept of an agile organisation
Joern Bock: The basic concept of an agile organisationJoern Bock: The basic concept of an agile organisation
Joern Bock: The basic concept of an agile organisation
 
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
 

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
  • 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. • 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
  • 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 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
  • 11. • 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
  • 12. Bug: 1st-Level Cache Priorität
  • 13. Bug: 1st-Level Cache Priorität
  • 14. 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
  • 15. Bug: 1st-Level Cache Priorität • Patch: https://gist.github.com/971320
  • 16. • 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 Weitere Probleme
  • 18. Reverse proxy caching Browser Magento (Apache + PHP + Mysql) Request Response
  • 19. Reverse proxy caching Browser Magento (Apache + PHP + Mysql) Varnish
  • 20. Reverse proxy caching Browser VarnishNginx Magento (Apache + PHP + Mysql) -Verschlüsselung / Entschlüsselung (SSL) -Kompression
  • 21. Reverse proxy caching Browser VarnishNginx Magento (Apache + PHP + Mysql)
  • 23. • 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
  • 24. • 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
  • 25. Request Lifecycle (vereinfacht) Kompletter Workflow: http://www.varnish-cache.org/trac/wiki/VCLExampleDefault
  • 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 angepasst werden) Cachebare Seiten aller Page-Requests (geschätzt)
  • 27.
  • 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. • 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“
  • 31. 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 an und übermittelt gerade angesehenes Produkt JSON Response mit dynamischen Inhalten Platzhalter werden ersetzt Session Cookie wird geschrieben Seite wird gerendert Browser Varnish Magento
  • 32. Ablauf nicht-cachebare Seiten Seite anfordern (HTTP Request) Seite wird ausgeliefert Seite anfordern Seite wird gerendert Browser Varnish Magento
  • 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
  • 39. • 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
  • 40. • 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
  • 41. Fragen? Mail: mail (at) fabrizio (minus) branca (dot) de Twitter: @fbrnc Blog: http://www.fabrizio-branca.de