Recomendaciones para optimizar el código y la infraestructura

Se aplica a esta recomendación de lista de comprobación de eficiencia del rendimiento de Azure Well-Architected Framework:

PE:07 Optimice el código y la infraestructura. Use código que tenga un rendimiento y asegúrese de que descarga las responsabilidades en la plataforma. Use código e infraestructura solo para su propósito principal y solo cuando sea necesario.

En esta guía se describen las recomendaciones para optimizar el rendimiento de la infraestructura y el código. Para optimizar el código y la infraestructura, debe usar los componentes solo para su propósito principal y solo cuando sea necesario. Cuando se sobrecarga el código y la infraestructura, se crea un consumo innecesario de recursos, cuellos de botella y respuestas lentas. Para compensar esas ineficiencias, debe agregar más recursos para realizar las mismas tareas.

Definiciones

Término Definición
Simultaneidad Cuando se realizan varias tareas o procesos a la vez, pero no necesariamente al mismo tiempo.
Arquitectura de CPU Los componentes y principios que afectan al funcionamiento del equipo.
Compresión de datos La acción de reducir el tamaño de los archivos minimizando los datos redundantes.
Montón Un área en memoria usada para las asignaciones de memoria en tiempo de ejecución.
Fuga de memoria Cuando una carga de trabajo no libera memoria asignada después de que la memoria ya no sea necesaria.
Paralelismo Cuando se realizan varias tareas o procesos al mismo tiempo.

Estrategias de diseño principales

La optimización del código y la infraestructura conlleva ajustar el código y la infraestructura auxiliar para mejorar la eficiencia del rendimiento. Requiere código eficaz que ejecuta tareas rápidamente y no desperdicia recursos. Requiere una infraestructura bien diseñada que se optimice para evitar la complejidad innecesaria. Una carga de trabajo debe usar las funcionalidades inherentes de la plataforma. Se trata de un enfoque que ayuda a garantizar que tanto el código como la infraestructura se usen principalmente para sus propósitos principales y solo cuando sea necesario.

Optimización del rendimiento del código

Para optimizar el rendimiento del código, modifique el código para reducir el uso de recursos, minimizar el tiempo de ejecución y mejorar el rendimiento. Puede modificar el código para mejorar la eficiencia y la velocidad de un programa de software. No enmascara los problemas de rendimiento con fuerza bruta. Fuerza bruta significa agregar recursos de proceso para compensar el rendimiento del código, como agregar capacidad adicional en lugar de abordar el origen. Debe corregir problemas de rendimiento con la optimización. Al optimizar el rendimiento del código, ayuda a maximizar el uso de los recursos del sistema, mejora el tiempo de respuesta, reduce la latencia y mejora la experiencia del usuario.

Instrumentación del código

El código de instrumentación hace referencia a la práctica de agregar fragmentos de código o bibliotecas a código que recopilan datos y supervisan el rendimiento del código durante el tiempo de ejecución. La instrumentación de código permite a los desarrolladores recopilar información sobre métricas clave, como el consumo de recursos (CPU, uso de memoria) y el tiempo de ejecución. Mediante la instrumentación de código, los desarrolladores pueden obtener información sobre las rutas de acceso activas del código, identificar cuellos de botella de rendimiento y optimizar el código para mejorar la eficiencia del rendimiento.

En un entorno ideal, debe realizar análisis de código al principio del ciclo de vida de desarrollo de software. Lo anterior detecta un problema de código, lo más barato es corregirlo. Quiere automatizar la mayor parte de este análisis de código posible. Use herramientas de análisis de código dinámico y estático para reducir el esfuerzo manual. Sin embargo, tenga en cuenta que esta prueba sigue siendo una simulación de producción. La producción proporciona la comprensión más clara de la optimización del código.

Compensación: es probable que las herramientas de supervisión de código aumenten los costos.

Identificación de rutas de acceso activas

