Melhores Práticas do Serviço de Aplicações do AzureBest Practices for Azure App Service

Este artigo resume as melhores práticas para a utilização do Azure App Service.This article summarizes best practices for using Azure App Service.

ColocaçãoColocation

Quando os recursos Azure que compõem uma solução como uma aplicação web e uma base de dados estão localizados em diferentes regiões, pode ter 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:

  • Aumento da latência na comunicação entre recursosIncreased latency in communication between resources
  • Encargos monetários relativos à transferência de dados entre regiões, conforme assinalado na página de preços do Azure.Monetary charges for outbound data transfer cross-region as noted on the Azure pricing page.

A colocação na mesma região é o melhor para os recursos Azure compondo uma solução como uma aplicação web e uma base de dados ou conta de armazenamento usada para conter 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. Ao criar recursos, certifique-se de que estão na mesma região de Azure, a menos que tenha razões específicas para que não o sejam.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. Pode mover uma aplicação do Serviço de Aplicações para a mesma região que a sua base de dados, utilizando a funcionalidade de clonagem do Serviço de Aplicações atualmente disponível para aplicações Premium App Service Plan.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 as aplicações consomem mais memória do que o esperadoWhen apps consume more memory than expected

Quando notar que uma aplicação consome mais memória do que o esperado, como indicado através de recomendações de monitorização ou serviço, considere a funcionalidade de Auto-Curado Serviço de Aplicações .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 a funcionalidade de auto-cura é tomar ações personalizadas com base num limiar de memória.One of the options for the Auto-Healing feature is taking custom actions based on a memory threshold. As ações abrangem o espectro desde notificações de e-mail até investigação através do despejo de memória até à mitigação no local, reciclando o processo de trabalhador.Actions span the spectrum from email notifications to investigation via memory dump to on-the-spot mitigation by recycling the worker process. A cicatrização automática pode ser configurada através de web.config e através de uma interface de utilizador amigável, conforme descrito neste post de blog para a Extensão do Site de Suporte ao Serviço de Aplicações.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 as aplicações consomem mais CPU do que o esperadoWhen apps consume more CPU than expected

Quando notar que uma aplicação consome mais CPU do que o esperado ou experimenta picos repetidos de CPU, conforme indicado através de recomendações de monitorização ou serviço, considere aumentar ou expandir o plano de Serviço de Aplicações.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 a sua aplicação for imponente, o escalonamento é a única opção, enquanto que se a sua aplicação for apátrida, a escala dá-lhe mais flexibilidade e um potencial de maior 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 mais informações sobre aplicações "stateful" vs "apátridas" pode ver este vídeo: Planejando uma aplicação multi-tier scalable de ponta a ponta no Serviço de Aplicações 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 obter mais informações sobre opções de dimensionamento e autoscaling do Serviço de Aplicações, consulte Scale a Web App in Azure App Service.For more information about App Service scaling and autoscaling options, see Scale a Web App in Azure App Service.

Quando os recursos da tomada estão esgotadosWhen socket resources are exhausted

Uma razão comum para esgotar as ligações TCP de saída é a utilização de bibliotecas de clientes, que não são implementadas para reutilizar ligações TCP, ou quando um protocolo de nível superior como HTTP - Keep-Alive não é 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. Reveja a documentação de cada uma das bibliotecas referenciadas pelas aplicações no seu Plano de Serviço de Aplicações para garantir que são configuradas ou acedidas no seu código para uma reutilização eficiente das ligaçõ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. Siga também as orientações de documentação da biblioteca para a criação e libertação ou limpeza adequadas para evitar fugas de ligações.Also follow the library documentation guidance for proper creation and release or cleanup to avoid leaking connections. Embora tais investigações de bibliotecas de clientes estejam em andamento, o impacto pode ser atenuado escalando para vários casos.While such client libraries investigations are in progress, impact may be mitigated by scaling out to multiple instances.

Node.js e pedidos http de saídaNode.js and outgoing http requests

Ao trabalhar com Node.js e muitos pedidos de http outgoing, lidar com HTTP - Keep-Alive é importante.When working with Node.js and many outgoing http requests, dealing with HTTP - Keep-Alive is important. Pode utilizar o pacote de agentekeepalive npm para facilitar o seu código.You can use the agentkeepalive npm package to make it easier in your code.

