SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
5 Tweaks für 500 % bessere
Performance
Jonas Hünig, 06. Oktober 2021
Unsplash // Abed Ismail
Agenda
Einleitung
1. FPC in Varnish
2. Redis
3. Datenbank
4. Elasticsearch
5. Admin Worker
Über Jonas
● Linux Administrator bei maxcluster
● Fokus auf Performance-Analysen
● Mail: jhuenig@maxcluster.de
● Github: https://github.com/jonashrem
● Twitter: @jonashrem
Einleitung
Unsplash // Bill Jelen
Warum Performance-Optimierung?
● Ziel eines Shopbetreibers: Steigerung der Conversion Rate
● Unmittelbarer Zusammenhang zwischen der Conversion Rate und der Performance eines
Onlineshops
● Ein performanterer Shop kann mehr Besucher gleichzeitig bedienen
→ Performance-Optimierung beginnt beim Hosting!
Einordnung von Ladezeiten
Verschiedene Arten von Ladezeiten sagen Unterschiedliches aus!
Es ist wichtig zu verstehen, …
● was gemessen wird
● unter welchen Bedingungen gemessen wird
● wodurch Ladezeit beeinflusst wird
● wie die Ladezeit vor/nach Änderungen gemessen wird
TTFB (Time To First Byte)
● Zeit bis zur Antwort des Servers
● Bezieht sich nur auf den eigentlichen Seitenaufruf
PHP-Ausführungszeit
● Ausführungszeit der Anwendung auf dem Server (ohne Netzwerk)
Gesamtladezeit
● Enthält Bilder, Javascript & CSS
Definition von Ladezeiten
Tideways
● Misst Zeit
innerhalb von
PHP
● Erlaubt es,
Flaschenhälse in
der Anwendung
zu finden
NewRelic APM
● Überwacht
PHP-Performance
● Kann Alarme versenden
Webpagetest
● Zeigt, wie ein Browser die Seite
öffnen würde
● Erlaubt es, langsame Assets zu
identifizieren
Google Analytics
● Misst Ladezeit von echten Besuchern
● Kann verschiedene Metriken darstellen
Google PageSpeed Insights
● Zeigt Tipps zur
Verbesserung der
Ladezeit
● Bezieht sich
größtenteils auf
das Frontend
Uptime Robot
● Prüft Ladezeit und Verfügbarkeit einer Webseite
● Alarmiert bei Ausfällen
FPC in Varnish
1
Canva // pixelshot
● Full-Page-Cache für
dynamische Webseiten
● Wird dem Shop
vorgeschaltet
● Cacht komplette Webseite
im Arbeitsspeicher
● Kann Ladezeit stark
verbessern
● Dynamische Inhalte
werden über Ajax oder ESI
nachgeladen
Über Varnish
Voraussetzungen für die Konfiguration
● Shopware 6.4 oder neuer
● Varnish 6 oder höher
● Redis-Instanz für Tags
● Prüfen, welche Inhalte aus dem Cache kommen!
Konfiguration
● config/packages/storefront.yaml
storefront:
csrf:
enabled: true
mode: ajax
reverse_proxy:
enabled: true
ban_method: "BAN"
hosts: [ "http://127.0.0.1" ]
max_parallel_invalidations: 3
redis_url: "redis://127.0.0.1:6379"
● .env
[...]
SHOPWARE_HTTP_CACHE_ENABLED="1"
● /etc/varnish/default.vcl
(Siehe Shopware-Dokumentation)
● Cache leeren
php bin/console cache:clear
Session & Cache
in Redis
2
Canva // JuSun
Über Redis
● Key/Value Datenbank
● Speichert Daten für performanten Zugriff im Arbeitsspeicher
● Bringt hohe Geschwindigkeitsvorteile bei parallelen Zugriffen
● Eignet sich daher besonders gut für Session- oder Cache-Inhalte
● Empfohlen besonders für mittlere und große Onlineshops
Redis als Datenbank für Shopware-Sessions
● Im Normalfall Speicherung der Sessions durch Shopware 6 auf dem Dateisystem
● Redis liegt als „in memory“-Datenbank im Arbeitsspeicher
● Kann über Symfony-Methoden in Redis verschoben werden
Redis als Session-Handler einrichten
● Konfiguration erfolgt über die Symfony-Konfigurationsdatei config/services.yaml:
services:
Redis:
class: Redis
calls:
- method: connect
arguments:
- '%env(REDIS_SESSION_HOST)%'
- '%env(int:REDIS_SESSION_PORT)%'
SymfonyComponentHttpFoundationSessionStorageHandlerRedisSessionHandler:
arguments:
- '@Redis'
● Festlegung von Redis als Session-Handler → Eintragung von Host und Port als
Variablen
Redis als Session-Handler einrichten
1. Variablenzuweisung innerhalb der .env, damit die Variablen genutzt werden können:
REDIS_SESSION_HOST=127.0.0.1
REDIS_SESSION_PORT=6380
2. Shopware-Cache leeren, damit Änderungen wirksam werden:
bin/console cache:clear
3. Mithilfe der Redis-Konsole überprüfen, ob die Sessions erfolgreich in Redis
gespeichert werden:
redis-cli -p 6380 MONITOR
Redis als Datenbank für Shopware-Cache
● Shopware 6 legt Anwendungscache im Normalfall im Dateisystem ab
● Kann über Symfony-Methoden in Redis verschoben werden
● Pools können einzeln oder komplett in Redis ausgelagert werden
● Größe des Caches prüfen!
Redis als Cache-Handler einrichten
● Ablage der Konfiguration für den Cache-Handler in der Datei
config/packages/framework.yaml
● Dafür entweder einzelne Cache-Pools definieren oder Redis als Default Redis für alle
Cache-Pools festlegen
● Als HTTP-Cache wird der Pool cache.http angesprochen:
framework:
cache:
default_redis_provider: "redis://%app.redis.cache.host%:%app.redis.cache.port%"
pools:
cache.http:
default_lifetime: 3600
adapter: cache.adapter.redis
tags: cache.tags
● Alternativ die Konfiguration als Default für alle Pools:
framework:
cache:
app: cache.adapter.redis
default_redis_provider: "redis://%app.redis.cache.host%:%app.redis.cache.port%"
1. Für Übersetzung verwendeter Variablen müssen gesetzte Parameter in die Datei
config/services.yaml integriert werden:
parameters:
app.redis.cache.host: "%env(REDIS_CACHE_HOST)%"
app.redis.cache.port: "%env(REDIS_CACHE_PORT)%"
2. Auf die Werte aus der .env-Datei zurückgreifen:
REDIS_CACHE_HOST=127.0.0.1
REDIS_CACHE_PORT=6379
3. Shopware-Cache mit folgendem Befehl leeren, damit die Änderungen wirksam werden:
bin/console cache:clear
Redis als Cache-Handler einrichten
Bildquelle // Fotograf
Datenbank
3
Pexels // Kevin Ku
Datenbankeinstellungen
● Standardeinstellung von MySQL oft schon sehr gut
● Keine Templates aus dem Internet kopieren
● InnoDB Buffer Pool Size an Anwendung anpassen
● Andere Werte nach Bedarf anpassen
Queries finden und prüfen
1. Langsame Queries finden
2. Queries optimieren
3. Ausführungsplan mit EXPLAIN prüfen
4. MySQL-Indizes prüfen
Ausführungsplan prüfen
● Über EXPLAIN kann der Ausführungsplan geprüft werden
Queries mit Tideways prüfen
● Langsame Queries
sind in Tideways
leicht zu finden
MySQL Auslastung mit Slow Log prüfen
● Slow Log für begrenzten Zeitraum aktivieren
● Analyse auch mit long_query_time=0 relevant
● Analyse der Slow log mit pt-query-digest
MySQL-Auslastung mit Slow Log prüfen
● Über die Slow
Log lassen sich
Queries mit
hohen
Auswirkungen
auf die Laufzeit
finden
Elasticsearch
4
Unsplash // John Snobrich
● NoSQL-Datenbank mit Fokus auf Suchfunktionen
● funktioniert als Suchengine
Über Elasticsearch
● Erhält Kopie des Produktkatalogs in für Suchen optimierter Form
● beschleunigt die Shopware-Suche
● Voraussetzung für Enterprise-Suche
Elasticsearch und Shopware 6
Vorbereitung
1. Datenbank-Tabellen leeren
2. Den Parameters-Block kopieren
3. Den kopierten Parameters-Block in die
Datei des container-Blocks einfügen
4. Anpassungen in der services.xml
vornehmen
5. Shopware-Cache leeren
truncate table enqueue;
truncate table message_queue_stats;
vendor/shopware/elasticsearch/Resources/config/services.xml
config/services.xml
number_of_shards 1
numer_of_replicas 0
mapping.total_fields.limit 50000
php bin/console cache:clear
Reindex
Reindex in einer Screen-Session
screen -S elastic
php bin/console es:index
php bin/console messenger:consume -vv
Admin Worker
5
Unsplash // Mitchell Luo
Standardverhalten von Shopware 6
● Shopware 6 funktioniert standardmäßig „out of the box“
● Standard-Konfiguration ist nicht immer optimal
● Um nachträglichen Konfigurationsaufwand gering zu halten, ist Admin Worker aktiv
● Admin Worker führt Aufgaben im Hintergrund durch
● Wird nur durch Aktivitäten im Shopware-Backend getriggert
⇒ langsames Backend!
Empfehlung: Deaktivierung des Admin Workers, um stattdessen die Message Queue zu
verwenden
Message Queue
● Erlaubt es, Aufgaben asynchron auszuführen
● Kann in MySQL oder RabbitMQ abgelegt werden
● benötigt (einen oder mehrere) Queue Consumer
Queue Consumer
● Läuft im Hintergrund und arbeitet Aufgaben ab
● Kann über Cronjob gestartet werden
● Kann über Prozessmanager wie Supervisord oder systemd gestartet werden
Admin Worker deaktivieren und Cronjobs einrichten
1. Deaktivierung des Shopware 6 Admin-Workers in der Datei
config/packages/shopware.yaml:
shopware:
admin_worker:
enable_admin_worker: false
2. Start der Dienste Scheduled Task Runner und Message Consumer zur Verwendung
der Message Queue. Konfiguration z.B. via Cronjob:
*/3 * * * * /usr/bin/php /var/www/share/beispiel.de/shopware/bin/console scheduled-task:run --time-limit=120
*/3 * * * * /usr/bin/php /var/www/share/beispiel.de/shopware/bin/console messenger:consume --time-limit=120
→ Beispiel Cronjob-Konfiguration:
● Start der Consumer alle 3 Minuten mit einer Laufzeit von 2 Minuten
● Empfehlung: Kurze Laufzeit, um Memory-Leaks zu vermeiden
● Alternativ: Verwaltung der Dienste Scheduled Task Runner und Consumer durch
Supervisord
● Dazu wird für jeden Prozess eine entsprechende Konfiguration angelegt
● Beispiel für den Scheduled Task Runner:
[program:scheduler]
command=php -dmemory_limit=-1 /var/www/share/beispiel.de/shopware/bin/console scheduled-task:run --time-limit=60
autostart=true
autorestart=true
startsecs=1
stopsignal=TERM
Beispiel-Prozess mit Supervisord: Laufzeit von 60 Sekunden mit einem Memory Limit von
512 MB und automatischem Neustart nach dem Beenden des Prozesses
Supervisor Prozessverwaltung
Supervisor Prozessverwaltung
Eine Beispiel-Unit für den Consumer:
[program:consumer]
command=php -dmemory_limit=-1 /var/www/share/beispiel.de/shopware/bin/console messenger:consume --time-limit=60 --memory-limit=512M
autostart=true
autorestart=true
startsecs=1
stopsignal=TERM
ExecStart=/usr/bin/php
Fazit
Unsplash // Charlota Blunarova
Zusammenfassung
● Shop-Performance ist wichtig, um Besucher zu halten und eine hohe Besucherzahl zu
bedienen
● Um die Performance zu verbessern, müssen Flaschenhälse zuerst identifiziert und
gemessen werden
● FPC in Varnish bringt einen extremen Geschwindigkeitsvorteil
● Für mittlere und größere Shops lohnt es sich, Sessions und Cache in Redis zu
verschieben
● Ineffiziente Datenbank-Queries können ein Flaschenhals sein
● Elasticsearch kann die Suche stark beschleunigen
● Message Queue statt Admin Worker verwenden
Performance-Potenziale im Überblick
Performance-Optimierung bei maxcluster
● Analyse von Flaschenhälsen
● Proaktives Monitoring
● Empfehlungen zu Anwendungsoptimierungen
● Optimierungen von Serverparametern zur Anwendung
● Begleitung bei High Traffic Events
Vielen Dank für Ihre
Aufmerksamkeit!
Unsplash // Abed Ismail
Weiterführende Lektüre
● Blogartikel zum Thema Webseitenkomprimierung
● Blogartikel zum Thema Profiling mit Tideways
● Blogartikel zum Thema Performance-Optimierung mit Redis
● Blogartikel zum Thema Elasticsearch
● Blogartikel zum Thema Conversion-Optimierung
● geplant: Blogartikel zum Thema Varnish
E-Mail: jhuenig@maxcluster.de
Github: https://github.com/jonashrem
Twitter: @jonashrem
Kontakt Jonas Hünig Kontakt maxcluster
maxcluster GmbH
Lise-Meitner-Str. 1b
33104 Paderborn
Tel.: 05251 / 41 41 30
E-Mail: info@maxcluster.de
Web: maxcluster.de