Al instrumentar el código, puede medir el consumo de recursos para diferentes rutas de acceso de código. Estas medidas le ayudan a identificar las rutas de acceso activas. Las rutas de acceso activas tienen un efecto significativo en el rendimiento y el uso de recursos. Son secciones críticas o ejecutadas con frecuencia de un programa que requieren un alto rendimiento y una latencia baja. Para identificar las rutas de acceso activas del código, tenga en cuenta estos pasos:

  • Analizar datos en tiempo de ejecución: recopile datos en tiempo de ejecución y anótelos para identificar áreas del código que consumen recursos significativos, como operaciones de CPU, memoria o E/S. Busque patrones o secciones de código que se ejecuten con frecuencia o tarden mucho tiempo en completarse.

  • Medir el rendimiento: use herramientas de generación de perfiles o marcos de pruebas de rendimiento para medir el tiempo de ejecución y el consumo de recursos de diferentes rutas de acceso de código. Ayuda a identificar cuellos de botella y áreas para mejorar.

  • Considere la lógica de negocios y el efecto del usuario: evalúe la importancia de las distintas rutas de acceso de código en función de su relevancia para la funcionalidad de la aplicación o las operaciones empresariales críticas. Determine qué rutas de acceso de código son cruciales para entregar valor a los usuarios o cumplir los requisitos de rendimiento.

Optimización de la lógica de código

Optimizar la lógica de código consiste en refinar la estructura y el diseño del código para realizar tareas con menos recursos. La lógica mejorada reduce las operaciones innecesarias. Crea una ejecución más rápida con menos consumo de recursos. Debe quitar las operaciones innecesarias dentro de la ruta de acceso del código que puedan afectar al rendimiento. Dé prioridad a la optimización de las rutas de acceso activas para ver las mayores mejoras en la eficiencia del rendimiento. Para optimizar la lógica de código, tenga en cuenta las estrategias siguientes:

  • Quitar llamadas a funciones innecesarias: revise el código e identifique las funciones que no son esenciales para la funcionalidad deseada y podría afectar negativamente al rendimiento. Por ejemplo, si una llamada de función realiza una validación completada anteriormente en el código, puede quitar la llamada de función de validación innecesaria.

  • Minimizar las operaciones de registro: el registro puede ser útil para la depuración y el análisis, pero el registro excesivo puede afectar al rendimiento. Evalúe la necesidad de cada operación de registro y quite las llamadas de registro innecesarias que no sean críticas para el análisis de rendimiento.

  • Optimización de bucles y condicionales: analice bucles y condicionales en el código e identifique las iteraciones o condiciones innecesarias que se pueden eliminar. Simplificar y optimizar estas estructuras puede mejorar el rendimiento del código. Minimice las llamadas de función dentro de bucles y elimine los cálculos redundantes. Considere la posibilidad de mover cálculos fuera del bucle o mediante la anulación de la inscripción de bucles.

  • Reducir el procesamiento de datos innecesarios: revise el código para las operaciones de procesamiento de datos innecesarias, como cálculos redundantes o transformaciones. Elimine estas operaciones innecesarias para mejorar la eficacia del código.

  • Optimice las estructuras de datos. Para almacenar y recuperar datos de forma eficaz, seleccione estructuras de datos adecuadas, como matrices, listas vinculadas, árboles y tablas hash. Elija la mejor estructura de datos para un problema específico. Una estructura de datos adecuada mejora el rendimiento de la aplicación.

  • Minimizar las solicitudes de red: si el código implica realizar solicitudes de red, minimice el número de solicitudes y optimice su uso. Las solicitudes por lotes siempre que sea posible y eviten recorridos de ida y vuelta innecesarios para mejorar el rendimiento.

  • Minimizar asignaciones: identifique las áreas en las que se produce una asignación excesiva de memoria. Optimice el código reduciendo las asignaciones innecesarias y reutilizando los recursos existentes siempre que sea posible. Al minimizar las asignaciones, puede mejorar la eficiencia de la memoria y el rendimiento general. Use las estrategias adecuadas de administración de memoria y recolección de elementos no utilizados para el lenguaje de programación.

  • Reducir el tamaño de la estructura de datos: evalúe el tamaño de las estructuras de datos, como las clases, e identifique las áreas donde sea posible la reducción. Revise los requisitos de datos y elimine los campos o propiedades innecesarios. Optimice el uso de memoria seleccionando los tipos de datos adecuados y empaquetando los datos de forma eficaz.

  • Use sdk y bibliotecas optimizados para el rendimiento. Use SDK nativos o bibliotecas optimizadas para el rendimiento. Los SDK nativos están diseñados para interactuar con los servicios y los recursos de una plataforma o dentro de un marco. Por ejemplo, los SDK nativos de la nube funcionan mejor con los planos de datos de servicio en la nube que con el acceso de API personalizado. Los SDK se destacan en el control de las solicitudes de red y la optimización de las interacciones. Las bibliotecas optimizadas para el rendimiento, como Math.NET, contienen funciones optimizadas para el rendimiento. Al aplicar las funciones correctamente, puede mejorar el rendimiento de la carga de trabajo.

  • Implementación transversal: tenga en cuenta los efectos de las implementaciones transversales, como middleware o comprobaciones de tokens, y evalúe si afectan negativamente al rendimiento.

