SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Introducción a JBoss
Introducción a JBossIntroducción a JBoss
Introducción a JBossIker Canarias
 
Manual de instalación de pentaho para windows 7
Manual de instalación de pentaho para windows 7Manual de instalación de pentaho para windows 7
Manual de instalación de pentaho para windows 7German Pinchao
 
Manual Jboss Server,Creación de Proyecto en Eclipse
Manual Jboss Server,Creación de Proyecto en EclipseManual Jboss Server,Creación de Proyecto en Eclipse
Manual Jboss Server,Creación de Proyecto en EclipseStalin Eduardo Tusa Vitar
 
Optimización de aplicaciones PHP (server side)
Optimización de aplicaciones PHP (server side)Optimización de aplicaciones PHP (server side)
Optimización de aplicaciones PHP (server side)Oriol Jiménez
 
Php mysql iis
Php mysql iisPhp mysql iis
Php mysql iisejmc_sic
 
LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)Emanuel Calvo
 
Presentacion practica seguridad bd
Presentacion practica seguridad bdPresentacion practica seguridad bd
Presentacion practica seguridad bdJaider Contreras
 
Cambio clave por defecto Apache Tomcat
Cambio clave por defecto Apache TomcatCambio clave por defecto Apache Tomcat
Cambio clave por defecto Apache TomcatMoisés Elías Araya
 
Ansible administracion simplificada
Ansible   administracion simplificada Ansible   administracion simplificada
Ansible administracion simplificada bcoca
 
Aspnet40 Cache Extensibility
Aspnet40 Cache ExtensibilityAspnet40 Cache Extensibility
Aspnet40 Cache ExtensibilityChristian Strevel
 
Primeros pasos tema_11_bis
Primeros pasos tema_11_bisPrimeros pasos tema_11_bis
Primeros pasos tema_11_bisRamón Martínez
 

Mais procurados (14)

Introducción a JBoss
Introducción a JBossIntroducción a JBoss
Introducción a JBoss
 
Manual de instalación de pentaho para windows 7
Manual de instalación de pentaho para windows 7Manual de instalación de pentaho para windows 7
Manual de instalación de pentaho para windows 7
 
Manual Jboss Server,Creación de Proyecto en Eclipse
Manual Jboss Server,Creación de Proyecto en EclipseManual Jboss Server,Creación de Proyecto en Eclipse
Manual Jboss Server,Creación de Proyecto en Eclipse
 
Optimización de aplicaciones PHP (server side)
Optimización de aplicaciones PHP (server side)Optimización de aplicaciones PHP (server side)
Optimización de aplicaciones PHP (server side)
 
CakePHP parte 2
CakePHP parte 2CakePHP parte 2
CakePHP parte 2
 
Servidor LAMP en CentOS 6.3
Servidor LAMP en CentOS 6.3Servidor LAMP en CentOS 6.3
Servidor LAMP en CentOS 6.3
 
Php mysql iis
Php mysql iisPhp mysql iis
Php mysql iis
 
LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)LSWC PostgreSQL 9.1 (2011)
LSWC PostgreSQL 9.1 (2011)
 
Presentacion practica seguridad bd
Presentacion practica seguridad bdPresentacion practica seguridad bd
Presentacion practica seguridad bd
 
Cambio clave por defecto Apache Tomcat
Cambio clave por defecto Apache TomcatCambio clave por defecto Apache Tomcat
Cambio clave por defecto Apache Tomcat
 
Ansible administracion simplificada
Ansible   administracion simplificada Ansible   administracion simplificada
Ansible administracion simplificada
 
Aspnet40 Cache Extensibility
Aspnet40 Cache ExtensibilityAspnet40 Cache Extensibility
Aspnet40 Cache Extensibility
 
Entorno PHP
Entorno PHPEntorno PHP
Entorno PHP
 
Primeros pasos tema_11_bis
Primeros pasos tema_11_bisPrimeros pasos tema_11_bis
Primeros pasos tema_11_bis
 

Destaque