Weitere ähnliche Inhalte

Was ist angesagt?

Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013
Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013
Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013Amazon Web Services
 
The Lyft data platform: Now and in the future
The Lyft data platform: Now and in the futureThe Lyft data platform: Now and in the future
The Lyft data platform: Now and in the futuremarkgrover
 
Prometheus design and philosophy
Prometheus design and philosophy   Prometheus design and philosophy
Prometheus design and philosophy Docker, Inc.
 
Data engineering zoomcamp introduction
Data engineering zoomcamp  introductionData engineering zoomcamp  introduction
Data engineering zoomcamp introductionAlexey Grigorev
 
Building real time analytics applications using pinot : A LinkedIn case study
Building real time analytics applications using pinot : A LinkedIn case studyBuilding real time analytics applications using pinot : A LinkedIn case study
Building real time analytics applications using pinot : A LinkedIn case studyKishore Gopalakrishna
 
Data Engineer's Lunch #81: Reverse ETL Tools for Modern Data Platforms
Data Engineer's Lunch #81: Reverse ETL Tools for Modern Data PlatformsData Engineer's Lunch #81: Reverse ETL Tools for Modern Data Platforms
Data Engineer's Lunch #81: Reverse ETL Tools for Modern Data PlatformsAnant Corporation
 
Anomaly Detection with Apache Spark
Anomaly Detection with Apache SparkAnomaly Detection with Apache Spark
Anomaly Detection with Apache SparkCloudera, Inc.
 