Revise las recomendaciones de rendimiento específicas del lenguaje de programación con el que está trabajando. Evalúe el código con estas recomendaciones para identificar áreas para mejorar.

Inconvenientes:

  • La optimización del código y las rutas de acceso activas requiere la experiencia del desarrollador en la identificación de las ineficacias del código es subjetiva y puede ser una persona altamente calificada necesaria para otras tareas.
  • Los SDK proporcionan comodidad y eliminan las complejidades de interactuar con las API. Pero los SDK podrían limitar las opciones de control y personalización para el código personalizado.

Optimización de la administración de memoria

La optimización de la administración de memoria implica refinar la forma en que una carga de trabajo usa, asigna y libera recursos de memoria para mejorar la eficacia. La administración de memoria adecuada mejora el rendimiento del código porque reduce la sobrecarga de las operaciones de memoria. El uso eficaz de la memoria reduce la latencia, evita ralentizaciones o bloqueos del sistema y maximiza el rendimiento de las tareas computacionales. Tenga en cuenta las estrategias siguientes para optimizar la administración de memoria.

Depuración de problemas de memoria. Los volcados de memoria son instantáneas de memoria de la aplicación. Capturan el estado de memoria de una aplicación en un momento dado específico. Los volcados de memoria permiten el análisis retrospectiva de problemas relacionados con la memoria. Seleccione el tipo adecuado de volcado de memoria en función de la naturaleza del problema que está intentando diagnosticar y los recursos disponibles. Debe usar volcados en miniatura para la depuración rutinaria y volcados completos para problemas complejos y críticos. Esta estrategia proporciona un equilibrio entre el uso de recursos y las funcionalidades de diagnóstico. Muchos servicios de hospedaje de código admiten la depuración de memoria. Debe preferir servicios que admitan el análisis de memoria sobre los servicios que no lo hacen. Estos son los pasos básicos para depurar problemas de memoria:

  1. Capturar volcados de memoria: comience configurando un mecanismo para capturar volcados de memoria durante el tiempo de ejecución de la aplicación. La captura se puede desencadenar manualmente, automáticamente o cuando se cumplen condiciones específicas (como el consumo excesivo de memoria). Es posible que algunos servicios en la nube ya ofrezcan este proceso.

  2. Analizar volcados de memoria: después de recopilar los volcados de memoria, anítelos. Numerosas herramientas pueden ayudarle a inspeccionar estos volcados, como WinDbg para aplicaciones windows o GDB para sistemas basados en Unix.

  3. Identificar fugas de memoria: céntrese en identificar las fugas de memoria durante el análisis. Las fugas de memoria surgen cuando la aplicación asigna memoria, pero no se libera cuando ya no se requiere la memoria. Busque objetos o estructuras de datos que permanezcan en memoria incluso cuando se deben desasignar.

  4. Corrección y prueba: al identificar el código problemático, céntrese en resolver los problemas de memoria. Las resoluciones pueden implicar liberar memoria correctamente, optimizar estructuras de datos o volver a evaluar los procedimientos de administración de memoria. Confirme que las soluciones se someten a pruebas rigurosas para garantizar su eficacia.

  5. Iteración y supervisión: la administración de memoria es un proceso continuo. Supervise rutinariamente el uso de memoria de la aplicación y persista en la recopilación de volcados de memoria en producción. Revise periódicamente las fases de análisis y optimización para asegurarse de que los problemas de memoria no vuelvan a aparecer con modificaciones de código posteriores.

