• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

PHP Barcelona Conference 2010 - Scaling Magento

on

  • 3,198 views

Conference by Fernando Palomo , http://www.bluejaylabs.com

Conference by Fernando Palomo , http://www.bluejaylabs.com

Statistics

Views

Total Views
3,198
Views on SlideShare
3,188
Embed Views
10

Actions

Likes
2
Downloads
74
Comments
0

2 Embeds 10

http://www.linkedin.com 9
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

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

    PHP Barcelona Conference 2010 - Scaling Magento PHP Barcelona Conference 2010 - Scaling Magento Presentation Transcript

    • PHP Barcelona Conference 2010 SCALING MAGENTO Fernando Palomo García [email_address]
    • LO SIENTO
        NO EXISTE UN BOTON ”TURBO” EN MAGENTO
    • ÍNDICE
      • Benchmarking: medir las mejoras
      • Profiling: localizando el cuello de botella
      • Monitoring: debemos ampliar la plataforma?
      • Infrastructuras e-commerce
      • Tunning de Servidores: Apache,PHP,MySQL
      • Configuración de Magento
      • Desarrollando Magento: consejos y eventos asíncronos
      • Benchmarks!
    • Benchmarking
      • Asume que nunca superarás ciertos límites:
        • Los que marca el framework
        • Otros: FS, BD, HTTP, Parsing, Regex...
      • Optimizar código PHP vs Optimizar esos cuellos de botella externos
      • Benchmark antes de lanzar el Site: conoce los límites de tu infrastructura
    • Benchmarking
      • Qué medir?
        • Tiempo de carga de página completa
        • Tiempo de ejecución PHP: Conexiones cocurrentes Vs Tiempo de respuesta => Peticiones por segundo
        • Magento: Pedidos por hora, páginas cms, product/list product/view
    • Benchmarking
      • Cómo medir?
        • Carga de Página:
          • Firebug for Firefox (Network Tab): Tamaño de página, elementos...
            • https://addons.mozilla.org/es-es/firefox/addon/1843/
          • Yslow for Firefox: Recomendaciones y estadísticas
            • http://developer.yahoo.com/yslow/
          • Google Chrome developer toolbar
          • Httperf con uso de sesiones
        • Tests de Stress
          • Siege http://www.joedog.org/index/siege-home
          • Httperf http://www.hpl.hp.com/research/linux/httperf/docs.php
    • Benchmarking
      • Consejos:
        • Usar Tráfico real Vs carga sintética de magento:
          • Cms
          • Category/view
          • Product/view
          • Add to Cart / Confirm
        • Benchmark dry-run antes del benchmark real: cache
        • Eliminar ”Ruido”: Bandwidth del enlace, Cronjobs, Backups, tráfico real...
    • Benchmarking
      • App server benchmark
        • httperf --hog --server www.bluejaylabs.com --uri=/index.php --port 80 --timeout 5 --num-conns=5 –rate=10
      • Full Page benchmark:
        • httperf --server www.bluejaylabs.com --port 80 --timeout 5 --wsesslog=100,0,httperf.test1 --ra 5
    • Profiling
      • Encontrar cuellos de botella. Herramientas:
        • Magento profiler. Simple, pero útil
        • Xdebug, es un debugger en realidad
        • XHProf, by facebook http://pecl.php.net/package/xhprof
          • Mage_log! http://localhost/index.php?run=4cbf18f9144c8&source=xhprof_foo
          • Parse XML http://localhost/index.php?run=4cbf23819e758&source=xhprof_foo
        • XHProf no es demasiado pesado para ejecutarlo en live, pero con cuidado!
    • Monitoring
      • Qué monitorizamos? En general:
        • Tráfico de red (interfaz interna y externa):
          • Límite contratado
          • Límite de NIC
          • Network Outages , lost packages
        • CPU: No debería haber un Server Load > 3
        • Memory: Nunca tocar swap
        • Disk I/O:
          • Límite de velocidad de lectura? Disco más rapidos || RAID 1
          • I/O Errors
    • Monitoring
      • Web server
        • Minimizar acceso a disco, php en APC
        • Apache Max Threads Vs Current Threads
        • Tiempo de carga de página (header)
      • Db Server
        • MySQL Threads Vs MySQL Max Connections
        • MySQL Slow Queries
        • MySQL Error log
        • MySQL Slave Status ( si replicación )
        • opened_tables,opened_files,aborted_clients
    • Monitoring
      • Herramientas:
        • Nagios + munin (Monitorización y alerta)
          • Http://www.nagios.org
          • http://munin-monitoring.org/
        • Monit http://mmonit.com/monit/screenshots/ (Monitorización)
        • Cacti (Monitorización) http://www.cacti.net/
        • Zabbix (Monitorización, gráficas amigables) http://www.zabbix.com/
        • Site Uptime monitoring:
          • Http://pingdom.com , http://www.host-tracker.com
    • Infrastructuras e-commerce
      • Plataforma e-commerce partida en funcionalidades
      • Al escalar debemos usar la mejor herramienta para cada necesidad, no hay una herramienta buena para todo
      • División clara desde el principio para poder crecer
      • Compromiso entre Alta Disponibilidad y Rendimiento: Virtualización Vs Servicios Físicos
    •  
    •  
    • Infrastructuras e-commerce
    • Infrastructuras e-commerce
      • E-commerce es solo un elemento de una plataforma más grande
      • Internamente SOA: Common Intercommunication Bus
      • Servicio: Cada función independiente que por definición no depende del contexto o estado del resto de componentes para su ejecución
    • E-commerce ERP Business Intelligence Customer Support 3 rd Party Logistics / Manufacturing CIB
    • Tunning de Servidores
      • Afinando Apache
        • Apache threads , Apache keepalive
        • Deshabilita los módulos que no uses (mod_ssl?)
        • Módulos:
          • mod_expires: fecha de expiración lejana (ejemplo)
          • mod_gzip ó mod_deflate para contenido comprimible (css / html / js / doc …)
          • Configura FileETag
        • Identifica en tus logs al cliente que hizo la petición, y al servidor que la respondió
        • Facebook's Scribe http://github.com/facebook/scribe
    • Tunning de Servidores
        • SSL en el Balanceador: Ojo , monitorizar carga
        • AllowOverride None: Deshabilita .htaccess
        • FileSystem: noatime (tambien para MySQL), tmpfs?
      • APC opcode cache
        • Refresca APC en tu script de deployment!
    • Tunning de Servidores Gráfica extraida de ”Magento enteprise edition White Paper”
    • Tunning de Servidores
      • php.ini
        • Minimiza y ordena tu ”include_path”
        • realpath_cache_size > 512K (fuera open_basedir!)
        • realpath_cache_ttl > 86400
        • E_NOTICE , display_errors, error_log
      • Configurar Memcache redundancy
        • Sesiones replicadas
        • Datos replicados
        • pecl php-memcache > 3.0.2
    • Tunning de Servidores Gráfica extraida de ”Magento Enterprise Edition White Paper”
    • Tunning de Servidores
      • Reverse Proxy delante de los frontales, cacheando contenido estático
        • Squid http://www.squid-cache.org/
        • Varnish http://www.varnish-cache.org/
      • Servidor de contenido estático (js/css/cdn)
        • Lighttpd http://www.lighttpd.net/
        • Nginx http://nginx.org/
      • Administración de granjas: Puppet http://www.puppetlabs.com
    • Tunning de Servidores
      • MySQL Alta Disponibilidad White Paper http://www.mysql.com/products/enterprise/high_availability.html
      • MySQL Tunning: (consejo: http://mysqltuner.pl )
      • sort_buffer_size = 8M # per connection
      • table_cache || table_open_cache > Tablas de magento
      • read_buffer_size = # solo para myisam , por conexion
      • binlog_cache_size = # log cache para las hebras, cache de transacciones
      • innodb_thread_concurrency = 2 * [numberofCPUs] + 2
      • read_rnd_buffer_size = # por conexion
      • tmp_table_size = 32M # tablas en memoria, el menor de éste y el siguiente, ajuste dinámico
      • max_heap_table_size = 32M # tablas en memoria , ajustar dinamicamente
      • innodb_buffer_pool_size = Memory*3/4 # this is the most important parameter for innodb
      • join_buffer_size = 8M # enable more space for joins without index
      • innodb_file_per_table = 1 # 1 archivo por cada tabla, nada de fichero gigante
    • Tunning de Servidores
        MySQL Performance
      • 0.- Descarga una versión compilada por intel (intel c++ compiler) o compila MySQL tú mismo
      • 1.- Indexes: Afina el uso con ”explain” y minimiza el tamaño
      • 2.- Usar MySQL Partitioning
      • 3.- Sharding (experimental)
          • Spider engine http://forge.mysql.com/wiki/The_Spider_Storage_Engine
          • Spockproxy http://forge.mysql.com/projects/project.php?id=275
          • HiveDB http://www.hivedb.org/
    • Configuración de Magento
      • Habilita todas las cachés
      • Habilita el Flat Catalog
      • Deshabilita el módulo Mage_Log
      • No uses Layered Navigation si no lo necesitas
      • Habilita la combinación de CSS y JS en un único archivo
      • No llenes los logs en live con Mage::log innecesarios
    • Configuración de Magento
      • app/etc/local.xml
        • <cache> magento cluster
          • Usar fast and slow backend para fallback en db
      • Index management: manual update , reindexación controlada
      • Rotate system.log!
      • Apache Hadoop http://hadoop.apache.org/ para media/ ,var/export ,var/report
      • Facebook's Scribe para Magento system.log?
    • Desarrollando Magento
      • En general:
        • Haz una página ligera y cacheable:
          • No uses varios Frameworks JS
          • CSS y JavaScript fuera del HTML
          • Intenta no hacer un DOM gigante
          • Todo lo que no sea imprescindible para visualizar tu página: al final (ajax?)
          • Javascript orientado a eventos
          • http://developer.yahoo.com/yui/ Yahoo! YUI library
    • Desarrollando Magento
      • Siempre Actualiza a la última versión
        • Releases 1.4.0.X
          • Optimized performance of search indexer
          • Optimized performance of sales reports, added new sales report types
          • Added ability to define arbitrary cache backends
          • Improved javascript files merging, added CSS files merging
          • Optimized cache initialization during startup
          • Flattened store_to_base_rate, store_to_order_rate, base_to_global_rate, base_to_order_rate order atttibutes
          • Added completely new Indexing functionality (and performance improvements)
          • Optimized export from grids in admin area
          • Improved customer id validation (run 1 query per request instead N) in customer session
          • Optimized EAV Entity Save performance (1 insert of multiple rows instead of multiple inserts into the same table)
    • Desarrollando Magento
        • Release 1.4.1.X
          • Sales module database structure changed from EAV into flat tables
          • Reviewed logic of the sales reports: Orders, Tax, Invoiced, Shipping, Refunds, Coupons
          • Reimplemented bestsellers report
          • Optimized search reindex process
    • Desarrollando Magento
      • Cachear Bloques
    • Desarrollando Magento
      • Usar Magento Collections , Evitar Lanzar query a la BD directamente. Evitar SELECT *
      • Al recorrer bucles, cargar todos los datos necesarios con la colección, evita cargar objetos en los bucles
      • Usa observers, no extiendas la clase: no intrusivo
      • Si hay 2 métodos, probablemente 1 es más rapido que el otro
    • Desarrollando Magento
      • Podemos sacar elementos de la ejecución para hacer una aplicación más ágil
      • RabbitMQ http://www.rabbitmq.com/
      • Gearman http://gearman.org/
      • Amazon SNS / SQS http://aws.amazon.com/
      • Sistema propio Basado en Magento y cronjobs
    • Desarrollando Magento Event: product_save Refrescar Imagen Refrescar Cache ... Notificar Clientes
    • Desarrollando Magento Event: sales_order_place_after Actualizar Credito Cliente Actualizar Stock ... E-Mail confirmación Procesar Detección de Fraude
    • Desarrollando Magento
      • Búsquedas Full Text en Magento:
        • Apache SOLR (incluido en enterprise) http://lucene.apache.org/solr/
        • SPHINX http://sphinxsearch.com/
        • 3 rd party search providers http://www.fact-finder.es/
      • Full Page Cache:
        • Incluido en Magento Enterprise
        • Desarrollandolo tú mismo: Extendiendo el modelo Cache, generando un crawler.
        • Genera HTML plano y carga las partes dinámicas con AJAX
    • Desarrollando Magento
      • NoSQL para módulos donde no es necesaria und BD Relacional
        • Apache CouchDB http://couchdb.apache.org/
        • MongoDB http://www.mongodb.org/
        • Apache Hadoop http://hadoop.apache.org/
      • Ejemplos:
        • X% de usuarios q visitaron este producto compraron
        • Y% de usuarios que compraron este producto compraron también …
        • Logs, Listas de correo...
    • Hagamos un benchmark!
      • Basado en Amazon Web Services
      • Cargamos paso a paso las mejoras y vamos midiendo
        • Cambios en Apache + php.ini
        • Cambios en MySQL
        • Añadiendo Varnish
        • Añadiendo un nuevo frontend
    • Gracias! Q & A? For Samples or questions, fernando@bluejaylabs.com