Best Practices for Migrating your Data Warehouse to Amazon Redshift
Best Practices for Migrating your Data Warehouse to Amazon Redshift Best Practices for Migrating your Data Warehouse to Amazon Redshift
Best Practices for Migrating your Data Warehouse to Amazon Redshift Amazon Web Services
 
Software_effort_estimation for Software engineering.pdf
Software_effort_estimation for Software engineering.pdfSoftware_effort_estimation for Software engineering.pdf
Software_effort_estimation for Software engineering.pdfsnehan789
 
Odoo - Backend modules in v8
Odoo - Backend modules in v8Odoo - Backend modules in v8
Odoo - Backend modules in v8Odoo
 
Alfresco In An Hour - Document Management, Web Content Management, and Collab...
Alfresco In An Hour - Document Management, Web Content Management, and Collab...Alfresco In An Hour - Document Management, Web Content Management, and Collab...
Alfresco In An Hour - Document Management, Web Content Management, and Collab...Alfresco Software
 
Challenges in building a Data Pipeline
Challenges in building a Data PipelineChallenges in building a Data Pipeline
Challenges in building a Data PipelineHevo Data Inc.
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
Werke im Ausland (WIA) in SAP
Werke im Ausland (WIA) in SAPWerke im Ausland (WIA) in SAP
Werke im Ausland (WIA) in SAPSERKEM GmbH
 
