Práticas recomendadas para o Serviço de Aplicativo do Azure

Este artigo resume as práticas recomendadas para usar o Serviço de Aplicativo do Azure.

Colocalização

Uma solução do Serviço de Aplicativo do Azure consiste em um aplicativo Web e um banco de dados ou conta de armazenamento para armazenar conteúdo ou dados. Quando esses recursos estão em regiões diferentes, a situação pode ter os seguintes efeitos:

  • Maior latência na comunicação entre recursos
  • Encargos monetários para transferência de dados de saída entre regiões, conforme observado na página de preços do Azure

O colocation é melhor para recursos do Azure que compõem uma solução. Ao criar recursos, verifique se eles estão na mesma região do Azure, a menos que você tenha motivos comerciais ou de design específicos para que eles não estejam. Você pode mover um aplicativo do Serviço de Aplicativo para a mesma região do banco de dados usando o recurso de clonagem do Serviço de Aplicativo disponível nos planos do Serviço de Aplicativo Premium.

Fixação de certificado

A fixação de certificados é uma prática na qual um aplicativo permite apenas uma lista específica de autoridades de certificação (CAs) aceitáveis, chaves públicas, impressões digitais ou qualquer parte da hierarquia de certificados.

Os aplicativos nunca devem ter uma dependência rígida ou fixar no certificado TLS curinga (*.azurewebsites.net) padrão. O Serviço de Aplicativo é uma plataforma como serviço (PaaS), portanto, esse certificado pode ser girado a qualquer momento. Se o serviço girar o certificado TLS curinga padrão, os aplicativos fixados no certificado interromperão a conectividade para aplicativos codificados em um conjunto específico de atributos de certificado. A periodicidade com que o certificado é rodado também não é garantida, pois a frequência de rotação pode mudar a qualquer momento.

Os aplicativos que dependem da fixação de certificados também não devem ter uma dependência rígida de um certificado gerenciado pelo Serviço de Aplicativo. Os certificados gerenciados do Serviço de Aplicativo podem ser girados a qualquer momento, levando a problemas semelhantes para aplicativos que dependem de propriedades de certificado estáveis. É uma prática recomendada fornecer um certificado TLS personalizado para aplicativos que dependem da fixação de certificado.

Se seu aplicativo precisar confiar no comportamento de fixação de certificado, recomendamos que você adicione um domínio personalizado a um aplicativo Web e forneça um certificado TLS personalizado para o domínio. O aplicativo pode então confiar no certificado TLS personalizado para fixação de certificado.

Recursos de memória

Quando as recomendações de monitoramento ou serviço indicarem que um aplicativo consome mais memória do que o esperado, considere o recurso de recuperação automática do Serviço de Aplicativo. Você pode configurar o auto-reparo usando web.config.

Uma das opções para o recurso de recuperação automática é executar ações personalizadas com base em um limite de memória. As ações vão desde notificações por e-mail até investigação via despejo de memória e mitigação no local por meio da reciclagem do processo de trabalho.

Recursos de CPU

Quando as recomendações de monitoramento ou serviço indicarem que um aplicativo consome mais CPU do que o esperado ou enfrenta picos repetidos de CPU, considere aumentar ou expandir o plano do Serviço de Aplicativo. Se o aplicativo estiver com monitoração de estado, a expansão será a única opção. Se o seu aplicativo for sem monitoração de estado, o dimensionamento horizontal oferece mais flexibilidade e maior potencial de escala.

Para obter mais informações sobre as opções de dimensionamento e dimensionamento automático do Serviço de Aplicativo, consulte Expandir um aplicativo no Serviço de Aplicativo do Azure.

Recursos de soquete

Um motivo comum para esgotar conexões TCP de saída é o uso de bibliotecas de cliente que não reutilizam conexões TCP ou que não usam um protocolo de nível superior, como HTTP keep-alive.

Revise a documentação de cada biblioteca à qual os aplicativos do plano do Serviço de Aplicativo fazem referência. Certifique-se de que as bibliotecas estejam configuradas ou acessadas em seu código para reutilização eficiente de conexões de saída. 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. Enquanto essas investigações em bibliotecas de cliente estão em andamento, você pode reduzir o impacto dimensionando para várias instâncias.

Node.js e solicitações HTTP de saída

Quando você está trabalhando com Node.js e muitas solicitações HTTP de saída, lidar com HTTP keep-alive é importante. Você pode usar o pacote agentkeepalivenpm para facilitar no seu código.

Sempre trate a resposta http, mesmo que não faça nada no manipulador. Se você não manipular a resposta corretamente, seu aplicativo eventualmente ficará preso porque não há mais soquetes disponíveis.

Aqui está um exemplo de como lidar com a resposta quando você está trabalhando com o http pacote ou https :

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

