Web Performance para Magento

856
-1

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

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
856
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
15
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×