Flow Tuning: Mule 3 vs. Mule 4 - MuleSoft Chicago CONNECT
Flow Tuning: Mule 3 vs. Mule 4 - MuleSoft Chicago CONNECTFlow Tuning: Mule 3 vs. Mule 4 - MuleSoft Chicago CONNECT
Flow Tuning: Mule 3 vs. Mule 4 - MuleSoft Chicago CONNECTSabrina Marechal
 
Netflix viewing data architecture evolution - QCon 2014
Netflix viewing data architecture evolution - QCon 2014Netflix viewing data architecture evolution - QCon 2014
Netflix viewing data architecture evolution - QCon 2014Philip Fisher-Ogden
 
BigQuery walk through.pptx
BigQuery walk through.pptxBigQuery walk through.pptx
BigQuery walk through.pptxVikRam S
 
How to Monitoring the SRE Golden Signals (E-Book)
How to Monitoring the SRE Golden Signals (E-Book)How to Monitoring the SRE Golden Signals (E-Book)
How to Monitoring the SRE Golden Signals (E-Book)Siglos
 

Was ist angesagt? (20)

Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013
Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013
Getting Maximum Performance from Amazon Redshift (DAT305) | AWS re:Invent 2013
 
The Lyft data platform: Now and in the future
The Lyft data platform: Now and in the futureThe Lyft data platform: Now and in the future
The Lyft data platform: Now and in the future
 
Prometheus design and philosophy
Prometheus design and philosophy   Prometheus design and philosophy
Prometheus design and philosophy
 
Data engineering zoomcamp introduction
Data engineering zoomcamp  introductionData engineering zoomcamp  introduction
Data engineering zoomcamp introduction
 
Building real time analytics applications using pinot : A LinkedIn case study
Building real time analytics applications using pinot : A LinkedIn case studyBuilding real time analytics applications using pinot : A LinkedIn case study
Building real time analytics applications using pinot : A LinkedIn case study
 
Data Engineer's Lunch #81: Reverse ETL Tools for Modern Data Platforms
Data Engineer's Lunch #81: Reverse ETL Tools for Modern Data PlatformsData Engineer's Lunch #81: Reverse ETL Tools for Modern Data Platforms
Data Engineer's Lunch #81: Reverse ETL Tools for Modern Data Platforms
 
Anomaly Detection with Apache Spark
Anomaly Detection with Apache SparkAnomaly Detection with Apache Spark
Anomaly Detection with Apache Spark
 
Best Practices for Migrating your Data Warehouse to Amazon Redshift
Best Practices for Migrating your Data Warehouse to Amazon Redshift Best Practices for Migrating your Data Warehouse to Amazon Redshift
Best Practices for Migrating your Data Warehouse to Amazon Redshift
 
Software_effort_estimation for Software engineering.pdf
Software_effort_estimation for Software engineering.pdfSoftware_effort_estimation for Software engineering.pdf
Software_effort_estimation for Software engineering.pdf
 
Odoo - Backend modules in v8
Odoo - Backend modules in v8Odoo - Backend modules in v8
Odoo - Backend modules in v8
 
Alfresco In An Hour - Document Management, Web Content Management, and Collab...
Alfresco In An Hour - Document Management, Web Content Management, and Collab...Alfresco In An Hour - Document Management, Web Content Management, and Collab...
Alfresco In An Hour - Document Management, Web Content Management, and Collab...
 
Deep Dive on Amazon Aurora
Deep Dive on Amazon AuroraDeep Dive on Amazon Aurora
Deep Dive on Amazon Aurora
 