Se você estiver executando seu aplicativo do Serviço de Aplicativo em uma máquina Linux que tenha vários núcleos, outra prática recomendada é usar o PM2 para iniciar vários processos .js nó para executar seu aplicativo. Você pode fazer isso especificando um comando de inicialização para o seu contêiner.

Por exemplo, use este comando para iniciar quatro instâncias:

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

Backup do aplicativo

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). O resultado de não conseguir acessar qualquer um desses recursos é uma falha consistente de backup.

Os dois motivos mais comuns pelos quais o backup do aplicativo falha são as configurações de armazenamento inválidas e a configuração inválida do banco de dados. Essas falhas geralmente ocorrem após alterações nos recursos de armazenamento ou banco de dados, ou após alterações nas credenciais para acessar esses recursos. Por exemplo, as credenciais podem ser atualizadas para o banco de dados selecionado nas configurações de backup.

Quando ocorrerem falhas de backup, analise os resultados mais recentes para entender que tipo de falha está acontecendo. Para falhas de acesso ao armazenamento, revise e atualize as configurações de armazenamento na configuração de backup. Para falhas de acesso ao banco de dados, revise e atualize suas cadeias de conexão como parte das configurações do aplicativo. Em seguida, prossiga para atualizar sua configuração de backup para incluir corretamente os bancos de dados necessários.

Para obter mais informações sobre backups de aplicativos, consulte Fazer backup e restaurar seu aplicativo no Serviço de Aplicativo do Azure.

Aplicativos Node.js

A configuração padrão do Serviço de Aplicativo do Azure para aplicativos Node.js destina-se a atender melhor às necessidades dos aplicativos mais comuns. Se você quiser personalizar a configuração padrão para seu aplicativo Node.js para melhorar o desempenho ou otimizar o uso de recursos para CPU, memória ou recursos de rede, consulte Guia de práticas recomendadas e solução de problemas para aplicativos Node no Serviço de Aplicativo do Azure. Esse artigo descreve as configurações iisnode que talvez você precise configurar para seu aplicativo Node.js. Ele também explica como resolver cenários ou problemas com seu aplicativo.

Dispositivos IoT

Você pode melhorar seu ambiente ao executar dispositivos de Internet das Coisas (IoT) conectados ao Serviço de Aplicativo.

Uma prática comum com dispositivos IoT é a fixação de certificados. Para evitar qualquer tempo de inatividade imprevisto devido a alterações nos certificados gerenciados do serviço, você nunca deve fixar certificados no certificado padrão *.azurewebsites.net ou em um certificado gerenciado do Serviço de Aplicativo. Se o sistema precisar confiar no comportamento de fixação de certificado, recomendamos que você adicione um domínio personalizado a um aplicativo Web e forneça um certificado TLS personalizado para o domínio. O aplicativo pode então confiar no certificado TLS personalizado para fixação de certificado. Para obter mais informações, consulte a seção de fixação de certificado deste artigo.

Para aumentar a resiliência em seu ambiente, não confie em um único ponto de extremidade para todos os seus dispositivos. Hospede seus aplicativos Web em pelo menos duas regiões para evitar um único ponto de falha e esteja pronto para failover de tráfego.

No Serviço de Aplicativo, você pode adicionar domínios personalizados idênticos a vários aplicativos Web, desde que esses aplicativos Web estejam hospedados em regiões diferentes. Esse recurso garante que, se você precisar fixar certificados, também poderá fixar o certificado TLS personalizado fornecido.

Outra opção é usar um balanceador de carga na frente dos aplicativos Web, como o Azure Front Door ou o Gerenciador de Tráfego do Azure, para garantir alta disponibilidade para seus aplicativos Web. Para obter mais informações, consulte Guia de início rápido: criar uma instância do Front Door para um aplicativo Web global altamente disponível ou Controlando o tráfego do Serviço de Aplicativo do Azure com o Gerenciador de Tráfego do Azure.

Próximas etapas

Para obter práticas recomendadas acionáveis específicas para seu recurso, use o diagnóstico do Serviço de Aplicativo:

  1. Vá para seu aplicativo Web no portal do Azure.
  2. Abra o diagnóstico do Serviço de Aplicativo selecionando Diagnosticar e resolver problemas no painel esquerdo.
  3. Selecione o bloco Práticas recomendadas .
  4. Selecione Práticas recomendadas para disponibilidade e desempenho ou Práticas recomendadas para configuração ideal para exibir o estado atual do seu aplicativo em relação a essas práticas recomendadas.

Você também pode usar este link para abrir diretamente o diagnóstico do Serviço de Aplicativo para seu recurso: https://portal.azure.com/?websitesextension_ext=asd.featurePath%3Ddetectors%2FParentAvailabilityAndPerformance#@microsoft.onmicrosoft.com/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{siteName}/troubleshoot.