Antipatrones de rendimiento para aplicaciones en la nubePerformance antipatterns for cloud applications

Un antipatrón de rendimiento es una práctica habitual que puede provocar problemas de escalabilidad cuando una aplicación está bajo presión.A performance antipattern is a common practice that is likely to cause scalability problems when an application is under pressure.

Este es un escenario común: una aplicación se comporta correctamente durante las pruebas de rendimiento.Here is a common scenario: An application behaves well during performance testing. Se pasa a producción y empieza a tratar cargas de trabajo reales.It's released to production, and begins to handle real workloads. En ese momento, empieza a mostrar un rendimiento deficiente y a rechazar solicitudes del usuario, demorarse o generar excepciones.At that point, it starts to perform poorly—rejecting user requests, stalling, or throwing exceptions. El equipo de desarrollo se enfrenta entonces a dos cuestiones:The development team is then faced with two questions:

  • ¿Por qué no se dio este comportamiento durante las pruebas?Why didn't this behavior show up during testing?
  • ¿Cómo se corrige esto?How do we fix it?

La respuesta a la primera pregunta es sencilla.The answer to the first question is straightforward. 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.It's difficult to simulate real users in a test environment, along with their behavior patterns and the volumes of work they might perform. La única manera completamente segura de comprender cómo se comporta un sistema bajo carga es observarlo en producción.The only completely sure way to understand how a system behaves under load is to observe it in production. Es preciso aclarar que no estamos sugiriendo que deba omitir las pruebas de rendimiento.To be clear, we aren't suggesting that you should skip performance testing. Resultan cruciales para obtener las métricas de rendimiento de línea de base.Performance tests are crucial for getting baseline performance metrics. Pero debe estar preparado para observar y corregir los problemas de rendimiento que surjan en el sistema real.But you must be prepared to observe and correct performance issues when they arise in the live system.

La respuesta a la segunda cuestión, cómo corregir el problema, es menos sencilla.The answer to the second question, how to fix the problem, is less straightforward. Diversos factores podrían influir y, a veces, el problema solo se presenta en determinadas circunstancias.Any number of factors might contribute, and sometimes the problem only manifests under certain circumstances. 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.Instrumentation and logging are key to finding the root cause, but you also have to know what to look for.

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.Based on our engagements with Microsoft Azure customers, we've identified some of the most common performance issues that customers see in production. Para cada antipatrón, se describe por qué se suele producir, sus síntomas y las técnicas para solucionar el problema.For each antipattern, we describe why the antipattern typically occurs, symptoms of the antipattern, and techniques for resolving the problem. También se proporciona código de ejemplo que ilustra tanto el antipatrón como la solución sugerida.We also provide sample code that illustrates both the antipattern and a suggested solution.

Algunos de estos antipatrones pueden parecer una obviedad cuando lea las descripciones, pero se producen con más frecuencia de lo que se podría pensar.Some of these antipatterns may seem obvious when you read the descriptions, but they occur more often than you might think. A veces, una aplicación hereda un diseño que funcionaba de forma local, pero no se escala en la nube.Sometimes an application inherits a design that worked on-premises, but doesn't scale in the cloud. 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.Or an application might start with a very clean design, but as new features are added, one or more of these antipatterns creeps in. En cualquier caso, esta guía le ayudará a identificarlos y corregirlos.Regardless, this guide will help you to identify and fix these antipatterns.

Catálogo de antipatronesCatalog of antipatterns

Esta es la lista de los antipatrones que hemos identificado:Here is the list of the antipatterns that we've identified:

AntipatrónAntipattern DescripciónDescription
Base de datos ocupadaBusy Database Descarga demasiados procesos en un almacén de datos.Offloading too much processing to a data store.
Front-end ocupadoBusy Front End Mueve las tareas que consumen muchos recursos a subprocesos en segundo plano.Moving resource-intensive tasks onto background threads.
E/S locuazChatty I/O Envía continuamente muchas solicitudes pequeñas de red.Continually sending many small network requests.
Recuperación superfluaExtraneous Fetching Recupera más datos de lo que es necesario, lo que da lugar a E/S innecesarias.Retrieving more data than is needed, resulting in unnecessary I/O.
Instanciación incorrectaImproper Instantiation Crea y destruye objetos varias veces que están diseñados para compartirse y reutilizarse.Repeatedly creating and destroying objects that are designed to be shared and reused.
Persistencia monolíticaMonolithic Persistence Utiliza el mismo almacén de datos para datos con patrones de uso muy diferentes.Using the same data store for data with very different usage patterns.
Sin almacenamiento en cachéNo Caching No se puede almacenar datos en caché.Failing to cache data.
E/S sincrónicaSynchronous I/O Bloquea el subproceso de llamada mientras se completa la E/S.Blocking the calling thread while I/O completes.

Pasos siguientesNext steps

Para más información sobre del ajuste del rendimiento, consulte Ajuste del rendimiento de una aplicación distribuidaFor more about performance tuning, see Performance tuning a distributed application