Challenges in building a Data Pipeline
Challenges in building a Data PipelineChallenges in building a Data Pipeline
Challenges in building a Data Pipeline
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
Werke im Ausland (WIA) in SAP
Werke im Ausland (WIA) in SAPWerke im Ausland (WIA) in SAP
Werke im Ausland (WIA) in SAP
 
Flow Tuning: Mule 3 vs. Mule 4 - MuleSoft Chicago CONNECT
Flow Tuning: Mule 3 vs. Mule 4 - MuleSoft Chicago CONNECTFlow Tuning: Mule 3 vs. Mule 4 - MuleSoft Chicago CONNECT
Flow Tuning: Mule 3 vs. Mule 4 - MuleSoft Chicago CONNECT
 
Netflix viewing data architecture evolution - QCon 2014
Netflix viewing data architecture evolution - QCon 2014Netflix viewing data architecture evolution - QCon 2014
Netflix viewing data architecture evolution - QCon 2014
 
Magento Multi vendor Marketplace
Magento Multi vendor MarketplaceMagento Multi vendor Marketplace
Magento Multi vendor Marketplace
 
BigQuery walk through.pptx
BigQuery walk through.pptxBigQuery walk through.pptx
BigQuery walk through.pptx
 
How to Monitoring the SRE Golden Signals (E-Book)
How to Monitoring the SRE Golden Signals (E-Book)How to Monitoring the SRE Golden Signals (E-Book)
How to Monitoring the SRE Golden Signals (E-Book)
 

Ähnlich wie 5 Tweaks für 500 % bessere Performance

Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenIcsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenICS User Group
 
High performance mit PHP
High performance mit PHPHigh performance mit PHP
High performance mit PHPThomas Burgard
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdAOE
 
SQL Server 2012 070-462 prüfung deutsch
SQL Server 2012 070-462 prüfung deutschSQL Server 2012 070-462 prüfung deutsch
SQL Server 2012 070-462 prüfung deutschholgerschmitz2011
 
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-adminsbccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-adminsICS User Group
 
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
 
Grundlagen postgresql
Grundlagen postgresqlGrundlagen postgresql
Grundlagen postgresqlinovex GmbH
 
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
 
TYPO3 Performance (TYPO3camp München)
TYPO3 Performance (TYPO3camp München)TYPO3 Performance (TYPO3camp München)
TYPO3 Performance (TYPO3camp München)Marcus Schwemer
 
Wordpress on steroids
Wordpress on steroidsWordpress on steroids
Wordpress on steroidsBlogwerk AG
 
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG KonferenzDomino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenzpanagenda
 
Skalieren von WordPress & WooCommerce
Skalieren von WordPress & WooCommerceSkalieren von WordPress & WooCommerce
Skalieren von WordPress & WooCommerceRobert Windisch
 
OSMC 2010 | Monitoring mit Shinken by Gerhard Laußer
OSMC 2010 | Monitoring mit Shinken by Gerhard LaußerOSMC 2010 | Monitoring mit Shinken by Gerhard Laußer
OSMC 2010 | Monitoring mit Shinken by Gerhard LaußerNETWAYS
 
MySQL Absicherung und Datensicherung
MySQL Absicherung und DatensicherungMySQL Absicherung und Datensicherung
MySQL Absicherung und DatensicherungLenz Grimmer
 
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
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppetinovex GmbH
 
TYPO3 Migration in komplexen Upgrade- und Relaunch-Projekten
TYPO3 Migration in komplexen Upgrade- und Relaunch-ProjektenTYPO3 Migration in komplexen Upgrade- und Relaunch-Projekten
TYPO3 Migration in komplexen Upgrade- und Relaunch-ProjektenAlex Kellner
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfSyahri Ramadhan
 

Ähnlich wie 5 Tweaks für 500 % bessere Performance (20)

Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenIcsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
 
High performance mit PHP
High performance mit PHPHigh performance mit PHP
High performance mit PHP
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
SQL Server 2012 070-462 prüfung deutsch
SQL Server 2012 070-462 prüfung deutschSQL Server 2012 070-462 prüfung deutsch
SQL Server 2012 070-462 prüfung deutsch
 
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-adminsbccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
bccon-2014 adm01 tipps-und-skripts-aus-dem-leben-eines-ibm-connections-admins
 
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
 
Typo3 und Varnish
Typo3 und VarnishTypo3 und Varnish
Typo3 und Varnish
 
Grundlagen postgresql
Grundlagen postgresqlGrundlagen postgresql
Grundlagen postgresql
 
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
 
TYPO3 Performance (TYPO3camp München)
TYPO3 Performance (TYPO3camp München)TYPO3 Performance (TYPO3camp München)
TYPO3 Performance (TYPO3camp München)
 
Wordpress on steroids
Wordpress on steroidsWordpress on steroids
Wordpress on steroids
 
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG KonferenzDomino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
 