Al incorporar el análisis de volcado de memoria en el ciclo de vida de desarrollo de software, puede ampliar la confiabilidad y eficiencia de las aplicaciones. Ayuda a reducir la probabilidad de problemas relacionados con la memoria en producción.

Reducir las asignaciones de memoria. Minimice las asignaciones de memoria para reducir la superficie de memoria general del código. La carga de trabajo puede usar la memoria disponible de forma eficaz. Es menos necesario que el recolector de elementos no utilizados recupere la memoria no utilizada y reduzca la frecuencia y la duración de los ciclos de recolección de elementos no utilizados. Las asignaciones de memoria pueden ser costosas, especialmente si las realiza con frecuencia. Minimice las asignaciones de memoria, por lo que el código se puede ejecutar de forma rápida y eficaz.

Las memorias caché almacenan datos a los que se accede con frecuencia cerca del procesador, lo que mejora el rendimiento. Al minimizar las asignaciones de memoria, hay menos contención para el espacio en caché, por lo que puede usar eficazmente la memoria caché. Un gran número de asignaciones de memoria puede degradar el rendimiento de la aplicación y generar errores. Otras formas de minimizar las asignaciones de memoria incluyen:

  • Variables locales: use variables locales en lugar de variables globales para minimizar el consumo de memoria.

  • Inicialización diferida: implemente la inicialización diferida para aplazar la creación de objetos o recursos hasta que sean necesarios.

  • Búferes: administre los búferes de forma eficaz para evitar asignar búferes de memoria de gran tamaño.

  • Agrupación de objetos: considere la posibilidad de agrupar objetos para reutilizar objetos grandes en lugar de asignarlos y desasignarlos.

Para obtener más información, vea Reducir las asignaciones de memoria y El montón de objetos grandes en sistemas Windows.

Uso de simultaneidad y paralelismo

El uso de simultaneidad y paralelismo implica ejecutar varias tareas o procesos simultáneamente o de forma superpuesta para hacer un uso eficaz de los recursos informáticos. Estas técnicas aumentan el rendimiento general y el número de tareas que una carga de trabajo puede procesar. Al ejecutar tareas simultáneamente o en paralelo, reduce el tiempo de ejecución de la aplicación y disminuye la latencia y aumenta los tiempos de respuesta. La simultaneidad y el paralelismo permiten un uso eficaz de los recursos informáticos, como núcleos de CPU o sistemas distribuidos. La simultaneidad y el paralelismo distribuyen eficazmente la carga de trabajo entre los recursos informáticos.

Use paralelismo. El paralelismo es la capacidad de un sistema para desencadenar simultáneamente varias tareas o procesos en varios recursos informáticos. El paralelismo divide una carga de trabajo en tareas más pequeñas que se ejecutan en paralelo. Puede lograr paralelismo mediante técnicas como multiprocesamiento o computación distribuida. Distribuya tareas entre procesadores de varios núcleos para optimizar la administración de cargas de trabajo. Optimice el código para aprovechar la arquitectura de CPU, los modelos de subprocesos y los procesadores de varios núcleos. Al ejecutar código en paralelo, el rendimiento mejora porque la carga de trabajo se distribuye entre varios núcleos.

