Procedimientos recomendados para Azure App ServiceBest Practices for Azure App Service

En este artículo se resumen los procedimientos recomendados para usar el Azure App Service.This article summarizes best practices for using Azure App Service.

Ubicación compartidaColocation

Cuando los recursos de Azure que componen una solución como una aplicación web y una base de datos se encuentran en regiones distintas puede ocurrir lo siguiente:When Azure resources composing a solution such as a web app and a database are located in different regions, it can have the following effects:

  • Mayor latencia en la comunicación entre recursosIncreased latency in communication between resources
  • Cargos monetarios de transferencia de datos entre regiones como se indica en el página de precios de AzureMonetary charges for outbound data transfer cross-region as noted on the Azure pricing page.

Para los recursos de Azure que componen una solución, como una aplicación web y una cuenta de almacenamiento o base de datos usada para mantener el contenido o los datos, se recomienda que la ubicación compartida se encuentre en la misma región.Colocation in the same region is best for Azure resources composing a solution such as a web app and a database or storage account used to hold content or data. Al crear recursos, asegúrese de que estén de la misma región de Azure, salvo que haya motivos comerciales o de diseño concretos para que no sea así.When creating resources, make sure they are in the same Azure region unless you have specific business or design reason for them not to be. Para mover una aplicación de App Service a la región de la base de datos, use la característica de clonación de App Service que actualmente está disponible para las aplicaciones del plan de App Service Premium.You can move an App Service app to the same region as your database by using the App Service cloning feature currently available for Premium App Service Plan apps.

Cuando las aplicaciones consumen más memoria de lo esperadoWhen apps consume more memory than expected

Si observa que una aplicación consume más memoria de lo esperado, lo que se indica a través de la supervisión o de recomendaciones de servicio, considere la posibilidad de usar la característica de recuperación automática de App Service.When you notice an app consumes more memory than expected as indicated via monitoring or service recommendations, consider the App Service Auto-Healing feature. Una de las opciones de esta característica es que realiza acciones personalizadas en función de un umbral de memoria.One of the options for the Auto-Healing feature is taking custom actions based on a memory threshold. Las acciones abarcan todo el espectro, desde las notificaciones por correo electrónico a la investigación a través de volcado de memoria a la mitigación inmediata mediante el reciclado del proceso de trabajo.Actions span the spectrum from email notifications to investigation via memory dump to on-the-spot mitigation by recycling the worker process. La recuperación automática se puede configurar tanto a través de web.config como a través de una interfaz de usuario, tal y como se describe en esta entrada del blog App Service Support Site Extension(Extensión del sitio de soporte del Servicio de aplicaciones).Auto-healing can be configured via web.config and via a friendly user interface as described at in this blog post for the App Service Support Site Extension.

Cuando las aplicaciones consumen más CPU de lo esperadoWhen apps consume more CPU than expected

Si observa que una aplicación consume más CPU de lo esperado o experimenta repetidas puntas de actividad de la CPU como indican la supervisión o las recomendaciones de servicio, considere la posibilidad de escalar el plan de App Service vertical u horizontalmente.When you notice an app consumes more CPU than expected or experiences repeated CPU spikes as indicated via monitoring or service recommendations, consider scaling up or scaling out the App Service plan. Si se trata de una aplicación con estado, el escalado vertical es la única opción, mientras que si es sin estado, el escalado horizontal le proporcionará mayor flexibilidad y mayor potencial de escalado.If your application is stateful, scaling up is the only option, while if your application is stateless, scaling out gives you more flexibility and higher scale potential.

Para más información sobre las aplicaciones con y sin estado puede ver este vídeo: Planning a Scalable End-to-End Multi-Tier Application on Azure App Service (Planeamiento de una aplicación de varios niveles y de un extremo a otro en Azure App Service).For more information about “stateful” vs “stateless” applications you can watch this video: Planning a Scalable End-to-End Multi-Tier Application on Azure App Service. Para más información sobre las opciones de escalado y escalado automático de App Service, consulte el artículo sobre el escalado de una aplicación web en Azure App Service.For more information about App Service scaling and autoscaling options, see Scale a Web App in Azure App Service.

Cuando se agotan los recursos del socketWhen socket resources are exhausted

Una razón habitual para agotar las conexiones TCP salientes es el uso de bibliotecas de cliente que no se han implementado para reutilizar las conexiones TCP o cuando no se usa un protocolo de nivel superior como HTTP de conexión persistente.A common reason for exhausting outbound TCP connections is the use of client libraries, which are not implemented to reuse TCP connections, or when a higher-level protocol such as HTTP - Keep-Alive is not used. Revise la documentación de las bibliotecas a las que hacen referencia las aplicaciones del plan de App Service para asegurarse de que se configuran o se tiene acceso a ellas en el código para una reutilización eficiente de las conexiones salientes.Review the documentation for each of the libraries referenced by the apps in your App Service Plan to ensure they are configured or accessed in your code for efficient reuse of outbound connections. Siga también la guía de la documentación de la biblioteca para que la creación y liberación, o la limpieza sean correctas para evitar las conexiones con fugas.Also follow the library documentation guidance for proper creation and release or cleanup to avoid leaking connections. Aunque las investigaciones de estas bibliotecas de cliente están en curso, el impacto se pueden mitigar mediante el escalado horizontal a varias instancias.While such client libraries investigations are in progress, impact may be mitigated by scaling out to multiple instances.