Skalieren von WordPress & WooCommerce
Skalieren von WordPress & WooCommerceSkalieren von WordPress & WooCommerce
Skalieren von WordPress & WooCommerce
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
OSMC 2010 | Monitoring mit Shinken by Gerhard Laußer
OSMC 2010 | Monitoring mit Shinken by Gerhard LaußerOSMC 2010 | Monitoring mit Shinken by Gerhard Laußer
OSMC 2010 | Monitoring mit Shinken by Gerhard Laußer
 
MySQL Absicherung und Datensicherung
MySQL Absicherung und DatensicherungMySQL Absicherung und Datensicherung
MySQL Absicherung und Datensicherung
 
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
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
 
TYPO3 Migration in komplexen Upgrade- und Relaunch-Projekten
TYPO3 Migration in komplexen Upgrade- und Relaunch-ProjektenTYPO3 Migration in komplexen Upgrade- und Relaunch-Projekten
TYPO3 Migration in komplexen Upgrade- und Relaunch-Projekten
 
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdfDockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
Dockerbank II - 03 - Szenarien des Routinebetriebs (aktualisiert).pdf
 

Kürzlich hochgeladen

Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...OPEN KNOWLEDGE GmbH
 
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudFrom Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudOPEN KNOWLEDGE GmbH
 
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...Markus Unterauer
 
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationFEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationOPEN KNOWLEDGE GmbH
 
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...DNUG e.V.
 
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...DNUG e.V.
 

Kürzlich hochgeladen (6)

Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
 
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudFrom Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
 
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
 
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationFEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
 
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
 
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
 

