Your SlideShare is downloading. ×
0
×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

PHP Barcelona Conference 2010 - Scaling Magento

3,049

Published on

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

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

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,049
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
79
Comments
0
Likes
4
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. PHP Barcelona Conference 2010 SCALING MAGENTO Fernando Palomo García fernando@bluejaylabs.com
  • 2. LO SIENTO NO EXISTE UN BOTON ”TURBO” EN MAGENTO
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Infrastructuras e-commerce
  • 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. E-commerce ERP Business Intelligence Customer Support3rd Party Logistics / Manufacturing CIB
  • 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. 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. Tunning de Servidores Gráfica extraida de ”Magento enteprise edition White Paper”
  • 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. Tunning de Servidores Gráfica extraida de ”Magento Enterprise Edition White Paper”
  • 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. 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. 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. 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. 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. 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. 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. 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. Desarrollando Magento ● Cachear Bloques
  • 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. 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. Desarrollando Magento Event: product_save Refrescar Imagen Refrescar Cache ... Notificar Clientes
  • 34. Desarrollando Magento Event: sales_order_place_after Actualizar Credito Cliente Actualizar Stock ... E-Mail confirmación Procesar Detección de Fraude
  • 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. 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. 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. Gracias! Q & A?For Samples or questions, fernando@bluejaylabs.com

×