Elección de Magento como plataforma E-commerce
Elección de Magento como plataforma E-commerceElección de Magento como plataforma E-commerce
Elección de Magento como plataforma E-commerceJordi Rosell
 
Plataformas eCommerce Best Practices Magento
Plataformas eCommerce Best Practices MagentoPlataformas eCommerce Best Practices Magento
Plataformas eCommerce Best Practices MagentoIgnacio Riesco Martín
 
Optimizar la conversión en Magento
Optimizar la conversión en MagentoOptimizar la conversión en Magento
Optimizar la conversión en MagentoJordi Rosell
 
Páginas aterrizaje que convierten
Páginas aterrizaje que conviertenPáginas aterrizaje que convierten
Páginas aterrizaje que conviertenJordi Rosell
 
Optimización de la Conversión #einnovamwc
Optimización de la Conversión #einnovamwcOptimización de la Conversión #einnovamwc
Optimización de la Conversión #einnovamwcJordi Rosell
 
Magento - Premium eCommerce
Magento - Premium eCommerceMagento - Premium eCommerce
Magento - Premium eCommercedescribano
 
Ppl for students unit 4 and 5
Ppl for students unit 4 and 5Ppl for students unit 4 and 5
Ppl for students unit 4 and 5Akshay Nagpurkar
 
Razones para desarrollar con Magento un proyecto ecommerce
Razones para desarrollar con Magento un proyecto ecommerceRazones para desarrollar con Magento un proyecto ecommerce
Razones para desarrollar con Magento un proyecto ecommerceSATI pyme
 
Aprendiendo de una #cagadaEcommerce
Aprendiendo de una #cagadaEcommerceAprendiendo de una #cagadaEcommerce
Aprendiendo de una #cagadaEcommerceJordi Rosell
 
Desenvolupar una botiga online amb èxit
Desenvolupar una botiga online amb èxitDesenvolupar una botiga online amb èxit
Desenvolupar una botiga online amb èxitJordi Rosell
 
Happy product pages
Happy product pagesHappy product pages
Happy product pagesJordi Rosell
 
E-Commerce Project: Etsy
E-Commerce Project: EtsyE-Commerce Project: Etsy
E-Commerce Project: EtsyLara Zaccaria
 
Reporting para la accionabilidad
Reporting para la accionabilidadReporting para la accionabilidad
Reporting para la accionabilidadJordi Rosell
 
Desarrollo de extensión en Magento
Desarrollo de extensión en MagentoDesarrollo de extensión en Magento
Desarrollo de extensión en MagentoSugerendo
 
Seo en Magento
Seo en MagentoSeo en Magento
Seo en MagentoSugerendo
 
Fusion des régions : résultats de la consultation dans le Jura
Fusion des régions : résultats de la consultation dans le JuraFusion des régions : résultats de la consultation dans le Jura
Fusion des régions : résultats de la consultation dans le JuraDépartement du Jura
 
2015-05-19-mbi-la-economia-de-las-apis
2015-05-19-mbi-la-economia-de-las-apis2015-05-19-mbi-la-economia-de-las-apis
2015-05-19-mbi-la-economia-de-las-apisRoberto C. Mayer
 
Quelques Petits Conseils
Quelques Petits ConseilsQuelques Petits Conseils
Quelques Petits Conseilsbiloulou
 

Destaque (20)

Elección de Magento como plataforma E-commerce
Elección de Magento como plataforma E-commerceElección de Magento como plataforma E-commerce
Elección de Magento como plataforma E-commerce
 
Plataformas eCommerce Best Practices Magento
Plataformas eCommerce Best Practices MagentoPlataformas eCommerce Best Practices Magento
Plataformas eCommerce Best Practices Magento
 
Optimizar la conversión en Magento
Optimizar la conversión en MagentoOptimizar la conversión en Magento
Optimizar la conversión en Magento
 
Páginas aterrizaje que convierten
Páginas aterrizaje que conviertenPáginas aterrizaje que convierten
Páginas aterrizaje que convierten
 
