web performance para magento

28
Web Performance para Magento Jordi Rosell [email protected] #webperf @webperfEs @jrosell @einnova

Upload: jordi-rosell

Post on 24-Jun-2015

749 views

Category:

Documents


3 download

DESCRIPTION

Rendimiento de Magento Magento y Cloud APC y Memcached Combinación JS y CSS Ineficiencia en módulos Configuración de infraestructura Uso de caché Eliminar consultas innecesarias Cuellos de botella con xhprof

TRANSCRIPT

Page 1: Web Performance para Magento

Web Performance para Magento

Jordi [email protected]

#webperf @webperfEs @jrosell @einnova

Page 2: Web Performance para Magento

Hola soy Jordi, me gusta Magento

#magento #ecommerce #webperf 2012

#analytics #cro #seo #sysadmin #webmaster #ux #cloud

#developer 1982 #rod3 #barcelona #aiguafreda #blogger elnostreraco.com/blog

#working einnova.com

#webperf @webperfEs @jrosell @einnova

Page 3: Web Performance para Magento

Magento, líder mundial ecommerce opensource

#webperf @webperfEs @jrosell @einnova

Page 4: Web Performance para Magento

La plataforma Open Source para comercios electrónicos que quieren crecer

#webperf @webperfEs @jrosell @einnova

Page 5: Web Performance para Magento

Prestashop líder en Espanya

Spain is different!

#webperf @webperfEs @jrosell @einnova

Page 6: Web Performance para Magento

Resultados en hosting compartido

Rendimientos por versión con instalación por defectoApache HTTP server benchmarking tool$ ab -k -n 1000 -c 10 <url>

Versión Magento

-Cache -Compiler

+Cache+Compiler

1.4 4,1s 3,1s

1.7 5,4s 3,2s

2.0 - 2,1s

#webperf @webperfEs @jrosell @einnova

Page 7: Web Performance para Magento

Rango de tiempos en la #ux

