web performance para magento

Post on 24-Jun-2015

753 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

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

Web Performance para Magento

Jordi Roselljrosell@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 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

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

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

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 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

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

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

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 / 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

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

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.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

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/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

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

top related