Node.js y solicitudes HTTP salientesNode.js and outgoing http requests

Cuando se trabaja con Node.js y muchas solicitudes HTTP salientes, es importante usar HTTP de conexión persistente.When working with Node.js and many outgoing http requests, dealing with HTTP - Keep-Alive is important. Puede usar el paquete agentkeepalive npm para que le resulte más fácil en su código.You can use the agentkeepalive npm package to make it easier in your code.

Controle siempre la respuesta http, aunque no haga nada en el controlador.Always handle the http response, even if you do nothing in the handler. Si no controla la respuesta correctamente, la aplicación se acaba bloqueando porque no hay más sockets disponibles.If you don't handle the response properly, your application gets stuck eventually because no more sockets are available.

Por ejemplo, si trabaja con el paquete http o https:For example, when working with the http or https package:

const request = https.request(options, function(response) {
    response.on('data', function() { /* do nothing */ });
});

Si ejecuta App Service en Linux en una máquina con varios núcleos, otro procedimiento recomendado es usar PM2 para iniciar varios procesos de Node.js para ejecutar la aplicación.If you are running on App Service on Linux on a machine with multiple cores, another best practice is to use PM2 to start multiple Node.js processes to execute your application. Para hacerlo, especifique un comando de inicio al contenedor.You can do it by specifying a startup command to your container.

Por ejemplo, para iniciar cuatro instancias:For example, to start four instances:

pm2 start /home/site/wwwroot/app.js --no-daemon -i 4

Cuando la copia de seguridad de la aplicación comienza a fallarWhen your app backup starts failing

Los dos principales motivos por los que comienza a fallar la copia de seguridad de una aplicación son una configuración de almacenamiento no válida y una configuración de base de datos no válida.The two most common reasons why app backup fails are: invalid storage settings and invalid database configuration. Estos errores suelen ocurrir cuando se producen cambios en los recursos de almacenamiento o de base de datos o en el acceso a estos recursos (por ejemplo, la actualización de las credenciales de la base de datos seleccionada en la configuración de copia de seguridad).These failures typically happen when there are changes to storage or database resources, or changes for how to access these resources (for example, credentials updated for the database selected in the backup settings). Las copias de seguridad suelen ejecutarse según una programación y requieren acceso al almacenamiento (para generar los archivos de copia de seguridad) y a las bases de datos (para copiar y leer el contenido que se incluirá en la copia de seguridad).Backups typically run on a schedule and require access to storage (for outputting the backed-up files) and databases (for copying and reading contents to be included in the backup). Si no se tiene acceso a cualquiera de estos recursos, se produciría un error de copia de seguridad.The result of failing to access either of these resources would be consistent backup failure.

Cuando aparezcan errores de copia de seguridad, revise los resultados más recientes para saber qué tipo de error se está produciendo.When backup failures happen, review most recent results to understand which type of failure is happening. En el caso de errores de acceso de almacenamiento, revise y actualice la configuración de almacenamiento que se usa en la configuración de copia de seguridad.For storage access failures, review and update the storage settings used in the backup configuration. En el caso de errores de acceso de la base de datos, revise y actualice las cadenas de conexiones como parte de la configuración de la aplicación. Después, continúe para actualizar la configuración de copia de seguridad con el fin de incluir correctamente las bases de datos necesarias.For database access failures, review and update your connections strings as part of app settings; then proceed to update your backup configuration to properly include the required databases. Para más información sobre las copias de seguridad de aplicaciones, consulte el artículo sobre cómo crear la copia de seguridad de una aplicación web en Azure App Service.For more information on app backups, see Back up a web app in Azure App Service.

Cuando se implementan nuevas aplicaciones de Node.js en Azure App ServiceWhen new Node.js apps are deployed to Azure App Service

La configuración predeterminada de Azure App Service para las aplicaciones Node.js tiene que como objetivo satisfacer mejor los requisitos de las aplicaciones más comunes.Azure App Service default configuration for Node.js apps is intended to best suit the needs of most common apps. Si considera que la configuración de la aplicación Node.js va a beneficiarse del ajuste personalizado para mejorar el rendimiento o para optimizar el uso de recursos para los recursos de la CPU, memoria o red, consulte los procedimientos recomendados y la guía para solucionar problemas de las aplicaciones Node en Azure App Service.If configuration for your Node.js app would benefit from personalized tuning to improve performance or optimize resource usage for CPU/memory/network resources, see Best practices and troubleshooting guide for Node applications on Azure App Service. En este artículo se describen las opciones de IISNode que pueda necesitar configurar para la aplicación de Node.js, así como también se describen los distintos escenarios o problemas que dicha aplicación podría encontrar y se muestra cómo abordarlos.This article describes the iisnode settings you may need to configure for your Node.js app, describes the various scenarios or issues that your app may be facing, and shows how to address these issues.