Web Performance para Magento
Upcoming SlideShare
Loading in...5
×
 

Web Performance para Magento

on

  • 764 views

Rendimiento de Magento ...

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

Statistics

Views

Total Views
764
Views on SlideShare
756
Embed Views
8

Actions

Likes
2
Downloads
12
Comments
0

3 Embeds 8

http://www.linkedin.com 5
https://www.linkedin.com 2
https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Web Performance para Magento Web Performance para Magento Presentation Transcript

  • Web Performance para Magento Jordi Rosell jrosell@einnova.es#webperf @webperfEs @jrosell @einnova
  • 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
  • Magento, líder mundial ecommerce opensource#webperf @webperfEs @jrosell @einnova
  • La plataforma Open Source para comercios electrónicos que quieren crecer#webperf @webperfEs @jrosell @einnova
  • Prestashop líder en Espanya Spain is different!#webperf @webperfEs @jrosell @einnova
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Two level cache#webperf @webperfEs @jrosell @einnova
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Waterfall#webperf @webperfEs @jrosell @einnova
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Muchas gracias Abran juego, abran juego...#webperf @webperfEs @jrosell @einnova