Este documento presenta un plan de acción para optimizar servidores web de software libre como LAMP (Linux, Apache, MySQL, PHP). Se detallan los pasos para instalar LAMP, el sistema de gestión de aprendizaje Chamilo, y herramientas como Firebug, Apache Benchmark, XHProf, APC, MemCache, Munin, Expires y Monit. El objetivo es medir el rendimiento, mejorar el uso de recursos y garantizar la disponibilidad de los servicios mediante la configuración y supervisión adecuadas.
Taller de optimizacion de servidores web tipo LAMP
1. Octubre 2012, Puebla, México
Optimización de servidores web
de software libre
Yannick Warnier
2. Plan de acción
● LAMP
● Chamilo
● Firebug
● Apache Benchmark
● XHProf
● APC y MemCache
● Munin
● Expires
● Monit
3. Instalación LAMP
● En Windows
● Descargar EasyPHP o WAMP o XAMPP
● Instalar
● En GNU/Linux Debian o Ubuntu
sudo apt-get install
●
libapache2-mod-php5 php5-mysql mysql-server
Nota : PHP 5.4 más eficiente
4. Instalación de Chamilo LMS
● http://code.google.com/p/chamilo > Download
● Descomprimir en /var/www
● Crear un VirtualHost de Apache
● Registrar nombre en /etc/hosts
● Crear cuenta MySQL
● Cargar página de instalación
● Seguir procedimiento paso a paso
5. Primera medición
con Firebug y YSlow
● Firebug, extensión de Firefox
● Usar pestaña « red » para tiempo de carga
● Yslow, extensión de Firefox
● Lanzar sobre sitio. Ignorar falta de CDNs
6. Apache Benchmark
● La clásica : ab -c 10 -n 100 http://misitio.com/
● Para simular una conexión : usar -C o -H
● -C indica un cookie
● -H indica un header
7. XHProf
● Librería de análisis publicada por Facebook
● Permite medir
● uso de ciclos de procesador
● uso de memoria
8. APC
● APC (Another PHP Cache) es un módulo
de PHP que permite pre-interpretar
scripts PHP
● Instalación :
● apt-get install php5-dev
● pear install apc
● Configuración : activar y asignar espacio
en memoria
10. Munin
● Munin permite seguir cambios en el tiempo
11. Expires
● Las imágenes cambian poco
● Los usuarios regresan mucho al mismo sitio
● Si los usuarios guardan esta info en caché
● Ya no se necesita cargarla cada vez
● Se reduce (mucho) el tráfico (16GB->2GB)
<Directory /var/www/vhost/subdomains/nuevo/httpdocs/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
ExpiresByType image/gif "access plus 1 day"
ExpiresByType image/jpg "access plus 1 day"
ExpiresByType image/png "access plus 1 day"
</Directory>
12. Monit
● Que pasa cuando un servicio se cae
o entra en sobrecarga ?
● Monit permite configurar límites y
● Enviar correos
● Reiniciar servicios
13. Varnish
● Si muchos usuarios piden la misma página
● En un tiempo corto
● Se puede almazenar la página en un
● servicio de reverse-caché
Estas diapositivas sirven de base para el taller de introducción a la optimización de sevidores web realizado por BeezNest.
Nuestro plan de acción será, en base a la aplicación Chamilo (PHP, MySQL, Apache), de revisar la pila de software usada, herramientas de análisis de carga, de alertas, y de optimización simple.
Para instalar la capa de software necesaria (tomando como referencia Ubuntu), unos comandos cortos serán suficientes. Los paquetes elegidos indicarán sus propios requerimientos Apache sirve como servidor web (entrega las páginas HTML) MySQL se usa como servidor de bases de datos (se almacenan los datos necesarios para la aplicación) PHP traduce el código PHP, con la ayuda de datos que recupera en la base de datos, en una página HTML entregada por el servidor web (Apache) al usuario
Chamilo se puede instalar en unos pasos simples. La elaboración del VirtualHost es un ejercicio parte del taller, que representa una serie de ventajas a nivel de personalización y optimización de un sitio en particular (más todavía si el servidor en el cual se aloja ofrece varios sitios).
Firebug es una herramienta (plugin) de Firefox que permite analizar de forma precisa las razones de lentitud de un sitio web desde el punto de vista del navegador del usuario : peso de las imágenes, tiempo para contactar el servidor, imágenes que generan errores, etc. Principalmente a través de su pestaña « Red » Yslow es una herramienta (también plugin de Firefox, aunque tiene su versión online) que analiza en más detalles la adecuación con unas recomendaciones generales a nivel de optimización de sitios web.
Apache Benchmark es un aplicativo chiquito proveido por el paquete apache2-utils bajo Ubuntu. Se lanza en línea de comando con unos parámetros simples que permitirán « simular » una carga de usuarios en su sitio. El parámetro « -c » indica la cantidad de pedidas simultáneas (« c » para « concurente ») El parámetro « -n » (« número ») indica la cantidad de pedidas que hacer al sitio. Ojo que este sistema solo descarga la página principal (HTML) y no los recursos vinculados (imágenes, JS, CSS), lo que tiene que ser tomado en cuenta al momento de realizar pruebas, ya que no representa exactamente la situación como usuario.
Xhprof es algo complicado de instalar (ver referencia) pero permite analizar con precisión los pasos más lentos de la generación (PHP) de una página, y obviamente dedicar tiempo a los pasos que más importan. http://techportal.inviqa.com/2009/12/01/profiling-with-xhprof/
APC optimiza la carga de páginas PHP por guardar en memoria versiones pre-compiladas de los scripts usados. Su instalación y activación es generalmente suficiente para lograr buenos resultados, aunque puede ser causa de comportamientos extraños que generarán frustración de parte de los usuarios.
Memcache es un « servidor de caché distribuido», es decir que actua como una base de datos (para menores cantidades de información) exclusivamente almacenado en memoria, y posiblemente distribuido entre varios servidores. Esto permite alcanzar mayores celeridades para, por ejemplo, el almacenamiento de datos de sesiones de usuarios.
Munin tiene que ser configurado con paciencia y a través de varias « rondas » de afinamiento, ya que requiere de un cliente que colecta, y de un servidor que muestra la información colectada. Ambos servidores pueden estar en la misma máquina. Los gráficos permiten tener un registro « histórico » de los momentos de mayor carga, mayor uso de memoria o latencia en el disco (y mucho más). Es relativamente fácil diseñar sus propios módulos Munin para aplicaciones específicas. Ver http://munin-monitoring.org/wiki/HowToWritePlugins
Expires es un módulo poco conocido de Apache, que permite definir tiempos de expiración para cada recurso en un servidor, por ejemplo, definir que los iconos de su sitio web pueden permanecer un mes en caché del navegador del cliente (a menos que este limpie su caché). Esto tiene usualmente un efecto tremendo en reducción de ancho de banda y de llamadas al servidor, ya que, al conocer el periodo de vigencia de algun recurso, el navegador ya ni llama al servidor para verificarlo. Simplemente asume, localmente, que este recurso no ha cambiado. El efecto para el usuario también es impresionante, ya que las páginas en su sitio cargarán mucho menos recursos, y por lo tanto necesitarán mucho menos descargas.
Monit es una herramienta de monitoreo y alertas sobre servicios o estados de un servidor. Permite, por ejemplo, decir que si la carga del sistema pasa por encima de 80 % por más de 2 minutos, se envie un correo electrónico (o un SMS) al administrador del servidor. Esto permite adelantarse y estar al tanto de problemas « por surgir » a nivel del servidor, lo que permite mejorar la relación con el cliente y hacer vigilancia « preventiva y pro-activa »
Varnish puede ser su mejor amigo en términos de optimización de servidores web. Permite hacer micro-caché, caché y balanceo de carga.
BeezNest imparte talleres de optimización de servidores web y consultoría en toda América Latina (ya en México, Perú y Venezuela) y su trabajo ha permitido lograr hasta 60 % de aumento de tráfico y 800 % de reducción de carga, según los casos más exitosos. Para más información, escribir a info@beeznest.com