Use la simultaneidad. La simultaneidad es la capacidad de un sistema para ejecutar varias tareas o procesos. La simultaneidad permite que diferentes partes de un programa avancen de forma independiente, lo que puede mejorar el rendimiento general. Puede implementar la simultaneidad mediante técnicas como multithreading, en las que varios subprocesos se ejecutan simultáneamente dentro de un único proceso. También puede usar programación asincrónica, en la que las tareas se desencadenan simultáneamente.

  • Programación asincrónica: la programación asincrónica es un enfoque para desencadenar tareas sin bloquear el subproceso principal. La programación asincrónica permite que un programa desencadene tareas mientras espera a que finalicen las operaciones de larga duración. Con la programación asincrónica, el programa puede iniciar varias tareas y esperar a que se completen de forma asincrónica. El programa no tiene que esperar a que finalice cada tarea antes de pasar a la siguiente.

    Hay muchas técnicas y patrones de programación asincrónicos, según el lenguaje de programación y la plataforma. Un enfoque común consiste en usar palabras clave asincrónicas y construcciones, como async y await, en lenguajes como C#. Con estas palabras clave, puede definir métodos asincrónicos. Para el tráfico HTTP, considere la posibilidad de usar el patrón de Request-Reply asincrónico.

    Muchos marcos y bibliotecas proporcionan compatibilidad integrada para la programación asincrónica. Por ejemplo, en la plataforma .NET, puede implementar operaciones asincrónicas mediante patrones como el patrón asincrónico basado en tareas y el patrón asincrónico basado en eventos. La implementación específica de la programación asincrónica varía en función del lenguaje de programación, la plataforma y los requisitos de la aplicación.

  • Colas: una cola es un búfer de almacenamiento ubicado entre un componente solicitante (productor) y el componente de procesamiento (consumidor) de la carga de trabajo. Puede haber varios consumidores para una sola cola. A medida que aumentan las tareas, debe escalar los consumidores para satisfacer la demanda. El productor coloca las tareas en una cola. La cola almacena las tareas hasta que un consumidor tiene capacidad. Una cola suele ser la mejor manera de entregar el trabajo a un servicio de procesamiento que experimenta picos de demanda. Para más información, consulte Patrón de nivelación de carga basado en cola y colas de Storage y colas de Service Bus.

Use agrupar conexiones

La agrupación de conexiones es la práctica de reutilizar conexione de base de datos establecidas en lugar de crear una nueva conexión para cada solicitud. Puede ser costoso establecer una conexión a una base de datos. Tiene que crear una conexión de red autenticada al servidor de bases de datos remoto. Las conexiones de base de datos son especialmente costosas para las aplicaciones que suelen abrir nuevas conexiones. La agrupación de conexiones reutiliza las conexiones existentes y elimina el gasto de abrir una nueva conexión para cada solicitud. La agrupación de conexiones reduce la latencia de conexión y permite un alto rendimiento de la base de datos (transacciones por segundo) en el servidor. Debe elegir un tamaño de grupo que pueda controlar más conexiones de las que tiene actualmente. El objetivo es que el grupo de conexiones controle rápidamente las nuevas solicitudes entrantes.

Descripción de los límites de agrupación de conexiones. Algunos servicios limitan el número de conexiones de red. Cuando se supera este límite, las conexiones pueden ralentizar o finalizar. Puede usar la agrupación de conexiones para establecer un conjunto fijo de conexiones en tiempo de inicio y, a continuación, mantener esas conexiones. En muchos casos, un tamaño de grupo predeterminado puede constar de solo algunas conexiones que se realizan rápidamente en escenarios de prueba básicos. La aplicación puede agotar el tamaño predeterminado del grupo en escala y crear un cuello de botella. Debe establecer un tamaño de grupo que se asigne al número de transacciones simultáneas que se admiten en cada instancia de aplicación.

Pruebe el grupo de conexiones. Cada base de datos y plataforma de aplicaciones tiene requisitos ligeramente diferentes para configurar y usar un grupo. Pruebe el grupo de conexiones para asegurarse de que funciona de forma eficaz bajo carga.

