Práticas Recomendadas para o Serviço de Aplicativo do AzureBest Practices for Azure App Service

Este artigo resume as práticas recomendadas para usar o Serviço de Aplicativo do Azure.This article summarizes best practices for using Azure App Service.

ColocaçãoColocation

Quando recursos do Azure compondo uma solução, como um aplicativo Web e um banco de dados de recursos estão localizados em regiões diferentes, podem ocorrer os seguintes efeitos: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:

  • Maior latência na comunicação entre recursosIncreased latency in communication between resources
  • Encargos monetários para transferência de dados de saída entre regiões, como observado na página de preços do AzureMonetary charges for outbound data transfer cross-region as noted on the Azure pricing page.

A colocação na mesma região é melhor para que os recursos do Azure que compõem uma solução como um aplicativo Web e um banco de dados ou uma conta de armazenamento usada para armazenar conteúdo ou dados.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. Durante a criação de recursos, verifique se eles estão na mesma região do Azure, a menos que você tenha motivos de design ou de negócios específicos para que eles não estejam.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. Você pode mover um aplicativo do Serviço de Aplicativo para a mesma região do banco de dados utilizando o recurso de clonagem de Serviço de Aplicativo atualmente disponível para aplicativos do Plano do Serviço de Aplicativo 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.

Quando aplicativos consomem mais memória do que o esperadoWhen apps consume more memory than expected

Quando você observar que um aplicativo consome mais memória do que o esperado, conforme indicado no monitoramento ou nas recomendações de serviço, considere o recurso de Reparo Automático de Serviço de Aplicativo.When you notice an app consumes more memory than expected as indicated via monitoring or service recommendations, consider the App Service Auto-Healing feature. Uma das opções para o recurso de Reparo Automático é tomar ações personalizadas com base em um limite de memória.One of the options for the Auto-Healing feature is taking custom actions based on a memory threshold. Ações abrangem o espectro de notificações de email a investigação por meio de despejo de memória no ponto de atenuação ao reciclar o processo de trabalho.Actions span the spectrum from email notifications to investigation via memory dump to on-the-spot mitigation by recycling the worker process. A Recuperação Automática pode ser configurada por meio de web.config e por meio de uma interface do usuário amigável, conforme descrito nesta postagem de blog para a Extensão de Site de Suporte de Serviço de Aplicativo.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.

Quando aplicativos consomem mais CPU do que o esperadoWhen apps consume more CPU than expected

Quando você observar que um aplicativo consome mais CPU que o esperado ou enfrenta picos de CPU repetidos, conforme indicado pelo monitoramento ou pelas recomendações serviço, considere escalar verticalmente ou horizontalmente o plano de Serviço de Aplicativo.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. Se seu aplicativo estiver com estado, escalar verticalmente será a única opção, enquanto que, se seu aplicativo estiver sem estado, escalar horizontalmente dará mais flexibilidade e maior potencial de escala.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 obter mais informações sobre os aplicativos "com estado" versus "sem estado", assista a este vídeo: Planejar um aplicativo escalonável de várias camadas e de ponta a ponta no Serviço de Aplicativo do Azure.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 saber mais sobre como as opções de colocação em escala e dimensionamento automático, veja Dimensionar um aplicativo Web no Serviço de Aplicativo do Azure.For more information about App Service scaling and autoscaling options, see Scale a Web App in Azure App Service.

Quando os recursos de soquete são exauridosWhen socket resources are exhausted

Uma razão comum para esgotar as conexões TCP de saída é o uso de bibliotecas de cliente que não são implementadas para reutilizar conexões TCP ou quando um protocolo de nível superior como HTTP - Keep-Alive não estiver sendo utilizado.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. Consulte a documentação para cada uma das bibliotecas referenciadas pelos aplicativos no seu Plano de Serviço de Aplicativo para garantir que eles são configurados ou acessados em seu código para reutilização eficiente de conexões de saída.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. Além disso, siga as diretrizes de documentação biblioteca de criação correta e versão ou de limpeza para evitar vazamento de conexões.Also follow the library documentation guidance for proper creation and release or cleanup to avoid leaking connections. Embora essas investigações de bibliotecas de cliente estejam em andamento, o impacto pode ser reduzido escalando horizontalmente para várias instâncias.While such client libraries investigations are in progress, impact may be mitigated by scaling out to multiple instances.

