Pruebas de performance, carga y de estrés

Una ayuda-memoria breve, para tener claros tres conceptos que a veces se confuden:

  • Una prueba de performance tiene como objetivo eliminar “cuellos de botella” en la ejecución de una aplicación y poder determinar una medida aceptable para su funcionamiento, por ejemplo, cuál es un tiempo de respuesta aceptable y la carga esperada en relación al número de usuarios concurrentes. Con estas metas definidas, comienza un proceso de poder detectar y optimizar los procesos donde se entrampa la ejecución del software.
  • En un test de carga, el proceso consiste en aumentar progresivamente la carga en el sistema, a través de herramientas automatizadas; en una aplicación web esto significa examinar cómo se comporta la aplicación con distintos niveles de usuarios concurrentes. El objetivo principal es asegurar que la aplicación alcanza los objetivos de performance establecidos en las pruebas de performance.
  • Las pruebas de estrés buscan forzar una falla del sistema a través del consumo excesivo de sus recursos; con el objetivo de examinar cómo falla y vuelve a su funcionamiento normal.

A partir de esto, podemos entender que estos tres tipos de pruebas apuntan a dominios y objetivos distintos: el primero, a la optimización (que la aplicación funcione rápido), el segundo a la resistencia (que la aplicación funcione rápido aun con muchos usuarios), y el tercero, a la recuperabilidad (que la aplicación continúe funcionando incluso después de que el servidor se haya reiniciado o se haya agotado su espacio en disco).

En el proceso de optimización, además de las mejoras propias al funcionamiento de la aplicación, debemos considerar una serie de mecanismos alternativos para poder asegurar su buen funcionamiento, tales como:

  • Optimización del servidor de base de datos (por ejemplo, caché de consultas, contemplar un/os servidor/es dedicado/s para bases de datos, etc).
  • Caché de objetos para evitar lecturas desde base de datos (memcached, APC, etc).
  • Utilización de sistemas de caché estático (nginx como proxy inverso, Varnish, etc).
  • Escalar vertical u horizontalmente los servidores web (a través de un balanceador de carga).

… aunque como leí por ahí, hay que tener en cuenta que optimizar para performance (solamente para performance) no es lo mismo que optimizar para carga (es decir, pueden existir algunas alternativas que permitan servir una mayor cantidad de usuarios simultáneos, pero no necesariamente de forma más rápida para cada uno de ellos).

Más información en: Agile Testing: Performance vs. load vs. stress testing

Foto: Shell Games por Lazlo Ilyes

VPS local con Ubuntu y VirtualBox

Montar un servidor privado para pruebas locales con VirtualBox y Ubuntu puede resultar una buena forma de experimentar antes de hacer el salto a un VPS

Hace algún tiempo publiqué una rápida revisión de enlaces con algunos artículos con información de [cómo montar un VPS->Intentando montar un VPS].

Entonces, mi intención era crear una [máquina virtual->Máquinas virtuales en Ubuntu/Linux] para poder comenzar a experimentar con algunas cosas en forma local — decidirse por un VPS implica un conocimiento técnico suficiente para hacer frente a cosas por las que en un alojamiento compartido jamás tendrías que preocuparte, como instalar y configurar Apache u otro servidor web, firewall, seguridad, asegurar rendimiento, etc… acá no estarás haciendo las cosas por medio de algún panel de control, sino probablemente lo tengas que hacer todo por consola, por lo que montar una máquina virtual en local es una buena opción si no quieres estar pagando por un servicio sólo para experimentar. Al final, si eres lo bastante aplicado, deberías terminar con una configuración que quede como un guante (perfectamente adaptada a tus requerimientos) y con el conocimiento necesario para aventurarte en algún proyecto público.

Continue reading “VPS local con Ubuntu y VirtualBox”