Riesgo: la agrupación de conexiones puede crear fragmentación de grupos y degradar el rendimiento.

Optimización de trabajos en segundo plano

Muchas aplicaciones requieren tareas en segundo plano que se ejecutan independientemente de la interfaz de usuario. La aplicación puede iniciar el trabajo y seguir procesando solicitudes interactivas de los usuarios. Algunos ejemplos de trabajos en segundo plano son los trabajos por lotes, las tareas intensivas del procesador y los procesos de larga duración, como los flujos de trabajo. Las tareas en segundo plano no deben bloquear la aplicación ni provocar incoherencias debido a una operación retrasada cuando el sistema está bajo carga. Para mejorar el rendimiento, puede escalar instancias de proceso que hospedan tareas en segundo plano. Para obtener más información, consulte Trabajos en segundo plano y Consideraciones de escalado y rendimiento.

Optimización del rendimiento de la infraestructura

Optimizar el rendimiento de la infraestructura significa mejorar y ajustar los elementos de infraestructura para garantizar el máximo funcionamiento y el mejor uso de los recursos para una carga de trabajo. Al ajustar la infraestructura, puede minimizar los residuos, reducir los retardos y lograr más con los recursos disponibles. Garantiza que las cargas de trabajo se ejecuten de forma confiable y rápida, lo que da lugar a experiencias de usuario mejoradas y ahorros de costos. Para optimizar el rendimiento de la infraestructura, tenga en cuenta las estrategias siguientes:

Agregue límites de uso. Puede implementar límites de uso en algunos componentes de carga de trabajo. Por ejemplo, para quitar pods inestables, puede definir límites de CPU y memoria de pod en Azure Kubernetes Service (AKS). Para optimizar el rendimiento, puede definir límites de memoria en máquinas virtuales (VM) Java.

Optimice la infraestructura. Simplifique la carga de trabajo para reducir el potencial de interacción, dependencia y problemas de compatibilidad. Al simplificar la carga de trabajo, se optimiza el uso de recursos de memoria, potencia de procesamiento y almacenamiento.

Reduzca la carga. Para reducir la carga en una carga de trabajo, minimice la demanda colocada en una aplicación y habilite los recursos para realizar sus tareas principales. Por ejemplo, es habitual evitar la ejecución de soluciones de seguridad en el código o en instancias de proceso individuales. En su lugar, los servidores web deben atender solicitudes HTTP. Los firewalls de aplicaciones web y los recursos de puerta de enlace pueden controlar las comprobaciones de seguridad. Las estrategias siguientes ayudan a reducir la carga en la carga de trabajo:

  • Coherencia final: adopte un modelo de coherencia final para mejorar el rendimiento, ya que permite que los datos estén ligeramente fechados. La coherencia final reduce la demanda inmediata en los ciclos de CPU y el ancho de banda de red para las actualizaciones de datos constantes.

  • Tareas delegadas: delegue tareas de servidor a clientes o intermediarios, como índices de búsqueda y cachés. Delegar tareas como ordenar datos, filtrar datos o representar vistas. Al descargar estas tareas, se reduce la carga de trabajo en los servidores y se mejora el rendimiento.

