Pruebas de rendimiento y antipatrones para aplicaciones en la nube

Los antipatrones de rendimiento, al igual que los patrones de diseño, son procesos e implementaciones defectuosos habituales dentro de las organizaciones. Procedimientos habituales que es probable que provoquen problemas de escalabilidad cuando una aplicación está bajo presión. El conocimiento de estas prácticas puede ayudar a simplificar la comunicación de conceptos de alto nivel entre los profesionales del software, y el conocimiento de antipatrones puede ser útil al revisar el código o diagnosticar problemas de rendimiento.

Este es un escenario común: una aplicación se comporta correctamente durante las pruebas de rendimiento. Se pasa a producción y empieza a tratar cargas de trabajo reales. En ese momento, empieza comportarse mal (rechazan las solicitudes del usuario, se detienen o generando excepciones). El equipo de desarrollo se enfrenta entonces a dos cuestiones:

  • ¿Por qué no se dio este comportamiento durante las pruebas?
  • ¿Cómo se corrige esto?

La respuesta a la primera pregunta es sencilla. Es difícil simular a usuarios reales en un entorno de prueba, junto con sus patrones de comportamiento y los volúmenes de trabajo que podrían generar. La única manera completamente segura de comprender cómo se comporta un sistema bajo carga es observarlo en producción. Es preciso aclarar que no estamos sugiriendo que deba omitir las pruebas de rendimiento. Las pruebas de rendimiento resultan cruciales para obtener las métricas de rendimiento de línea de base. Pero debe estar preparado para observar y corregir los problemas de rendimiento que surjan en el sistema real.

La respuesta a la segunda cuestión, cómo corregir el problema, es menos sencilla. Diversos factores podrían influir y, a veces, el problema solo se presenta en determinadas circunstancias. La instrumentación y el registro son factores clave para buscar la causa raíz, pero también tiene que saber lo que se debe buscar.

Según nuestras interacciones con los clientes de Microsoft Azure, hemos identificado algunos de los problemas de rendimiento más comunes que observan en producción. Para cada antipatrón, se describe por qué se suele producir, sus síntomas y las técnicas para solucionar el problema. También se proporciona código de ejemplo que ilustra tanto el antipatrón como la solución de escalabilidad sugerida.

Algunos de estos antipatrones pueden parecer una obviedad cuando lees las descripciones, pero se producen con más frecuencia de lo que se podría pensar. A veces, una aplicación hereda un diseño que funcionaba de forma local, pero no se escala en la nube. O una aplicación podría iniciarse con un diseño muy limpio, pero, cuando se agregan características nuevas, se cuelan uno o varios de estos antipatrones. En cualquier caso, esta guía le ayudará a identificarlos y corregirlos.

Catálogo de antipatrones

Esta es la lista de los antipatrones que hemos identificado:

Antipatrón Descripción
Base de datos ocupada Descarga demasiados procesos en un almacén de datos.
Front-end ocupado Mueve las tareas que consumen muchos recursos a subprocesos en segundo plano.
E/S locuaz Envía continuamente muchas solicitudes pequeñas de red.
Recuperación superflua Recupera más datos de lo que es necesario, lo que da lugar a E/S innecesarias.
Instanciación incorrecta Crea y destruye objetos varias veces que están diseñados para compartirse y reutilizarse.
Persistencia monolítica Utiliza el mismo almacén de datos para datos con patrones de uso muy diferentes.
Sin almacenamiento en caché No se puede almacenar datos en caché.
Vecino ruidoso Un solo inquilino usa una cantidad desproporcionada de recursos.
Carga masiva de reintentos Reintenta las solicitudes erróneas a un servidor con demasiada frecuencia.
E/S sincrónica Bloquea el subproceso de llamada mientras se completa la E/S.

Pasos siguientes

Para más información sobre del ajuste del rendimiento, consulte Ajuste del rendimiento de una aplicación distribuida