Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

PHP Barcelona Conference 2010 - Scaling Magento

3,664 views

Published on

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

Published in: Technology
  • Be the first to comment

PHP Barcelona Conference 2010 - Scaling Magento

  1. 1. PHP Barcelona Conference 2010 SCALING MAGENTO Fernando Palomo García fernando@bluejaylabs.com
  2. 2. LO SIENTO NO EXISTE UN BOTON ”TURBO” EN MAGENTO
  3. 3. Í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!
  4. 4. 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
  5. 5. 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
  6. 6. 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
  7. 7. 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...
  8. 8. 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
  9. 9. 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!
  10. 10. 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
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. Infrastructuras e-commerce
  15. 15. 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
  16. 16. E-commerce ERP Business Intelligence Customer Support3rd Party Logistics / Manufacturing CIB
  17. 17. 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
  18. 18. 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!
  19. 19. Tunning de Servidores Gráfica extraida de ”Magento enteprise edition White Paper”
  20. 20. 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
  21. 21. Tunning de Servidores Gráfica extraida de ”Magento Enterprise Edition White Paper”
  22. 22. 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
  23. 23. 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
  24. 24. 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/
  25. 25. 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
  26. 26. 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?
  27. 27. 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
  28. 28. 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)
  29. 29. 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
  30. 30. Desarrollando Magento ● Cachear Bloques
  31. 31. 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
  32. 32. 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
  33. 33. Desarrollando Magento Event: product_save Refrescar Imagen Refrescar Cache ... Notificar Clientes
  34. 34. Desarrollando Magento Event: sales_order_place_after Actualizar Credito Cliente Actualizar Stock ... E-Mail confirmación Procesar Detección de Fraude
  35. 35. Desarrollando Magento ● Búsquedas Full Text en Magento: ● Apache SOLR (incluido en enterprise) http://lucene.apache.org/solr/ ● SPHINX http://sphinxsearch.com/ ● 3rd 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
  36. 36. 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...
  37. 37. 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
  38. 38. Gracias! Q & A?For Samples or questions, fernando@bluejaylabs.com

×