Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Web Performance para Magento

1,222 views

Published on

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

  • Login to see the comments

Web Performance para Magento

  1. 1. Web Performance para Magento Jordi Rosell jrosell@einnova.es#webperf @webperfEs @jrosell @einnova
  2. 2. 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
  3. 3. Magento, líder mundial ecommerce opensource#webperf @webperfEs @jrosell @einnova
  4. 4. La plataforma Open Source para comercios electrónicos que quieren crecer#webperf @webperfEs @jrosell @einnova
  5. 5. Prestashop líder en Espanya Spain is different!#webperf @webperfEs @jrosell @einnova
  6. 6. Resultados en hosting compartido Rendimientos por versión con instalación por defecto Apache HTTP server benchmarking tool $ ab -k -n 1000 -c 10 <url> Versión -Cache +Cache Magento -Compiler +Compiler 1.4 4,1s 3,1s 1.7 5,4s 3,2s 2.0 - 2,1s#webperf @webperfEs @jrosell @einnova
  7. 7. 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 Jackob Nielsen · Finalizan la tarea en 1min useit.com#webperf @webperfEs @jrosell @einnova
  8. 8. Usuarios que tengo y que quiero Horas pico en Google Analytics http://j.mp/horas-pico-analytics VirtualUsers = (hourlyVisits * minTimeOnSite) / 60 Ejemplos: 50 visitas/hora de 6 minutos = 5 usuarios concurrentes 150 visitas/hora de 4 minutos = 10 usuarios concurrentes 1200 visitas/hora de 2 minutos = 40 usuarios concurrentes#webperf @webperfEs @jrosell @einnova
  9. 9. 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
  10. 10. Apache 2.2: El jefe Módulos mínimos, comenta el resto mod_expires, mod_deflate, mod_mime, mod_dir, mod_rewrite, mod_authz_host, mod_authz_user MinSpareServers en Prefork MPM Reserva tantos procesos como usuarios concurrentes Aprox 30M por proceso, deja RAM para BBDD Otras configuraciones Keepalive, mod_disk_cache, full page cache, nginx, Amazon S3...#webperf @webperfEs @jrosell @einnova
  11. 11. PHP: El botleneck ; ajustar para admin max_execution_time = 300 Usa pdo_mysql, puedes deshabilitar ;;;extension=mysqli.so ; default ;;;extension=mysql.so memory_limit = 128M También ; mas que numero de ficheros ;;;extension=dbase.so realpath_cache_size=32k ;;;extension=json.so ;;;extension=pdo_sqlite.so ; tiempo actualización 5h ;;;extension=sqlite.so realpath_cache_ttl=72000 ;;;extension=wddx.so ;;;extension=xmlreader.so ; menos verificaciones ;;;extension=xmlwriter.so open_basedir = Off ;;;extension=xsl.so ;;;extension=zip.so#webperf @webperfEs @jrosell @einnova
  12. 12. APC: El Acelerador Caché de código PHP El interprete PHP compila el código y APC lo guarda en caché. extension=apc.so ; Ajustar con el monitor de APC apc.shm_size=256 ¿APC cómo fast caché? ; Sin verificar tiempo modificación app/etc/local.xml apc.stat = 0 <config><global>... <cache> ; Ficheros a incluir <backend>apc</backend> apc.num_files_hint=10000 <prefix>MAGEAPC</prefix> apc.user_entries_hint=10000 </cache>...</config></global> apc.max_file_size=5M#webperf @webperfEs @jrosell @einnova
  13. 13. Two level cache#webperf @webperfEs @jrosell @einnova
  14. 14. 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
  15. 15. Ajustes MySql innodb_buffer_pool_size 80% de la memoria libre (MaxClients) innodb_thread_concurrency (2 * [numberofCPUs] + 2) thread_cache_size innodb_thread_concurrency / 2 max_connections relacionado MaxClients, mirar status table_cache En Magento serian suficiente 1000 tablas abiertas query_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
  16. 16. Monitorizar Apache, Cache, MySql APC Memcached http://pecl.php.net/package/APC $ telnet 127.0.0.1 11211 apc.php …. stats … <conexiones, estadísticas, etc> quit MySql Apache workers mysqltuner, innotop y mysql> show status; <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 127.0.0.1 </Location>#webperf @webperfEs @jrosell @einnova
  17. 17. 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
  18. 18. Resultados Memcached en Amazon EC2 Memcache con 1 instancia m1.large Prueba con http://www.webpagetest.org Resultados: - Primer byte recibido 0.526s - Inicio render 1.588s - Tiempo de carga 3.003s#webperf @webperfEs @jrosell @einnova
  19. 19. 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
  20. 20. Waterfall#webperf @webperfEs @jrosell @einnova
  21. 21. 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
  22. 22. 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
  23. 23. Desarrollo: Configuraciones Deshabilita modulos desde app/etc/modules Los carga igual si sólo desactivas desde “Configuration > Advanced” Atributos Flat Frontend Catalog: EAV Layered Navigation en búsquedas Y el curioso caso de Merge CSS y JS... Descargas en paralelo y payloads#webperf @webperfEs @jrosell @einnova
  24. 24. 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
  25. 25. 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
  26. 26. 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
  27. 27. 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
  28. 28. Muchas gracias Abran juego, abran juego...#webperf @webperfEs @jrosell @einnova

×