Compartir a través de


Pruebas de rendimiento y antipatrones para aplicaciones en la nube

Los antipatrones de rendimiento, muy similares a los patrones de diseño, son procesos e implementaciones defectuosos comunes en las organizaciones. Estos son procedimientos comunes que probablemente causen problemas de escalabilidad cuando una aplicación está bajo presión. La conciencia de estas prácticas puede ayudar a simplificar la comunicación de conceptos de alto nivel entre profesionales de 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 bien durante las pruebas de rendimiento. Se pasa a producción y empieza a tratar cargas de trabajo reales. En ese momento, comienza a funcionar mal: rechazando solicitudes de usuario, atascando o lanzando excepciones. A continuación, el equipo de desarrollo se enfrenta a dos preguntas:

  • ¿Por qué no se mostró este comportamiento durante las pruebas?
  • ¿Cómo lo corregimos?

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

La respuesta a la segunda pregunta, cómo corregir el problema, es menos sencilla. Cualquier número de factores puede contribuir y, a veces, el problema solo se manifiesta en determinadas circunstancias. La instrumentación y la recopilación de logs son clave para encontrar la causa raíz, pero también debes saber qué buscar.

En función de nuestras interacciones con los clientes de Microsoft Azure, hemos identificado algunos de los problemas de rendimiento más comunes que ven los clientes en producción. Para cada antipatrón, se describe por qué se produce normalmente el antipatrón, los síntomas del antipatrón y las técnicas para resolver el problema. También se proporciona código de ejemplo que ilustra tanto el antipatrón como una solución de escalabilidad sugerida.

Algunos de estos antipatrones pueden parecer obvios al leer las descripciones, pero se producen con más frecuencia de lo que podría pensar. A veces, una aplicación hereda un diseño que funcionaba en el entorno local, pero que 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. De cualquier manera, esta guía te ayudará a identificar y corregir estos antipatrones.

Catálogo de antipatrones

Esta es la lista de antipatrones que hemos identificado:

Antipatrón Descripción
Base de datos ocupada Delegar demasiado procesamiento en una base de datos.
Front-end ocupado Mover tareas que consumen muchos recursos a subprocesos en segundo plano.
E/S locuaz Enviar continuamente muchas solicitudes de red pequeñas.
Recuperación superflua Recuperar más datos de los necesarios, lo que da lugar a una E/S innecesaria.
Instanciación incorrecta Crear y destruir objetos que están diseñados para compartirse y reutilizarse repetidamente.
Persistencia monolítica Usar el mismo almacén de datos para los datos con patrones de uso muy diferentes.
Sin almacenamiento en caché No se puede almacenar datos en caché.
vecino ruidoso Un único inquilino usa una cantidad desproporcionada de los recursos.
Carga masiva de reintentos Reintentar las solicitudes con errores a un servidor con demasiada frecuencia.
E/S sincrónica Bloquea el subproceso de llamada mientras se completa la E/S.

Pasos siguientes

Para obtener más información sobre el ajuste del rendimiento, consulte Eficiencia del rendimiento en el marco bien diseñado.