Velocidad en la experiencia usuario (#ux)· Operación instantánea en 0.1s· Navegación sin interrupción en 1s· Dejan la tarea en 10s· Finalizan la tarea en 1min

Jackob Nielsenuseit.com

#webperf @webperfEs @jrosell @einnova

Page 8: Web Performance para Magento

Usuarios que tengo y que quiero

Horas pico en Google Analyticshttp://j.mp/horas-pico-analytics

VirtualUsers = (hourlyVisits * minTimeOnSite) / 60

Ejemplos:50 visitas/hora de 6 minutos = 5 usuarios concurrentes150 visitas/hora de 4 minutos = 10 usuarios concurrentes1200 visitas/hora de 2 minutos = 40 usuarios concurrentes

#webperf @webperfEs @jrosell @einnova

Page 9: Web Performance para Magento

Arquitectura Magento

No es PHP 4, usa patrones de ingeniera del software

Más de 15k ficheros

Estructura modular extensible, Representación de layout y configuración en XML, Patrón Modelo Vista Controlador, Eventos (Observers), Entidades con atributos y valores (EAV), “Sobreescritura” de plantillas, multi*...

¿Cómo arreglamos esto?

#webperf @webperfEs @jrosell @einnova

Page 10: Web Performance para Magento

Apache 2.2: El jefe

Módulos mínimos, comenta el restomod_expires, mod_deflate, mod_mime, mod_dir, mod_rewrite, mod_authz_host, mod_authz_user

MinSpareServers en Prefork MPMReserva tantos procesos como usuarios concurrentesAprox 30M por proceso, deja RAM para BBDD

Otras configuracionesKeepalive, mod_disk_cache, full page cache, nginx, Amazon S3...

#webperf @webperfEs @jrosell @einnova

Page 11: Web Performance para Magento

PHP: El botleneck

; ajustar para adminmax_execution_time = 300

; defaultmemory_limit = 128M

; mas que numero de ficherosrealpath_cache_size=32k

; tiempo actualización 5hrealpath_cache_ttl=72000

; menos verificacionesopen_basedir = Off

Usa pdo_mysql, puedes deshabilitar;;;extension=mysqli.so;;;extension=mysql.so

También;;;extension=dbase.so;;;extension=json.so;;;extension=pdo_sqlite.so;;;extension=sqlite.so;;;extension=wddx.so;;;extension=xmlreader.so;;;extension=xmlwriter.so;;;extension=xsl.so;;;extension=zip.so

#webperf @webperfEs @jrosell @einnova

Page 12: Web Performance para Magento

APC: El Acelerador

extension=apc.so; Ajustar con el monitor de APCapc.shm_size=256; Sin verificar tiempo modificaciónapc.stat = 0 ; Ficheros a incluirapc.num_files_hint=10000apc.user_entries_hint=10000apc.max_file_size=5M

Caché de código PHPEl interprete PHP compila el código y APC lo guarda en caché.

¿APC cómo fast caché?app/etc/local.xml<config><global>... <cache> <backend>apc</backend> <prefix>MAGEAPC</prefix> </cache>...</config></global>

#webperf @webperfEs @jrosell @einnova

Page 13: Web Performance para Magento

Two level cache

#webperf @webperfEs @jrosell @einnova

Page 14: Web Performance para Magento

Memcached: Cache rápida y distribuida

Fast cache con memcached y ficheros cómo slow_cache<config><global><cache><backend>memcached</backend><memcached><servers><server1> <host><![CDATA[127.0.0.1]]></host>

<port><![CDATA[11211]]></port><persistent><![CDATA[1]]></persistent><weight><![CDATA[2]]></weight> <timeout><!

[CDATA[10]]></timeout><retry_interval><![CDATA[10]]></retry_interval><status><![CDATA[]]></status></server1>...</servers></memcached></cache></global></config>

Gestión de sesiones distribuido cuando usamos más de un servidor<session_save><![CDATA[memcache]]></session_save><session_save_path><![CDATA[tcp://127.0.0.1:11211?persistent=1&weight;=2&timeout;=10&retry;_interval=10]]></session_save_path>

#webperf @webperfEs @jrosell @einnova

Page 15: Web Performance para Magento

Ajustes MySql

innodb_buffer_pool_size 80% de la memoria libre (MaxClients)innodb_thread_concurrency (2 * [numberofCPUs] + 2)thread_cache_size innodb_thread_concurrency / 2max_connections relacionado MaxClients, mirar 'status'table_cache En Magento serian suficiente 1000 tablas abiertasquery_cache_size, sort_buffer_size, join_buffer_size innodb_autoextend_increment fijar tamaño datafile suficiente

Ejemplos de configuraciones MySql: http://j.mp/mysql-config

#webperf @webperfEs @jrosell @einnova

Page 16: Web Performance para Magento

Monitorizar Apache, Cache, MySql

MySqlmysqltuner, innotop y 'mysql> show status;'

Memcached$ telnet 127.0.0.1 11211….stats… <conexiones, estadísticas, etc>quit

APChttp://pecl.php.net/package/APCapc.php

Apache workers<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 127.0.0.1</Location>

#webperf @webperfEs @jrosell @einnova

Page 17: Web Performance para Magento

Pruebas en un servidor Amazon EC2

Prueba configuraciones Magento 1.7 (m1.large)Apache HTTP server benchmarking tool$ ab -k -n 1000 -c <usuarios> <url>

-APC +APC Compiler APC Cache Memcache

2,7s 1,6s 1,5s 1,8s 1,7s

#webperf @webperfEs @jrosell @einnova

Page 18: Web Performance para Magento

Resultados Memcached en Amazon EC2

Memcache con 1 instancia m1.largePrueba con http://www.webpagetest.org

Resultados:- Primer byte recibido 0.526s- Inicio render 1.588s- Tiempo de carga 3.003s

#webperf @webperfEs @jrosell @einnova

Page 19: Web Performance para Magento

Posibles mejoras infraestructura

- Separación de media, skin, js e integración AWS S3 o FTP- Cache de un sólo nivel con redis (cache_tags)- Magento Enterprise con Full Page Cache y Archives (x2)- Full Page Cache de Varnish para Magento CE 1.7 (y ESI tags)- Integrar la búsqueda de Solr en caso de muchos productos- Escalar con otra instancia de magento (x2)- Una BBDD para escritura y otra/s de lectura (tiempo replica)

#webperf @webperfEs @jrosell @einnova

Page 20: Web Performance para Magento

Waterfall

#webperf @webperfEs @jrosell @einnova

Page 21: Web Performance para Magento

Desarrollo

Las themes de Magento estan diseñadas para mostrar todas las funcionalidades, personaliza para mejoralo

Entorno de Desarrollo Eclipse IDE. En windows usa Zend Server (Zend Optimizer+)herramientas Configviewer y Layoutviewer (AlanStorm)

Debug: Mage::log

Testing: PHPUnit o scripts propios.

#webperf @webperfEs @jrosell @einnova

Page 22: Web Performance para Magento

Desarrollo: Personalización en Magento

1. Módulos en app/etc/modules

2. Configuraciones y tabla core_config_data

3. Ajustes de layout.xml y ficheros .phtml

4. Módulo personalizado

#webperf @webperfEs @jrosell @einnova

Page 23: Web Performance para Magento

Desarrollo: Configuraciones

Deshabilita modulos desde app/etc/modulesLos carga igual si sólo desactivas desde “Configuration > Advanced”

AtributosFlat Frontend Catalog: EAVLayered Navigation en búsquedas

Y el curioso caso de Merge CSS y JS...Descargas en paralelo y payloads

#webperf @webperfEs @jrosell @einnova

Page 24: Web Performance para Magento

Desarrollo: Template Fallback

/app/design/frontend/base/default (también iphone y modern)/app/design/frontend/default/default (también iphone y modern)/app/design/frontend/tuiweb/default (una copia base)/app/design/frontend/tuweb/tuweb (aspecto de tu web)/app/design/frontend/tuweb/tuweb-1 (variante de tu web)/skin/frontend/...

Crear pack tuweb con plantilla por defecto de Magento y añades una carpeta tuweb sólo con ficheros modificados

Variantes para páginas, productos concretos, tests A/B, etc

#webperf @webperfEs @jrosell @einnova

Page 25: Web Performance para Magento

Desarrollo: Layout y templates

En vez de eliminar y añadir se puede quitar e insertar<reference name=”parent1.name”>

<remove name=”eliminar.no.necesario” /><action method=”unsetChild”>

<name>mover.sin.eliminar</name></action></reference><reference name=”parent2.nameleft”>

<action method=”insert”><name>mover.sin.eliminar</name><sibling>bloque.anterior</sibling></action>

</reference>

Añadir templates y bloques<block name=”anadir.tmpl” type=”core/template” template=”anadir/tmpl.phtml”/><block name=”anadir.item” type=”modulo/item” template=”anadir/item.phtml”/>

#webperf @webperfEs @jrosell @einnova

Page 26: Web Performance para Magento

Desarrollo: Módulos y override de classes

En vez de copiar ficheros en app/code/local usa rewrite de Blocks, Helpers y Modulos.

<config><global><blocks><checkout><rewrite>

<onpage_success>Jrosell_Checkout_Block_Sucess<onpage_success></rewrite><checkout></blocks></global></config>

class Jrosell_Checkout_Block_Sucess extends Mage_Checkout_Block_Sucess{

function metodo(){ Mage::log(...);return parent::metodo();

}}

#webperf @webperfEs @jrosell @einnova

Page 27: Web Performance para Magento

Magento 2 y mejoras performance

Objetivos del equipo de desarrollo de Magento 2

-Cualquier versión deberá rendir mejor que la anterior-El número de módulos no deberá influir en el rendimiento-Herramientas para el análisis del rendimiento de escenarios-Ejecución en hostings compartidos y VPS-Poder usar varias instancias en un único código-APIS de módulos en JSON/SOAP/XM (SaaS)-Soporte para Oracle, Postgre SQL y MS SQL-Los que usan jQuery se podrán olvidar de prototype.-Extra: OWASP Top 10 Web Vulnerabilities

#webperf @webperfEs @jrosell @einnova

Page 28: Web Performance para Magento

Muchas gracias

Abran juego, abran juego...

#webperf @webperfEs @jrosell @einnova