Node.js e solicitações de http de saídaNode.js and outgoing http requests

Ao trabalhar com Node.js e muitas solicitações de http de saída, lidar com HTTP - Keep-Alive é importante.When working with Node.js and many outgoing http requests, dealing with HTTP - Keep-Alive is important. Você pode usar o pacote agentkeepalive npm para facilitar no seu código.You can use the agentkeepalive npm package to make it easier in your code.

Sempre trate a resposta http, mesmo que não faça nada no manipulador.Always handle the http response, even if you do nothing in the handler. Se você não tratar corretamente a resposta, o aplicativo ficará parado, porque não há mais soquetes disponíveis.If you don't handle the response properly, your application gets stuck eventually because no more sockets are available.

Por exemplo, ao trabalhar com o pacote http ou https:For example, when working with the http or https package:

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

Se você estiver executando o Serviço de Aplicativo no Linux em um computador com vários núcleos, outra prática recomendada é usar PM2 para iniciar vários processos Node.js para executar seu aplicativo.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. Você pode fazer isso especificando um comando de inicialização para o seu contêiner.You can do it by specifying a startup command to your container.

Por exemplo, para iniciar quatro instâncias:For example, to start four instances:

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

Quando o backup de seu aplicativo começa a falharWhen your app backup starts failing

Os dois motivos mais comuns para as falhas no backup do aplicativo são: configurações de armazenamento inválidas e configuração de banco de dados inválida.The two most common reasons why app backup fails are: invalid storage settings and invalid database configuration. Essas falhas normalmente ocorrem quando há alterações de recursos de armazenamento ou do banco de dados, ou alterações no modo de acesso desses recursos (por exemplo, credenciais atualizadas para o banco de dados selecionado nas configurações de backup).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). Os backups são normalmente executados com base em um agendamento e exigem acesso ao armazenamento (para gerar o backup dos arquivos) e aos bancos de dados (para copiar e ler o conteúdo a ser incluído no backup).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). O resultado da falha de acesso de qualquer um desses recursos seria uma falha de backup consistente.The result of failing to access either of these resources would be consistent backup failure.

Quando ocorrerem falhas de backup, examine os resultados mais recentes para entender qual tipo de falha está ocorrendo.When backup failures happen, review most recent results to understand which type of failure is happening. Para falhas de acesso ao armazenamento, revise e atualize as configurações de armazenamento usadas na configuração do backup.For storage access failures, review and update the storage settings used in the backup configuration. No caso de falhas de acesso ao banco de dados, analise e atualize suas cadeias de conexão como parte das configurações do aplicativo; em seguida, atualize a configuração de backup para incluir corretamente os bancos de dados necessários.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 saber mais sobre o backup do aplicativo, confira Fazer backup de um aplicativo Web no Serviço de Aplicativo do Azure.For more information on app backups, see Back up a web app in Azure App Service.

Quando novos aplicativos Node.js são implantados no Serviço de Aplicativo do AzureWhen new Node.js apps are deployed to Azure App Service

A configuração padrão do Serviço de Aplicativo do Azure para aplicativos Node.js destina-se a melhor atender às necessidades dos aplicativos mais comuns.Azure App Service default configuration for Node.js apps is intended to best suit the needs of most common apps. Se a configuração do seu aplicativo Node.js pode se beneficiar de ajustes personalizados para melhorar o desempenho ou otimizar o uso de recursos de memória/CPU/rede, veja Práticas recomendadas e guia de solução de problemas para aplicativos Node no Serviço de Aplicativo do Azure.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. Este artigo descreve as configurações de iisnode que podem precisar ser definidas seu aplicativo Node.js, descreve os vários cenários ou problemas que seu aplicativo pode enfrentar e mostra como resolver esses problemas.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.