Optimización de la Conversión #einnovamwc
Optimización de la Conversión #einnovamwcOptimización de la Conversión #einnovamwc
Optimización de la Conversión #einnovamwc
 
Magento - Premium eCommerce
Magento - Premium eCommerceMagento - Premium eCommerce
Magento - Premium eCommerce
 
Ppl for students unit 4 and 5
Ppl for students unit 4 and 5Ppl for students unit 4 and 5
Ppl for students unit 4 and 5
 
Razones para desarrollar con Magento un proyecto ecommerce
Razones para desarrollar con Magento un proyecto ecommerceRazones para desarrollar con Magento un proyecto ecommerce
Razones para desarrollar con Magento un proyecto ecommerce
 
Aprendiendo de una #cagadaEcommerce
Aprendiendo de una #cagadaEcommerceAprendiendo de una #cagadaEcommerce
Aprendiendo de una #cagadaEcommerce
 
Desenvolupar una botiga online amb èxit
Desenvolupar una botiga online amb èxitDesenvolupar una botiga online amb èxit
Desenvolupar una botiga online amb èxit
 
Happy product pages
Happy product pagesHappy product pages
Happy product pages
 
E-Commerce Project: Etsy
E-Commerce Project: EtsyE-Commerce Project: Etsy
E-Commerce Project: Etsy
 
Reporting para la accionabilidad
Reporting para la accionabilidadReporting para la accionabilidad
Reporting para la accionabilidad
 
Desarrollo de extensión en Magento
Desarrollo de extensión en MagentoDesarrollo de extensión en Magento
Desarrollo de extensión en Magento
 
Seo en Magento
Seo en MagentoSeo en Magento
Seo en Magento
 
TELEDUCACIÓN
TELEDUCACIÓNTELEDUCACIÓN
TELEDUCACIÓN
 
Fusion des régions : résultats de la consultation dans le Jura
Fusion des régions : résultats de la consultation dans le JuraFusion des régions : résultats de la consultation dans le Jura
Fusion des régions : résultats de la consultation dans le Jura
 
Fullservicescorp1
Fullservicescorp1Fullservicescorp1
Fullservicescorp1
 
2015-05-19-mbi-la-economia-de-las-apis
2015-05-19-mbi-la-economia-de-las-apis2015-05-19-mbi-la-economia-de-las-apis
2015-05-19-mbi-la-economia-de-las-apis
 
Quelques Petits Conseils
Quelques Petits ConseilsQuelques Petits Conseils
Quelques Petits Conseils
 

Semelhante a Web Performance para Magento

Semelhante a Web Performance para Magento (20)

Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magento
 
Performance en Drupal 7
Performance en Drupal 7Performance en Drupal 7
Performance en Drupal 7
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Tuning Lamp
Tuning LampTuning Lamp
Tuning Lamp
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernes
 
Varnish http cache
Varnish http cacheVarnish http cache
Varnish http cache
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN Stack
 
Joomla
JoomlaJoomla
Joomla
 
Observium
ObserviumObservium
Observium
 
JSP
JSPJSP
JSP
 
Observium
ObserviumObservium
Observium
 
Seguridad y optimización en Magento
Seguridad y optimización en MagentoSeguridad y optimización en Magento
Seguridad y optimización en Magento
 
High performance Web Sites
High performance Web SitesHigh performance Web Sites
High performance Web Sites
 
Actividad 7
Actividad 7Actividad 7
Actividad 7
 
Primefaces
PrimefacesPrimefaces
Primefaces
 
Monit optim iis6_2
Monit optim iis6_2Monit optim iis6_2
Monit optim iis6_2
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a Tomcat
 
Interchange CMS - e-commerce
Interchange CMS - e-commerceInterchange CMS - e-commerce
Interchange CMS - e-commerce
 
Interchange How-To for Red Hat Linux ES4
Interchange How-To for Red Hat Linux ES4Interchange How-To for Red Hat Linux ES4
Interchange How-To for Red Hat Linux ES4
 

Web Performance para Magento

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