Drupal 7 para sitios de alto rendimiento y alta disponibilidad

3,895 views

Published on

Presentación sobre métodos y herramientas para optimizar el rendimiento de un sitio basado en Drupal 7

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

No Downloads
Views
Total views
3,895
On SlideShare
0
From Embeds
0
Number of Embeds
24
Actions
Shares
0
Downloads
0
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Drupal 7 para sitios de alto rendimiento y alta disponibilidad

  1. 1. Drupal 7 para sitios de alto rendimiento y disponibilidad IIG. Iván G. Campaña N.
  2. 2. ¿Qué implica alto rendimiento? • Un sitio que recibe desde miles a millones de visitas por segundo. • Va asociado a sitios con un flujo alto de información (medios de comunicación, páginas de entidades de gobierno, sitios de famosos, etc...). • Los visitantes esperan poder acceder al contenido en cualquier momento y sin interrupciones. • El tiempo fuera de línea puede implicar pérdidas monetarias o daño de imagen para la empresa. D7 para alto rendimiento
  3. 3. ¿Drupal está listo? Sitios desarrollados en Drupal con alto número de visitas: • The White House / La Casa Blanca (whitehouse.gov) • The Economist (economist.com) • Fox News (nation.foxnews.com) • El Universo (eluniverso.com) • Ecuavisa (ecuavisa.com) Requieren no sólo de infraestructura, sino también de una estrategia de optimización diseñada de acuerdo a las necesidades del proyecto. D7 para alto rendimiento
  4. 4. CMS vs Código puro Código puro ● ● ● ● ● Proceso de desarrollo más largo Menor consumo de recursos Desarrollo de funcionalidades a la medida Características ajustadas específicamente a la necesidad Mayor dificultad para realizar cambios drásticos. CMS ● Agregan una capa grande de “sobrecarga” (overhead). ● Contienen múltiples módulos los cuales requieren de aseguramiento de calidad. ● La mayoría están basados en lenguajes de scripting (Ruby, PHP, Python, etc...) Implica que no hay compilación de código, incrementando consumo de CPU. ● Simplifican el desarrollo, pero mantenimiento es crítico (bugs, parches de seguridad). ● Mayor flexibilidad y facilidad de cambio (generalidad). l D7 para alto rendimiento
  5. 5. ¿Cómo funciona con Drupal? ● Por defecto no está optimizado para alto rendimiento ● Almacena toda la configuración en la BD. Las bases de datos son “lentas” ● Atrapa todas las solicitudes al utilizar URLs amigables (inclusive los archivos estáticos). ● Es una herramienta genérica, por lo cual agrega validaciones y verificaciones que ralentizan la ejecución y aumentan el consumo de recursos. ● Inclusive con las configuraciones por defecto de mejora de rendimiento no puede soportar un número alto de accesos concurrentes. ● D7 para alto rendimiento
  6. 6. ¿Qué se necesita para optimizarlo? ● Conocimientos :) ● Recursos :( D7 para alto rendimiento
  7. 7. ¿Alternativas? ● Configuración en un ambiente propio: ● Instalación de servidores, componentes y configuraciones. ● Servicios de terceros: ● ● Pantheon (http://getpantheon.com/) Acquia Cloud (http://www.acquia.com/products-services/acquia-cloud) ● Optimizaciones al sitio web (obligatorio). D7 para alto rendimiento
  8. 8. ¿La solución? ●No existe una fórmula mágica. ●Se necesita planificación y adaptar el sitio para poder responder a la demanda. ●Nos podemos basar en cálculos y recomendaciones, pero pesa mucho la experiencia. ●Hay que pensar en software y hardware. ●Integración de servicios de distribución y balanceo de carga ●Mejorar acceso a recursos lentos (Sistema de archivos, BD, Red, E/S en general) ●Redundancia. ●Utilizar servicios en la nube (cloud SAS). D7 para alto rendimiento
  9. 9. Estructura genérica con Drupal 7 D7 para alto rendimiento
  10. 10. Establecer métricas y objetivos ● ● ● ● Más infraestructura sin optimización = Desperdicio de dinero. Establecer un mínimo y un máximo de visitantes esperados. ¿Qué puedo lograr con mis recursos? Identificar qué características del sitio requieren atención especial: – Ej: Contenido altamente dinámico, llamadas AJAX, número de usuarios logueados concurrentemente. D7 para alto rendimiento
  11. 11. Pruebas de rendimiento ● ● ● Se deben realizar en ambiente de QA o Staging. Apache Benchmark ● Pruebas básicas ● Simulación de usuarios concurrentes ● Se puede enviar cookies y parámetros para simular sesiones de usuario. ● Se maneja a nivel de scripting o en consola ● Manual: ● http://httpd.apache.org/docs/2.2/programs/ab.html New Relic ● Permite identificar cuellos de botella en el rendimiento del sitio o la infraestructura. ● Integración directa con drupal (servicio pro) ● Monitoreo constante durante las pruebas de rendimiento D7 para alto rendimiento
  12. 12. Pruebas de rendimiento ● Jmeter / Blazemeter ● Pruebas con los tipos de usuarios que se van a manejar ● Páginas estáticas ● Páginas con bloques de contenido dinámico. ● Páginas que varían dependiendo de parámetros: ● Por Rol ● Por Usuario ● Por variables ● Módulo de integración: ● https://drupal.org/project/blazemeter ● Scripts de ejemplo: ● https://github.com/Ymbra/drupal7-jmeter ● https://github.com/erikwebb/drupal-jmeter-tricks http://www.metaltoad.com/blog/jmeter-test-plan-drupal D7 para alto rendimiento
  13. 13. ¿Luego de las pruebas? ● ¿Qué he logrado? ● ● ● Ya conozco los problemas. Tengo establecidos los objetivos a alcanzar. Conozco mis límites en cuanto a recursos. ¿Cómo avanzo? D7 para alto rendimiento
  14. 14. Optimizaciones por niveles Nivel básico: ● Caché en el navegador ● Configurar recursos estáticos (js/css/imágenes). ● Habilitar caché para usuarios anónimos ● Utilizar un cache de OPCode para el código ● Reducir el número de módulos incluidos D7 para alto rendimiento
  15. 15. Optimizaciones por niveles Nivel intermedio: ● Reemplazar caché de BD de Drupal ● Reemplazar servidor web ● Optimizar motor de BD ● Integrar caché de usuarios logueados ● Optimizar rendimiento de módulos D7 para alto rendimiento
  16. 16. Optimizaciones por niveles Nivel avanzado: ● Integrar sistema de caché con reglas ● Integrar búsquedas a través de Apache Solr ● Utilizar herramientas de balanceo de carga, proxy inverso, CDN ● Emplear herramientas de terceros para reducir carga (opcionales): ● Cloudflare ● Apache Mahout D7 para alto rendimiento
  17. 17. Nivel básico de optimización • Caché en los navegadores o Configurar e-tags en el servidor web o Establecer fecha de expiración de archivos o Usar dominios sin cookies para contenido estático o Usar una red CDN  (Se puede crear un CDN falso con un servidor secundario) o Activar agregación CSS/JS en Drupal • Habilitar caché para usuarios anónimos o Se almacenan las páginas, bloques y vistas generadas en la BD. o Establece un tiempo mínimo de permanencia en caché. o Puede integrarse con el módulo expires para hacer la limpieza del contenido. D7 para alto rendimiento
  18. 18. Nivel básico de optimización • Listar los módulos integrados y desactivar o desinstalar los que no se utilicen. • Seleccionar módulos que puedan ser reutilizables. • Mantener las funcionalidades personalizadas modulares, pero compactas. “No matar moscas con balas de cañón” D7 para alto rendimiento
  19. 19. Nivel básico de optimización Utilizar caché OPCode o Crea código intermedio (precompilado). o Se puede mantener en memoria evitando que pase a leer archivos en disco (mejora E/S). Evita hacer “hits” al disco por cada archivo. o Se actualiza cuando detecta que hay cambios en los archivos de código. o Basta con integrar un módulo de PHP y establecer los parámetros básicos. o Funciona con cualquier aplicación PHP. o Una instalación de Drupal incluyendo los módulos contribuidos puede tener más de 2,000 archivos de código. • Módulos más populares: o APC o XCache o Zend Optimizer D7 para alto rendimiento
  20. 20. Nivel básico de optimización D7 para alto rendimiento
  21. 21. Herramientas de evaluación • Estas herramientas incluyen recomendaciones básicas para mejorar la interacción y tiempo de respuesta del sitio: • Yahoo YSlow ● http://developer.yahoo.com/yslow/  • Google Page Speed https://developers.google.com/speed/pagespeed/  D7 para alto rendimiento
  22. 22. Nivel intermedio de optimización ● Reemplazar caché de BD de Drupal ● Resuelve problemas básicos de rendimiento. ● Escribir en la BD siempre es costoso. ● Se vuelve un problema con múltiples usuarios concurrentes. ● La herramienta utilizada por defecto es Memcached. ● Requiere soporte de módulo de PHP ● Se pueden definir múltiples instancias para los diferentes componentes del sitio. ● Se mantiene el resultado en memoria RAM. ● Permite reemplazar caché estándar, así como caché de sesiones y de bloqueo (lock) ● Sistema alternativo basado en archivos: Boost. ● Sigue siendo más “económico” que escribir en la BD, aunque no sea tan rápido como almacenar en memoria. D7 para alto rendimiento
  23. 23. Herramientas de caché Métodos simples (con recursos limitados): DatabaseCache Boost / https://drupal.org/project/boost Con aumento de infraestructura: Memcached / https://drupal.org/project/memcache Redis / https://drupal.org/project/redis Varnish / https://drupal.org/project/varnish Integrando caché de usuarios: AuthCache / https://drupal.org/project/authcache EntityCache / https://drupal.org/project/entitycache D7 para alto rendimiento
  24. 24. Nivel intermedio de optimización ● Reemplazar servidor Web. ● Servidore compatibles con Drupal: ● Apache.- Opción por defecto, estable aunque con mayor consumo de recursos. ● ● Nginx.- Mejor rendimiento con archivos estáticos y opción de habilitar microcaché. ● Microcaché permite almacenar temporalmente la página renderizada. Lighttpd.- Funciona en modo fast-cgi consumo de recursos bajo (hay que configurar el número de listeners de acuerdo a las características del equipo físico). D7 para alto rendimiento
  25. 25. Nivel intermedio de optimización ● Optimizar motor de BD ● Problemas de bloqueos / Acceso concurrente ● Bloqueo a nivel de fila ● Bloqueo de tablas ● Índices lentos ● Búsquedas secuenciales ● Fragmentación ● Limitación de rendimiento en vistas complejas o con migración de información de sistemas legados. ● Casos específicos: ● MySQL .- problemas en consultas que necesitan índices inversos (soporte experimental) ● PostgreSQL.- Soporte limitado dependiendo de los proveedores de hosting. D7 para alto rendimiento
  26. 26. Motores de base de datos Estándar: o Mysql o PostgreSQL Versiones modificadas: o MariaDB o Percona SQL Otras opciones: o MongoDB (NoSQL) D7 para alto rendimiento
  27. 27. Nivel intermedio de optimización ● Optimizar rendimiento de módulos ● Se aplica para módulos propios o contribuidos ● Estadísticas de New Relic sirven de apoyo ● En módulos propios ver qué elementos pueden aprovechar el uso de caché. ● Revisar tipo de consultas que se realizan y cómo pueden mejorarse. ● Reducir en lo posible el acceso a BD. ● En el caso específico de MySQL se puede exponer datos a través de vistas (SQL) para forzar el uso de índices y reducir el tiempo de ejecución de las consultas. ● Ej: Consulta normal a través de vistas de los 5 últimos nodos ordenados por fecha de manera descendente de un total de 40,000 nodos: ~3 segs ● Utilizando los datos expuestos de los nodos a través de una vista SQL para la misma consulta: ~0.05 segs ● Sólo se expone los datos de los nodos, el resto se mantiene. D7 para alto rendimiento
  28. 28. Nivel avanzado de optimización ● Integrar sistema de caché con reglas ● Controlar en qué momento se hace modificaciones sobre los “bins”. ● Actualizar el caché basado en acciones, no en tiempo. ● https://drupal.org/project/cache_actions ● Caché de vistas persistente en el tiempo: ● Views Content Cache ● https://drupal.org/project/views_content_cache ● Establecer caché para paneles en base a un hash ● Panels Hash Cache ● https://drupal.org/project/panels_hash_cache D7 para alto rendimiento
  29. 29. Búsquedas con Apache Solr • Uno de las áreas más explotadas de un sitio web Búsqueda de contenidos. La búsqueda en base de datos es costosa. Consume un alto porcentaje de CPU y memoria. Bloquea la respuesta del webserver hasta obtener respuesta de la BD. El caché de usuarios anónimos es pobre o ineficiente. ● • • • • • Apache Solr es un motor de búsqueda configurable. ● ● ● ● ● Se integra fácilmente con Drupal Podemos personalizar los resultados. Eliminamos la carga de búsqueda a la BD. Se puede hacer uso de facets para filtrar los resultados de búsquedas Permite exponer contenidos “relacionados” ● https://drupal.org/project/apachesolr D7 para alto rendimiento
  30. 30. Nivel avanzado de optimización ● Varnish 3.0 es la opción más utilizada (no es la única). ● Permite reducir el número de hits que llegan al servidor web. ● Maneja archivos de scripting para evaluar cómo se debe manejar las solicitudes. ● Permite hacer balanceo de carga entre múltiples servidores. ● Podemos configurar un “fallback” en caso de que el pool de servidores web no responda. ● Puede alterar las cabeceras de respuesta para eliminar o agregar elementos. ● Se puede integrar con reglas y el módulo expire: ● https://drupal.org/project/expire • Permite integrarse con ESI para generar contenido dinámico. D7 para alto rendimiento
  31. 31. ¿Qué es ESI? ● Edge Side Includes (http://en.wikipedia.org/wiki/Edge_Side_Includes) ● Generación de contenido dinámico en base a páginas estáticas. ● Se integra con Varnish, Akamai, Squid y NginX Módulo de Drupal ● https://drupal.org/project/esi ● Permite integrar contenido dinámico para usuarios logueados disminuyendo el consumo de recursos. ● D7 para alto rendimiento
  32. 32. Nivel avanzado de optimización ● Integración de CDN ● Se elimina completamente los hits al servidor para archivos estáticos. ● Redes CDN comerciales: ● Akamai ● Amazon ● Cloudflare ● Rackspace ● CDN Falso ● Enlace de comunicación separado para ese servidor ● Reduce el costo inicial de la infraestructura. ● Distribuye parte del contenido ● Soporta los métodos Pull y Request ● Se utiliza la aplicación FileConveyor para distribución de contenido y el módulo CDN para actualizar rutas: ● https://drupal.org/project/cdn D7 para alto rendimiento
  33. 33. Cloudflare (Opcional) • Plataforma SAS para optimizar y mejorar rendimiento de un sitio web. D7 para alto rendimiento
  34. 34. Cloudflare (Opcional) • CDN.- Content Delivery Network Distribuye copias del contenido estático dentro de su red (javascript, imágenes, css). ● Tiene servidores distribuidos dentro de diferentes zonas geográficas. ● Opción de optimizar el contenido ● Minimizar js, css. Firewall de aplicación (Servicio Pro) Proxy inverso Protección contra ataques. Se puede integrar por medio de un módulo de Drupal: ● https://drupal.org/project/cloudflare ● Utilizando reglas se puede forzar la limpieza del caché de archivos de cloudflare. ● • • • • D7 para alto rendimiento
  35. 35. Mahout (Opcional) • Permite hacer el cálculo de recomendaciones en base a matrices. • El procesamiento se hace fuera del servidor web. • Actualiza tablas en Drupal para poder obtener información como: ● ● ● ¿Qué vieron otros usuarios? Nodos similares ● Por usuario ● Por rol ● Por historial de navegación ● Por banderas “flags” Venta cruzada D7 para alto rendimiento

×