Lide sempre com a http resposta, mesmo que não faça nada no manipulador.Always handle the http response, even if you do nothing in the handler. Se não manusear a resposta corretamente, a sua aplicação fica presa eventualmente porque não há mais tomadas 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 http ou https pacote:For example, when working with the http or https package:

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

Se estiver a executar o Serviço de Aplicações no Linux numa máquina com vários núcleos, outra das melhores práticas é usar o PM2 para iniciar vários processos Node.js para executar a sua aplicação.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. Pode fazê-lo especificando um comando de arranque para o seu recipiente.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 a sua cópia de segurança da aplicação começar a falharWhen your app backup starts failing

As duas razões mais comuns pelas quais a cópia de segurança da aplicação falha são: configurações de armazenamento inválidas e configuração de base de dados inválida.The two most common reasons why app backup fails are: invalid storage settings and invalid database configuration. Estas falhas normalmente acontecem quando há alterações nos recursos de armazenamento ou base de dados, ou alterações de como aceder a estes recursos (por exemplo, credenciais atualizadas para a base de dados selecionadas nas definiçõ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). As cópias de segurança normalmente funcionam num horário e exigem o acesso ao armazenamento (para a saída dos ficheiros com cópias) e bases de dados (para copiar e ler conteúdos a incluir na cópia de segurança).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 de não aceder a nenhum destes recursos seria uma falha consistente de backup.The result of failing to access either of these resources would be consistent backup failure.

Quando as falhas de backup acontecerem, reveja os resultados mais recentes para entender que tipo de falha está a acontecer.When backup failures happen, review most recent results to understand which type of failure is happening. Para falhas de acesso ao armazenamento, reveja e atualize as definições de armazenamento utilizadas na configuração de backup.For storage access failures, review and update the storage settings used in the backup configuration. Para falhas de acesso à base de dados, reveja e atualize as cordas das suas ligações como parte das definições das aplicações; em seguida, proceda à atualização da sua configuração de backup para incluir adequadamente as bases de dados necessárias.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 obter mais informações sobre cópias de segurança de aplicações, consulte Uma aplicação web no Azure App Service.For more information on app backups, see Back up a web app in Azure App Service.

Quando novas aplicações Node.js são implementadas no Azure App ServiceWhen new Node.js apps are deployed to Azure App Service

A configuração padrão do Azure App Service para Node.js aplicações destina-se a atender melhor às necessidades das aplicações 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 para a sua aplicação Node.js beneficiar de afinação personalizada para melhorar o desempenho ou otimizar o uso de recursos para os recursos da CPU/memória/rede, consulte as melhores práticas e guia de resolução de problemas para aplicações de nó no 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. Este artigo descreve as definições de iisnode que poderá necessitar de configurar para a sua aplicação Node.js, descreve os vários cenários ou problemas que a sua aplicação pode estar a enfrentar e mostra como lidar com estes 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.

Passos SeguintesNext Steps

Para obter mais informações sobre as melhores práticas, visite o App Service Diagnostics para descobrir as melhores práticas ações específicas do seu recurso.For more information on best practices, visit App Service Diagnostics to find out actionable best practices specific to your resource.

  • Navegue para a sua Web App no portal Azure.Navigate to your Web App in the Azure portal.
  • Clique no Diagnóstico e resolva problemas na navegação à esquerda, que abre o App Service Diagnostics.Click on Diagnose and solve problems in the left navigation, which opens App Service Diagnostics.
  • Escolha o azulejo inicial das Melhores Práticas.Choose Best Practices homepage tile.
  • Clique em Melhores Práticas para Disponibilidade & Desempenho ou Melhores Práticas para Configuração Ideal para ver o estado atual da sua aplicação no que diz respeito a estas melhores práticas.Click Best Practices for Availability & Performance or Best Practices for Optimal Configuration to view the current state of your app in regards to these best practices.

Também pode utilizar este link para abrir diretamente os Diagnósticos de Serviço de Aplicações para o seu https://ms.portal.azure.com/?websitesextension_ext=asd.featurePath%3Ddetectors%2FParentAvailabilityAndPerformance#@microsoft.onmicrosoft.com/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/troubleshoot recurso:You can also use this link to directly open App Service Diagnostics for your resource: https://ms.portal.azure.com/?websitesextension_ext=asd.featurePath%3Ddetectors%2FParentAvailabilityAndPerformance#@microsoft.onmicrosoft.com/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/troubleshoot.