viernes, 10 de abril de 2015

Comenzamos la Práctica 4

Para medir el rendimiento de un servidor necesitaremos una herramienta que ejecutar en una o varias máquinas "clientes" para crear una carga HTTP específica. En algunos casos, las medidas se realizan con benchmarks como SPECweb o WebStone para simular un número determinado de clientes. Puesto que el número de usuarios de un servidor web puede ser del orden de los millones de usuarios, queda claro que simular un número pequeño de clientes no es realista. Sin embargo, en algunos entornos, no nos quedará más remedio que usar herramientas que generan el tráfico.

Existen diversas herramientas para comprobar el rendimiento de servidores web. Las hay basadas en interfaz de línea de comandos y de interfaz gráfica. Entre las más utilizadas destacan:
  • Apache Benchmark
  • httperf
  • openwebload
  • the grinder
  • OpenSTA
  • JMeter
Con ellas podemos comprobar el rendimiento de un servidor web, ya sea del hardware o software, o de alguna modificación que le hayamos hecho.

Lo habitual es usar programas de línea de comandos que sobrecarguen lo mínimo posible las máquinas que estamos usando. Es importante usar siempre la misma máquina "cliente" para hacer las ejecuciones que generan el tráfico (la cuarta máquina, a la derecha en la siguiente imagen, en la que se ejecutan los benchmarks). Además, esa máquina tiene que ser independiente de las que forman la granja web. Podemos crear una cuarta máquina virtual o bien usar un terminal en nuestro ordenador anfitrión.


En esta práctica proponemos usar las siguientes herramientas para comprobar el rendimiento de nuestra granja web recién configurada (aunque se pueden usar otras herramientas que encontremos):

La idea de esta práctica es comparar los resultados de rendimiento de tres configuraciones: (1) máquina sola, (2) granja con nginx, (3) granja con haproxy con varias herramientas.


Apache Benchmark

Apache Benchmark (ab) es una utilidad que se instala junto con el servidor Apache y permite comprobar el rendimiento de cualquier servidor web, por sencillo o complejo que sea. Con esta herramienta podemos analizar el rendimiento de servidores Apache, Internet Information Services (IIS), nginx, etc.

Para ejecutarla, entramos en un terminal en la máquina cliente y ejecutamos el comando:
ab -n 1000 -c 10 http://ipmaquina/test.html
Los parámetros indicados en la orden anterior le indican al benchmark que solicite la página con dirección http://ipmaquina/test.html 1000 veces (-n 1000 indica el número de peticiones) y hacer esas peticiones concurrentemente de 10 en 10 (-c 10 indica el nivel de concurrencia). Esos parámetros generan una carga muy baja; probablemente tengamos que usar valores mucho mayores en ambos casos.

ab no simula con total fidelidad el uso del sitio web que pueden hacer los usuarios habitualmente (en realidad, ninguna herramienta lo hará). Pide el mismo recurso (misma página) repetidamente. Sin embargo, va bien para testear cómo se comporta el servidor antes y después de modificar cierta configuración

Con esta herramienta, de todas las medidas que nos ofrece, vamos a recoger: "Time taken for tests", "Failed requests", "Requests per second" y "Time per request".

¿Cómo realizar los tests con "ab"?
Para realizar los tests con ab, debemos generar el tráfico en la cuarta máquina (externa a la granja web) y hacer baterías de ejecuciones a las siguientes configuraciones:
  1. una carga concreta a la IP de un servidor solo (puede ser la máquina final M1 o la M2)
  2. la misma carga a la IP del balanceador teniendo el nginx como software de balanceo
  3. la misma carga a la IP del balanceador teniendo el haproxy como software de balanceo
Haremos un mínimo de 5 ejecuciones con ese nivel de carga y con cada configuración, y recogeremos los datos en una hoja de cálculo. Luego calculamos una tabla con medias y desviación estándar para cada uno de los tres casos, y representamos gráficamente estos valores de forma que podamos analizar y comparar adecuadamente los resultados obtenidos, ofreciendo unas conclusiones acerca de lo observado.


httperf

httperf es otra herramienta para medir el rendimiento de sitios web. Originalmente se desarrolló en los laboratorios de investigación de Hewlett-Packard.

Para llevar a cabo un test, debemos ejecutarla en los clientes (recordemos que son máquinas independientes a las que forman la granja web). Si tenemos varios clientes, deberíamos hacer la ejecución en todos simultáneamente.

Como ejemplo de comando de ejecución:
httperf --server ipmaquina --port 80 --uri /prueba.html \
   --rate 150 --num-conn 27000 --num-call 1 --timeout 5
Por la forma en que genera el tráfico, siempre que usemos los mismos parámetros tardará el mismo tiempo en la ejecución (a diferenca del ab).

Con esta herramienta, de todas las medidas que nos ofrece, vamos a recoger: "Total connections", "replies", "Request rate" y "Errors total".

OpenWebLoad

Es otra herramienta de línea de comandos para medir el rendimiento de servidores web.

Si queremos simular diez clientes simultáneos, la ejecutaremos con:
openload ipmaquina 10
Hay dos parámetros (se parecen mucho a los de las herramientas anteriores): la URL de la página en el servidor a evaluar, y el número de clientes simultáneos que simularemos.

Con esta herramienta vamos a recoger las siguientes medidas: "Total TPS", "Avg. Response time" y "Max Response time"


Nota 1: Las métricas obtenidas con las tres herramientas son muy diferentes entre sí, por lo que no debemos comparar lo obtenido con con las herramientas utilizadas. La idea es comparar los resultados de rendimiento entre las tres configuraciones (máquina sola, granja con nginx, granja con haproxy) con cada herramienta.

Nota 2: Hemos propuesto tres herramientas de las muchas que existen. Si conocéis alguna otra diferente, o queréis usar otra diferente a las descritas aquí, hacedlo con total libertad.


No hay comentarios:

Publicar un comentario