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 uma conta de banco de dados ou 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
A colocação é 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 específicos de negócios ou design 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 certificado é uma prática na qual um aplicativo permite apenas uma lista específica de autoridades de certificação aceitáveis (CAs), chaves públicas, impressões digitais ou qualquer parte da hierarquia de certificados.
Os aplicativos nunca devem ter uma dependência difícil ou fixar no certificado TLS curinga (*.azurewebsites.net
) padrão. O Serviço de Aplicativo é uma PaaS (plataforma como serviço), portanto, esse certificado pode ser girado a qualquer momento. Se o serviço girar o certificado TLS curinga padrão, os aplicativos fixados em certificado interromperão e interromperão a conectividade para aplicativos codificados em um conjunto específico de atributos de certificado. A periodicidade com a qual o certificado é girado também não é garantida porque a frequência de rotação pode mudar a qualquer momento.
Os aplicativos que dependem da fixação de certificado também não devem ter uma dependência rígida em um certificado gerenciado do 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 depender do 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. Em seguida, o aplicativo pode contar com o certificado TLS personalizado para fixação de certificado.
Recursos de memória
Quando recomendações de monitoramento ou serviço indicarem que um aplicativo consome mais memória do que você esperava, considere o recurso de recuperação automática do Serviço de Aplicativo. Você pode configurar a recuperação automática 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 email até investigação por meio de despejo de memória até mitigação local, reciclando o processo de trabalho.
Recursos de CPU
Quando recomendações de monitoramento ou serviço indicam que um aplicativo consome mais CPU do que você esperava ou que experimenta picos repetidos de CPU, considere escalar verticalmente ou dimensionar o plano do Serviço de Aplicativo. Se o aplicativo estiver com estado, escalar verticalmente será a única opção. Se o aplicativo estiver sem estado, o dimensionamento oferecerá mais flexibilidade e maior potencial de escala.
Para obter mais informações sobre as opções de dimensionamento automático e dimensionamento do Serviço de Aplicativo, consulte Escalar verticalmente 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 o keep-alive HTTP.
Examine a documentação de cada biblioteca que os aplicativos em sua referência de plano do Serviço de Aplicativo. Verifique se as bibliotecas estão 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. Embora essas investigações sobre bibliotecas de clientes estejam em andamento, você pode reduzir o impacto dimensionando para várias instâncias.
solicitações HTTP de saída e Node.js
Quando você está trabalhando com Node.js e muitas solicitações HTTP de saída, lidar com o keep-alive HTTP é importante. Você pode usar o pacote agentkeepalivenpm
para facilitar em seu código.
Sempre trate a resposta http
, mesmo que não faça nada no manipulador. Se você não lidar com a resposta corretamente, o aplicativo acabará travando porque não há mais soquetes disponíveis.
Aqui está um exemplo de tratamento da resposta quando você está trabalhando com o pacote http
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 um computador Linux que tenha vários núcleos, outra prática recomendada é usar o PM2 para iniciar vários processos Node.js 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 da falha ao acessar qualquer um desses recursos é uma falha de backup consistente.
Os dois motivos mais comuns pelos quais o backup do aplicativo falha são configurações de armazenamento inválidas e configuração de banco de dados inválida. Normalmente, essas falhas ocorrem após alterações nos recursos de armazenamento ou de 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, examine os resultados mais recentes para entender qual tipo de falha está acontecendo. Para falhas de acesso ao armazenamento, examine e atualize as configurações de armazenamento em sua configuração de backup. Para falhas de acesso ao banco de dados, examine e atualize suas cadeias de conexão como parte das configurações do aplicativo. Em seguida, prossiga para atualizar a 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 do aplicativo Node.js para melhorar o desempenho ou otimizar o uso de recursos para recursos de CPU, memória ou rede, consulte Guia de melhores práticas e solução de problemas para aplicativos no Nó no Serviço de Aplicativo do Azure. Esse artigo descreve as configurações de iisnode que talvez seja necessário 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 IoT (Internet das Coisas) conectados ao Serviço de Aplicativo.
Uma prática comum com dispositivos IoT é a fixação de certificado. 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 depender do 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. Em seguida, o aplicativo pode contar com o 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 dependa de 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 fazer failover do 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 sejam hospedados em regiões diferentes. Essa funcionalidade 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 a alta disponibilidade para seus aplicativos Web. Para obter mais informações, consulte Início Rápido: Criar uma instância do Front Door para um aplicativo Web global altamente disponível ou Controlar 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 ao seu recurso, use diagnóstico do Serviço de Aplicativo:
- No portal do Azure, vá para seu aplicativo web.
- Abra o diagnóstico do Serviço de Aplicativo selecionando Diagnosticar e resolver problemas no painel esquerdo.
- Selecione o bloco Práticas Recomendadas.
- Selecione Práticas recomendadas para disponibilidade e desempenho ou Práticas recomendadas para a configuração ideal para exibir o estado atual do seu aplicativo em relação a essas práticas recomendadas.
Você também pode usar esse 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
.