SB IT Media, S.L. Check-list de Rendimiento y Escalabilidad Drupal. Derivada de la “Drupal Performance and Scalability Checklist” de la Drupal Performance Agency con licencia Creative Commons Attribution-ShareAlike2.0 Pedro González Serrano 01/04/2011 Motivación Este documento, en forma de lista de comprobación, pretende ayudar a definir una estrategia efectiva para mejorar el rendimiento y planificar la escalabilidad de sus sitios impulsados por Drupal. Este documento está basado en “Drupal Performance and Scalability Checklist” de la “Drupal Performance Agency” (http://tag1consulting.com/Drupal_Performance_Agency), publicado con licencia Creative Commons Attribution-ShareAlike2.0. Maque las casillas que procedan, tache lo que no proceda, rellene los huecos si es aplicable e incluya cualquier información que estime oportuna. Objetivos de negocio Determine qué objetivos de negocio están motivando estos ajustes de rendimiento. Tasa de crecimiento. Impresiones de anuncios. Medidas de la unidad de negocio: ___________________________________________ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Metas cuantitativas Determine qué metas cuantitativas están motivando estos ajustes de rendimiento. Vistas de página mensuales: _______________________________________________ Tiempos de carga: Anónimos: ______________________ Registrados: _____________________ Tiempos de generación (tiempo que emplea el servidor en generar el HTML): Anónimos: ______________________ Registrados: _____________________ Pico semanal (o máximo puntual): Anónimos: ______________________ Registrados: _____________________ Nº de usuarios mensuales: Anónimos: ______________________ Registrados: _____________________ Nº de susciptores: _____________ Tiempo de carga portada: __________ Nº de feeds: _____________________ Tiempo de carga pág. más lenta: _____ Tiempo de carga primera visita: ______ Tiempo de envío de contenido: ______ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Gestión de riesgos Determine qué objetivos de gestión de riesgo están motivando estos ajustes de rendimiento. Alta disponibilidad Ventana aceptable de pérdida de datos: _____________________________________ Tiempo aceptable fuera de servicio: _________________________________________ Ventana de recuperación de datos: __________________________________________ Recuperación de fallo catastrófico: __________________________________________ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Otros objetivos Determine cualquieras otras metas que estén motivando estos ajustes de rendimiento. Medir de forma precisa el rendimiento del sitio. Encontrar y documentar cuellos de botella de rendimiento. Solucionar cuellos de botella de rendimiento. Afrontar específicos problemas de rendimiento conocidos con anterioridad: _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Mejorar el rendimiento del “core” de Drupal, contribuyendo las mejoras de vuelta al proyecto bajo GPL. _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Disponibilidad Antes de hacer cualquier cambio en su infraestructura, es crítico que implemente y pruebe una estrategia efectiva de backup. Almacenar todos los archivos de configuración en un sistema de control de versiones. Detalles: _______________________________________________________________ Copias de respaldo regulares. Realización cada ___________, manteniendo ___ copias. Almacenamiento de las copias en otra localización. Detalles: _____________________ Replicación de base de datos. Detales: _______________________________________ Replicación de archivos. Detalles: ___________________________________________ ¿Cuántas horas de datos puede permitirse perder en el caso de un fallo catastrófico de la base de datos?: _______________________________________________________ RAID: Hardware: _______________________ Software: _______________________ DRDB. Detalles: _________________________________________________________ Redundancia de red: _____________________________________________________ Backups validados por última vez: ___________________________________________ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Procesos Esta sección está destinada a entender los procesos que emplea para gestionar su sitio. Servidor(es) de desarrollo: _________________________________________________ Servidor(es) de integración (staging): ________________________________________ Proceso formal de despliegue (deployment) de nuevo código: ____________________ _______________________________________________________________________ Lista(s) de correo internas: ________________________________________________ Sistema de seguimiento de bugs: ___________________________________________ Intranet del proyecto: ____________________________________________________ Monitorización Es imprescindible asegurarse, antes de realizar ajustes de rendimiento, de que se dispone de suficientes sistemas de monitorización emplazados con anterioridad. Se monitoriza localmente de forma activa la salud y el rendimiento de todos los sistemas empleando las siguientes herramientas: o Cacti o MySQL Enterprise Monitor o Splunk o Drupal Accesslog o Nagios o _________________________ o Munin o _________________________ o Monit o M/Monit o ________________________ Se monitoriza remotamente la salud y el rendimiento de las siguientes páginas críticas: o Portada (anónimos / registrados) o ________________________________________________________________ o ________________________________________________________________ o ________________________________________________________________ o ________________________________________________________________ o ________________________________________________________________ o ________________________________________________________________ Se monitorizan las páginas con las siguientes herramientas: o Gomez o _________________________ o Keynote o _________________________ o GTmetrix o _________________________ Se analizan regularmente los archivos de registro (logs), especifique las herramientas usadas: o Apache access_log: ________________________________________________ o Apache error_log: _________________________________________________ o Squid access_log: _________________________________________________ o MySQL slow_query_log: ____________________________________________ o PHP error_log: ____________________________________________________ Se monitoriza remotamente el comportamiento del sitio con las siguientes herramientas: o Google Analytics o ______________________ o Google Webmaster Tools o ______________________ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Red Esta sección está diseñada para recabar los detalles completos sobre su infraestructura de red. Recopile y adjunte un diagrama de red actualizado. Velocidad de interconexión entre servidores: _________________________________ Dispositivos de interconexión entre servidores: hubs /switches / virtual adapters / VPN Velocidad de conexión con el exterior (ISP) de sus servidores: o Subida (hacia Internet): ______ o Bajada (desde Internet): _____ Redundancia: ___________________________________________________________ Gestiona sus propios DNS: _________________________________________________ Balanceador(es) de carga: _________________________________________________ Firewalls(s): ____________________________________________________________ Emplea CDN(s): _________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Sistemas En este paso se persigue obtener una comprensión de su infraestructura desde un punto de vista por-servidor. Recopile y adjunte la información pedida para cada máquina (aunque se trate de clones), indicando el nombre de acuerdo al diagrama de red elaborado previamente. Servidores Linux: o Proposito(s): _____________________________________________________ o Distribución(es) y versión(es): _______________________________________ ___________________________________________________________ o Recopile “vmstat 3 20” o Recopile “mount” o Recopile “top –c2” o Recopile “cat o Recopile “ps auxww” /proc/meminfo” o Recopile “netstat -in” o Recopile “cat o Recopile “df -h” /proc/cpuinfo” Servidores BSD: o Proposito(s): _____________________________________________________ o Distribición(es) y versión(es): ________________________________________ o Memoria /CPU: ___________________________________________________ Servidores Windows: o Proposito(s): _____________________________________________________ o Versión(es) y ServicePack(s): ________________________________________ o Memoria /CPU: ___________________________________________________ Balanceador(es) de carga: _________________________________________________ Firewall(s): _____________________________________________________________ Si sus servidores están virtualizados, describa la plataforma y configuración: ________ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ Otros servidores: o ________________________________________________________________ o ________________________________________________________________ o ________________________________________________________________ o ________________________________________________________________ o ________________________________________________________________ o ________________________________________________________________ Aplicaciones Para finalizar pretendemos obtener una visión de su infraestructura por aplicación.Indique claramente en qué máquina se encuentra funcionando cada aplicación y recopila la información pedida para cada instancia (aunque se trate de clones). Servidores web Apache, versión(es): ______________________________________________________ o Recopile apache2.conf, httpd.conf los archivos vhost aplicables y cualquier archivo de configuración cargado mediante “include”. o Recopile la salida de “apache2 -M” (procese “/etc/apache2/envvars” previamente en caso de error) o Recopile la salida de “apache2 -l” (procese “/etc/apache2/envvars” previamente en caso de error) Lighttpd, versión(es): _____________________________________________________ o Recopile lighttpd.conf o Recopile cualquier include aplicable (incluidos archivos .lua para url rewritting) Nginx, versión(es): _______________________________________________________ o Recopile nginx.conf, los archivos vhost aplicables y cualquier archivo de configuración cargado mediante “include”. o Recopile proxy.conf y fastcgi.conf. IIS, versión(es): __________________________________________________________ o Recopile la configuración completa del servidor. Otros. Cual(es), versión(es): ________________________________________________ o Recopile la configuración completa del servidor. Procesadores PHP Utilizando PHP, versión(es): ________________________________________________ Tipo de puente (comunicación) con el servidor web: o CGI o FPM (FastCGI Process o Fast-CGI Manager) o mod_fcgid o Otro: _________________ o mod_php Recopile la salida de phpinfo() Recopile los archivos php.ini aplicables (y los archivos de configuración cargados mediante include) Utilizando opcode cachés. Nombre(s) _______________ Versión(es) _______________ Recopile la salida de apc.php o el archivo equivalente en su opcode caché. Servidores de aplicaciones Java Utilizando Tomcat, Jetty, Otro: ___________. versión(es): _______________________ o Recopile los archivos de configuración Sirviendo las siguientes aplicaciones: o Solr, versión(es): __________________________________________________ Recopile los archivos de configuración o Lucene, versión(es): _______________________________________________ Recopile los archivos de configuración o Otras. Nombre(s) _______________________, versión(es) ________________ Recopile los archivos de configuración Proxy-cachés Utilizando Squid, versión(es): ______________________________________________ o Recopile squid.conf o Recopile los detalles de implementación Utilizando Varnish, versión(es): _____________________________________________ o Recopile default.vcl (o cualquier vcl aplicable) o Recopile varnish (archivo de configuración del daemon) Bases de datos Utilizando MySQL, PerconaDB, MariaDB. Versión(es): ___________________________ o Recopile my.cnf (o equivalente) junto con cualquier archivo de configuración cargado por include. o Recopile “SHOW STATUS” desde un usuario con privilegios o Recopile “SHOW VARIABLES” desde un usuario con privilegios o Recopile “mysqlreport” desde el/los sistema(s) o Recopile “mysqlsla” desde el slow query log Utilizando PostgreSQL, SQLlite, Oracle, MS-SQL Server. Versión(es): _______________ o Recopile cualquier configuración relevante Utilizando Cassandra, MongoDB. Versión(es): _________________________________ o Detalles: ________________________________________________________ o Recopile cualquier configuración relevante Servidores de archivos Utilizando NFS. Versión(es): ________________________________________________ o Modo: kernel / usuario (táchese lo que no proceda) o Recopile “/etc/exports” o Recopile “/proc/net/rpc/nfsd” Utilizando Gluster. Versión(es): _____________________________________________ o Recopile los archivos de configuración y realice un diagrama de conexión de “bricks”. Servidores clave/valor Utilizando Memcached. Versión(es): _________________________________________ o Detalles: ________________________________________________________ o Tipo de conector php: PECL memcache / PECL memcached / otro: __________ o Tipo de conector Drupal: Memcached / CacheRouter / otro: _______________ Utilizando Redis. Versión(es): ______________________________________________ o Detalles: ________________________________________________________ o Tipo de conector Drupal: ___________________________________________ Drupal Utilizando Drupal / Pressflow. Versión(es): ____________________________________ o Recopile una lista de todos los módulos del core habilitados o Recopile una lista de todos los parches aplicados al core o Recopile una lista de todos los módulos “contrib” habilitados, versión y parches aplicados. o Recopile una lista de todos los módulos “custom”, junto con su código. o ¿Activada la caché de páginas? Ajustes: _______________________________ o ¿Activado Boost? Ajustes: __________________________________________ o Cualquier detalle relevante: _________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ ________________________________________________________________ Miscelánea Otras aplicaciones no contempladas y sus detalles: o ________________________________________________________________ o ________________________________________________________________ o ________________________________________________________________ o ________________________________________________________________ o ________________________________________________________________ o ________________________________________________________________