Optimice la red. Para optimizar una red de cargas de trabajo para el rendimiento, configure y ajuste la infraestructura de red. Asegúrese de que la carga de trabajo puede funcionar con el mayor nivel de eficiencia.

  • Protocolos de red: actualice a protocolos modernos como HTTP/2, que permiten enviar varias solicitudes a través de una sola conexión. Los protocolos modernos reducen la sobrecarga de establecer nuevas conexiones.

    Compensación: los protocolos modernos pueden excluir clientes más antiguos.

  • Chattiness de red: batch network requests together to reduce el número de solicitudes. En lugar de realizar varias solicitudes pequeñas, combínelas en solicitudes más grandes para reducir la sobrecarga de red.

  • Consultas de base de datos: asegúrese de que las consultas de base de datos solo recuperan la información necesaria. Evite recuperar grandes cantidades de datos innecesarios, lo que puede provocar un aumento del tráfico de red y un rendimiento lento.

  • Datos estáticos: use una red de entrega de contenido para almacenar en caché contenido estático al que se accede con frecuencia y que esté cerca de los usuarios. Cuando se almacenan en caché los datos, no es necesario viajar a largas distancias. El almacenamiento en caché mejora los tiempos de respuesta y reduce el tráfico de red.

  • Recopilación de registros: recopile y conserve solo los datos de registro necesarios para satisfacer sus requisitos. Configure las reglas de recopilación de datos e implemente consideraciones de diseño para optimizar los costos de Log Analytics.

  • Compresión de datos: comprima y alote datos de archivos y contenido HTTP para permitir una transmisión rápida entre clientes y servidores. La compresión reduce los datos que devuelve una página o API y devuelve al explorador o a la aplicación cliente. La compresión optimiza el tráfico de red, lo que puede acelerar la comunicación de la aplicación.

    Compensación: la compresión agrega procesamiento del lado servidor y del lado cliente. La aplicación debe comprimir, enviar y descomprimir datos. La comunicación de multidifusión o la comunicación con varios destinatarios puede crear sobrecarga de descompresión. Debe probar y medir las variaciones de rendimiento antes y después de implementar la compresión de datos para determinar si es una buena opción para la carga de trabajo. Para obtener más información, consulte Compresión de respuesta en ASP.NET Core.

Facilitación de Azure

Código de instrumentación: Application Insights de Azure Monitor admite la instrumentación automática (autoinstrumentación) y la instrumentación manual del código de aplicación. La autoinstrución habilita la recopilación de telemetría sin tocar el código de la aplicación. La instrumentación manual requiere cambios de código para implementar Application Insights o OpenTelemetry API. Puede usar Application Insights Profiler para ayudar a optimizar las rutas de acceso activas.

Optimización de la lógica de código: Azure ofrece SDK y bibliotecas para varios lenguajes de programación para interactuar con los servicios de Azure. Use SDK para simplificar las interacciones entre las aplicaciones y los recursos de Azure. Los SDK proporcionan una interacción óptima con los servicios de Azure, lo que reduce la latencia y mejora la eficacia.

Optimización de la administración de memoria: use la característica de detección inteligente de Application Insights para analizar el consumo de memoria y ayudar a identificar y solucionar pérdidas de memoria.

Azure App Service tiene una característica de análisis y recopilación de volcados de memoria y generador de perfiles. La característica de App Service de ensayo automático puede tomar automáticamente volcados de memoria y seguimientos de perfiles de aplicaciones .NET y Java.

Uso de simultaneidad y paralelismo: los distintos servicios de Azure proporcionan compatibilidad única con la simultaneidad, como Azure Cosmos DB, Azure Functions y Blob Storage. Para paralelismo, los servicios de AKS admiten la implementación de aplicaciones en contenedor, lo que mejora el procesamiento paralelo.

Azure Batch es un servicio de programación de trabajos basado en la nube que puede usar para habilitar la informática paralela y de alto rendimiento sin necesidad de la configuración de la infraestructura. Para obtener más información, vea Trabajos en segundo plano.

Optimización del rendimiento de la infraestructura: implemente plantillas de Azure Resource Manager para definir e implementar la infraestructura mediante código. Use estas plantillas para implementar implementaciones de recursos eficaces, repetibles y coherentes. Azure Policy proporciona funcionalidades de gobernanza para garantizar que las implementaciones de recursos cumplan los procedimientos recomendados y los estándares de la organización.

Para la programación asincrónica, use servicios de cola escalable, como Azure Queue Storage y Azure Service Bus, para facilitar la programación asincrónica. Puede poner en cola las tareas y procesarlas de forma independiente. Para admitir operaciones asincrónicas, Azure Marketplace ofrece colas y herramientas de terceros que puede integrar con los servicios de Azure.

Lista de comprobación de eficiencia del rendimiento

Consulte el conjunto completo de recomendaciones.