5 Tweaks für 500 % bessere Performance

  • 1. 5 Tweaks für 500 % bessere Performance Jonas Hünig, 06. Oktober 2021 Unsplash // Abed Ismail
  • 2. Agenda Einleitung 1. FPC in Varnish 2. Redis 3. Datenbank 4. Elasticsearch 5. Admin Worker
  • 3. Über Jonas ● Linux Administrator bei maxcluster ● Fokus auf Performance-Analysen ● Mail: jhuenig@maxcluster.de ● Github: https://github.com/jonashrem ● Twitter: @jonashrem
  • 5. Warum Performance-Optimierung? ● Ziel eines Shopbetreibers: Steigerung der Conversion Rate ● Unmittelbarer Zusammenhang zwischen der Conversion Rate und der Performance eines Onlineshops ● Ein performanterer Shop kann mehr Besucher gleichzeitig bedienen → Performance-Optimierung beginnt beim Hosting!
  • 6. Einordnung von Ladezeiten Verschiedene Arten von Ladezeiten sagen Unterschiedliches aus! Es ist wichtig zu verstehen, … ● was gemessen wird ● unter welchen Bedingungen gemessen wird ● wodurch Ladezeit beeinflusst wird ● wie die Ladezeit vor/nach Änderungen gemessen wird
  • 7. TTFB (Time To First Byte) ● Zeit bis zur Antwort des Servers ● Bezieht sich nur auf den eigentlichen Seitenaufruf PHP-Ausführungszeit ● Ausführungszeit der Anwendung auf dem Server (ohne Netzwerk) Gesamtladezeit ● Enthält Bilder, Javascript & CSS Definition von Ladezeiten
  • 8. Tideways ● Misst Zeit innerhalb von PHP ● Erlaubt es, Flaschenhälse in der Anwendung zu finden
  • 10. Webpagetest ● Zeigt, wie ein Browser die Seite öffnen würde ● Erlaubt es, langsame Assets zu identifizieren
  • 11. Google Analytics ● Misst Ladezeit von echten Besuchern ● Kann verschiedene Metriken darstellen
  • 12. Google PageSpeed Insights ● Zeigt Tipps zur Verbesserung der Ladezeit ● Bezieht sich größtenteils auf das Frontend
  • 13. Uptime Robot ● Prüft Ladezeit und Verfügbarkeit einer Webseite ● Alarmiert bei Ausfällen
  • 14. FPC in Varnish 1 Canva // pixelshot
  • 15. ● Full-Page-Cache für dynamische Webseiten ● Wird dem Shop vorgeschaltet ● Cacht komplette Webseite im Arbeitsspeicher ● Kann Ladezeit stark verbessern ● Dynamische Inhalte werden über Ajax oder ESI nachgeladen Über Varnish
  • 16. Voraussetzungen für die Konfiguration ● Shopware 6.4 oder neuer ● Varnish 6 oder höher ● Redis-Instanz für Tags ● Prüfen, welche Inhalte aus dem Cache kommen!
  • 17. Konfiguration ● config/packages/storefront.yaml storefront: csrf: enabled: true mode: ajax reverse_proxy: enabled: true ban_method: "BAN" hosts: [ "http://127.0.0.1" ] max_parallel_invalidations: 3 redis_url: "redis://127.0.0.1:6379" ● .env [...] SHOPWARE_HTTP_CACHE_ENABLED="1" ● /etc/varnish/default.vcl (Siehe Shopware-Dokumentation) ● Cache leeren php bin/console cache:clear
  • 18. Session & Cache in Redis 2 Canva // JuSun
  • 19. Über Redis ● Key/Value Datenbank ● Speichert Daten für performanten Zugriff im Arbeitsspeicher ● Bringt hohe Geschwindigkeitsvorteile bei parallelen Zugriffen ● Eignet sich daher besonders gut für Session- oder Cache-Inhalte ● Empfohlen besonders für mittlere und große Onlineshops
  • 20. Redis als Datenbank für Shopware-Sessions ● Im Normalfall Speicherung der Sessions durch Shopware 6 auf dem Dateisystem ● Redis liegt als „in memory“-Datenbank im Arbeitsspeicher ● Kann über Symfony-Methoden in Redis verschoben werden
  • 21. Redis als Session-Handler einrichten ● Konfiguration erfolgt über die Symfony-Konfigurationsdatei config/services.yaml: services: Redis: class: Redis calls: - method: connect arguments: - '%env(REDIS_SESSION_HOST)%' - '%env(int:REDIS_SESSION_PORT)%' SymfonyComponentHttpFoundationSessionStorageHandlerRedisSessionHandler: arguments: - '@Redis' ● Festlegung von Redis als Session-Handler → Eintragung von Host und Port als Variablen
  • 22. Redis als Session-Handler einrichten 1. Variablenzuweisung innerhalb der .env, damit die Variablen genutzt werden können: REDIS_SESSION_HOST=127.0.0.1 REDIS_SESSION_PORT=6380 2. Shopware-Cache leeren, damit Änderungen wirksam werden: bin/console cache:clear 3. Mithilfe der Redis-Konsole überprüfen, ob die Sessions erfolgreich in Redis gespeichert werden: redis-cli -p 6380 MONITOR
  • 23. Redis als Datenbank für Shopware-Cache ● Shopware 6 legt Anwendungscache im Normalfall im Dateisystem ab ● Kann über Symfony-Methoden in Redis verschoben werden ● Pools können einzeln oder komplett in Redis ausgelagert werden ● Größe des Caches prüfen!
  • 24. Redis als Cache-Handler einrichten ● Ablage der Konfiguration für den Cache-Handler in der Datei config/packages/framework.yaml ● Dafür entweder einzelne Cache-Pools definieren oder Redis als Default Redis für alle Cache-Pools festlegen ● Als HTTP-Cache wird der Pool cache.http angesprochen: framework: cache: default_redis_provider: "redis://%app.redis.cache.host%:%app.redis.cache.port%" pools: cache.http: default_lifetime: 3600 adapter: cache.adapter.redis tags: cache.tags ● Alternativ die Konfiguration als Default für alle Pools: framework: cache: app: cache.adapter.redis default_redis_provider: "redis://%app.redis.cache.host%:%app.redis.cache.port%"
  • 25. 1. Für Übersetzung verwendeter Variablen müssen gesetzte Parameter in die Datei config/services.yaml integriert werden: parameters: app.redis.cache.host: "%env(REDIS_CACHE_HOST)%" app.redis.cache.port: "%env(REDIS_CACHE_PORT)%" 2. Auf die Werte aus der .env-Datei zurückgreifen: REDIS_CACHE_HOST=127.0.0.1 REDIS_CACHE_PORT=6379 3. Shopware-Cache mit folgendem Befehl leeren, damit die Änderungen wirksam werden: bin/console cache:clear Redis als Cache-Handler einrichten Bildquelle // Fotograf
  • 27. Datenbankeinstellungen ● Standardeinstellung von MySQL oft schon sehr gut ● Keine Templates aus dem Internet kopieren ● InnoDB Buffer Pool Size an Anwendung anpassen ● Andere Werte nach Bedarf anpassen
  • 28. Queries finden und prüfen 1. Langsame Queries finden 2. Queries optimieren 3. Ausführungsplan mit EXPLAIN prüfen 4. MySQL-Indizes prüfen
  • 29. Ausführungsplan prüfen ● Über EXPLAIN kann der Ausführungsplan geprüft werden
  • 30. Queries mit Tideways prüfen ● Langsame Queries sind in Tideways leicht zu finden
  • 31. MySQL Auslastung mit Slow Log prüfen ● Slow Log für begrenzten Zeitraum aktivieren ● Analyse auch mit long_query_time=0 relevant ● Analyse der Slow log mit pt-query-digest
  • 32. MySQL-Auslastung mit Slow Log prüfen ● Über die Slow Log lassen sich Queries mit hohen Auswirkungen auf die Laufzeit finden
  • 34. ● NoSQL-Datenbank mit Fokus auf Suchfunktionen ● funktioniert als Suchengine Über Elasticsearch
  • 35. ● Erhält Kopie des Produktkatalogs in für Suchen optimierter Form ● beschleunigt die Shopware-Suche ● Voraussetzung für Enterprise-Suche Elasticsearch und Shopware 6
  • 36. Vorbereitung 1. Datenbank-Tabellen leeren 2. Den Parameters-Block kopieren 3. Den kopierten Parameters-Block in die Datei des container-Blocks einfügen 4. Anpassungen in der services.xml vornehmen 5. Shopware-Cache leeren truncate table enqueue; truncate table message_queue_stats; vendor/shopware/elasticsearch/Resources/config/services.xml config/services.xml number_of_shards 1 numer_of_replicas 0 mapping.total_fields.limit 50000 php bin/console cache:clear
  • 37. Reindex Reindex in einer Screen-Session screen -S elastic php bin/console es:index php bin/console messenger:consume -vv
  • 39. Standardverhalten von Shopware 6 ● Shopware 6 funktioniert standardmäßig „out of the box“ ● Standard-Konfiguration ist nicht immer optimal ● Um nachträglichen Konfigurationsaufwand gering zu halten, ist Admin Worker aktiv ● Admin Worker führt Aufgaben im Hintergrund durch ● Wird nur durch Aktivitäten im Shopware-Backend getriggert ⇒ langsames Backend! Empfehlung: Deaktivierung des Admin Workers, um stattdessen die Message Queue zu verwenden
  • 40. Message Queue ● Erlaubt es, Aufgaben asynchron auszuführen ● Kann in MySQL oder RabbitMQ abgelegt werden ● benötigt (einen oder mehrere) Queue Consumer
  • 41. Queue Consumer ● Läuft im Hintergrund und arbeitet Aufgaben ab ● Kann über Cronjob gestartet werden ● Kann über Prozessmanager wie Supervisord oder systemd gestartet werden
  • 42. Admin Worker deaktivieren und Cronjobs einrichten 1. Deaktivierung des Shopware 6 Admin-Workers in der Datei config/packages/shopware.yaml: shopware: admin_worker: enable_admin_worker: false 2. Start der Dienste Scheduled Task Runner und Message Consumer zur Verwendung der Message Queue. Konfiguration z.B. via Cronjob: */3 * * * * /usr/bin/php /var/www/share/beispiel.de/shopware/bin/console scheduled-task:run --time-limit=120 */3 * * * * /usr/bin/php /var/www/share/beispiel.de/shopware/bin/console messenger:consume --time-limit=120 → Beispiel Cronjob-Konfiguration: ● Start der Consumer alle 3 Minuten mit einer Laufzeit von 2 Minuten ● Empfehlung: Kurze Laufzeit, um Memory-Leaks zu vermeiden
  • 43. ● Alternativ: Verwaltung der Dienste Scheduled Task Runner und Consumer durch Supervisord ● Dazu wird für jeden Prozess eine entsprechende Konfiguration angelegt ● Beispiel für den Scheduled Task Runner: [program:scheduler] command=php -dmemory_limit=-1 /var/www/share/beispiel.de/shopware/bin/console scheduled-task:run --time-limit=60 autostart=true autorestart=true startsecs=1 stopsignal=TERM Beispiel-Prozess mit Supervisord: Laufzeit von 60 Sekunden mit einem Memory Limit von 512 MB und automatischem Neustart nach dem Beenden des Prozesses Supervisor Prozessverwaltung
  • 44. Supervisor Prozessverwaltung Eine Beispiel-Unit für den Consumer: [program:consumer] command=php -dmemory_limit=-1 /var/www/share/beispiel.de/shopware/bin/console messenger:consume --time-limit=60 --memory-limit=512M autostart=true autorestart=true startsecs=1 stopsignal=TERM ExecStart=/usr/bin/php
  • 46. Zusammenfassung ● Shop-Performance ist wichtig, um Besucher zu halten und eine hohe Besucherzahl zu bedienen ● Um die Performance zu verbessern, müssen Flaschenhälse zuerst identifiziert und gemessen werden ● FPC in Varnish bringt einen extremen Geschwindigkeitsvorteil ● Für mittlere und größere Shops lohnt es sich, Sessions und Cache in Redis zu verschieben ● Ineffiziente Datenbank-Queries können ein Flaschenhals sein ● Elasticsearch kann die Suche stark beschleunigen ● Message Queue statt Admin Worker verwenden
  • 48. Performance-Optimierung bei maxcluster ● Analyse von Flaschenhälsen ● Proaktives Monitoring ● Empfehlungen zu Anwendungsoptimierungen ● Optimierungen von Serverparametern zur Anwendung ● Begleitung bei High Traffic Events
  • 49. Vielen Dank für Ihre Aufmerksamkeit! Unsplash // Abed Ismail
  • 50. Weiterführende Lektüre ● Blogartikel zum Thema Webseitenkomprimierung ● Blogartikel zum Thema Profiling mit Tideways ● Blogartikel zum Thema Performance-Optimierung mit Redis ● Blogartikel zum Thema Elasticsearch ● Blogartikel zum Thema Conversion-Optimierung ● geplant: Blogartikel zum Thema Varnish E-Mail: jhuenig@maxcluster.de Github: https://github.com/jonashrem Twitter: @jonashrem Kontakt Jonas Hünig Kontakt maxcluster maxcluster GmbH Lise-Meitner-Str. 1b 33104 Paderborn Tel.: 05251 / 41 41 30 E-Mail: info@maxcluster.de Web: maxcluster.de