Resolução de erros de ligação de saída intermitente no Serviço de Aplicações do Azure

Este artigo ajuda-o a resolver erros de ligação intermitentes e problemas de desempenho relacionados no Serviço de Aplicações do Azure. Fornece mais informações sobre as metodologias de resolução de problemas e o esgotamento das portas de tradução de endereços de rede de origem (SNAT). Se precisar de mais ajuda em qualquer altura deste artigo, contacte os especialistas do Azure nos fóruns do MSDN Azure e do Stack Overflow. Em alternativa, crie um suporte do Azure incidente. Aceda ao site de Suporte do Azure e selecione Obter Suporte.

Sintomas

Aplicações e Funções alojadas no serviço Aplicação Azure AD podem apresentar um ou mais dos seguintes sintomas:

  • Tempos de resposta lentos em todas ou em algumas instâncias num plano de serviço.
  • Erros intermitentes de 5xx ou Gateway Incorreto
  • Mensagens de erro de tempo limite excedido
  • Não foi possível ligar a pontos finais externos (como SQLDB, Service Fabric, outros Serviços de aplicações, etc.)

Causa

A principal causa para problemas intermitentes de ligação é atingir um limite ao criar novas ligações de saída. Os limites que pode atingir incluem:

  • Ligações TCP: existe um limite no número de ligações de saída que podem ser efetuadas. O limite de ligações de saída está associado ao tamanho da função de trabalho utilizada.
  • Portas SNAT: as ligações de saída no Azure descrevem as restrições de portas SNAT e como afetam as ligações de saída. O Azure utiliza a tradução de endereços de rede de origem (SNAT) e Balanceadores de Carga (não expostos aos clientes) para comunicar com endereços IP públicos. Cada instância no serviço Aplicação Azure AD recebe inicialmente um número pré-atribuído de 128 portas SNAT. O limite de portas SNAT afeta a abertura de ligações para a mesma combinação de endereço e porta. Se a sua aplicação criar ligações a uma combinação de combinações de endereços e portas, não utilizará as portas SNAT. As portas SNAT são utilizadas na totalidade se tiver chamadas repetidas para a mesma combinação de endereço e porta. Após uma porta ser libertada, fica disponível para reutilização conforme for necessário. O balanceador de carga da Rede do Azure recupera a porta SNAT das ligações fechadas apenas depois de aguardar 4 minutos.

Quando as aplicações ou funções abrem rapidamente uma nova ligação, podem esgotar rapidamente a quota pré-instalada das 128 portas. Em seguida, são bloqueados até que uma nova porta SNAT fique disponível, quer através da alocação dinâmica de mais portas SNAT, quer através da reutilização de uma porta SNAT recuperada. Se a aplicação ficar sem portas SNAT, terá problemas intermitentes de conectividade de saída.

Evitar o problema

Existem algumas soluções que lhe permitem evitar limitações de portas SNAT. Estas incluem:

  • conjuntos de ligações: ao criar agrupamentos de ligações, evita abrir novas ligações de rede para chamadas para o mesmo endereço e porta.
  • pontos finais de serviço: não tem uma restrição de porta SNAT para os serviços protegidos com pontos finais de serviço.
  • pontos finais privados: não tem uma restrição de porta SNAT para serviços protegidos com pontos finais privados.
  • NAT gateway: com um nat gateway, tem portas SNAT de saída de 64 mil que são utilizáveis pelos recursos que enviam tráfego através do mesmo.

Para evitar o problema da porta SNAT, impede a criação de novas ligações repetidamente para o mesmo anfitrião e porta. Os conjuntos de ligações são uma das formas mais óbvias de resolver esse problema.

Se o seu destino for um serviço do Azure que suporte pontos finais de serviço, pode evitar problemas de esgotamento da porta SNAT com a Integração de VNet regional e pontos finais de serviço ou pontos finais privados. Quando utiliza a Integração de VNet regional e coloca pontos finais de serviço na sub-rede de integração, o tráfego de saída da aplicação para esses serviços não terá restrições de porta SNAT de saída. Da mesma forma, se utilizar a Integração de VNet regional e pontos finais privados, não terá quaisquer problemas de porta SNAT de saída para esse destino.

Se o seu destino for um ponto final externo fora do Azure, utilizar um nat gateway dá-lhe portas SNAT de saída de 64 mil. Também lhe dá um endereço de saída dedicado que não partilha com ninguém.

Se possível, melhore o código para utilizar conjuntos de ligações e evite toda a situação. Nem sempre é possível alterar o código com rapidez suficiente para mitigar esta situação. Nos casos em que não pode alterar o código a tempo, tire partido das outras soluções. A melhor solução para o problema é combinar todas as soluções da melhor forma possível. Tente utilizar pontos finais de serviço e pontos finais privados para os serviços do Azure e o nat gateway para o resto.

As estratégias gerais para mitigar o esgotamento da porta SNAT são abordadas na secção Resolução de problemas da documentação Ligações de saída do Azure . Destas estratégias, as seguintes são aplicáveis a aplicações e funções alojadas no serviço Aplicação Azure AD.

Modificar a aplicação para utilizar os agrupamentos de ligações

Eis uma coleção de ligações para implementar o Conjunto de ligações através de uma pilha de soluções diferente.

Por predefinição, as ligações do NodeJS não são mantidas vivas. Seguem-se as bases de dados e pacotes populares para agrupamento de ligações com exemplos de como implementá-los.

HTTP Keep-alive

Java

Seguem-se as bibliotecas populares utilizadas para o conjunto de ligações JDBC que contêm exemplos de como implementá-las: Agrupamento de Ligações JDBC.

Agrupamento de Ligações HTTP

PHP

Embora o PHP não suporte o conjunto de ligações, pode tentar utilizar conexões de banco de dados persistentes no servidor de back-end.

Python

Seguem-se as bases de dados e módulos populares para o conjunto de ligações que contêm exemplos de como implementá-los.

Agrupamento de Ligações HTTP

  • O conjunto de ligações Keep-alive e HTTP está ativado por predefinição no módulo Pedidos .
  • Urllib3

Modificar a aplicação para reutilizar ligações

Modificar a aplicação para utilizar uma lógica de repetição menos agressiva

Utilizar as métricas keep alive para repor o tempo limite de inatividade de saída

Mais orientações específicas para Serviço de Aplicações:

  • Um teste de carga deve simular dados do mundo real numa velocidade de alimentação constante. Testar aplicações e funções sob stress do mundo real pode identificar e resolver problemas de esgotamento da porta SNAT com antecedência.
  • Certifique-se de que os serviços de back-end podem devolver respostas rapidamente. Para resolver problemas de desempenho com a Base de Dados do SQL do Azure, veja Resolver problemas de desempenho da Base de Dados do SQL do Azure com o Intelligent Insights.
  • Aumente horizontalmente o plano de Serviço de Aplicações para mais instâncias. Para obter mais informações sobre o dimensionamento, veja Dimensionar uma aplicação no Serviço de Aplicações do Azure. Cada instância de trabalho num plano do serviço de aplicações é atribuída a várias portas SNAT. Se distribuir a utilização por mais instâncias, poderá obter a utilização da porta SNAT por instância abaixo do limite recomendado de 100 ligações de saída, por ponto final remoto exclusivo.
  • Considere mudar para Ambiente do Serviço de Aplicações (ASE), onde lhe é atribuído um único endereço IP de saída e os limites para ligações e portas SNAT são superiores. Num ASE, o número de portas SNAT por instância baseia-se na tabela de pré-alocação do balanceador de carga do Azure. Por exemplo, um ASE com 1-50 instâncias de trabalho tem 1024 portas pré-alocadas por instância, enquanto um ASE com 51-100 instâncias de trabalho tem 512 portas pré-alocadas por instância.

Evitar os limites de TCP de saída é mais fácil de resolver, uma vez que os limites são definidos pelo tamanho da sua função de trabalho. Pode ver os limites em Limites Numéricos de Várias VMs do Sandbox – Ligações TCP

Nome do limite Descrição Pequeno (A1) Médio (A2) Grande (A3) Escalão isolado (ASE)
Ligações Número de ligações em toda a VM 1920 3968 8064 16 000

Para evitar limites de TCP de saída, pode aumentar o tamanho dos seus trabalhadores ou aumentar horizontalmente.

Resolução de problemas

Conhecer os dois tipos de limites de ligação de saída e o que a sua aplicação faz deve facilitar a resolução de problemas. Se souber que a sua aplicação faz muitas chamadas para a mesma conta de armazenamento, poderá suspeitar de um limite SNAT. Se a sua aplicação criar muitas chamadas para pontos finais em toda a Internet, suspeita que está a atingir o limite da VM.

Se não souber o comportamento da aplicação o suficiente para determinar rapidamente a causa, existem algumas ferramentas e técnicas disponíveis no Serviço de Aplicações para ajudar com essa determinação.

Localizar informações de alocação de portas SNAT

Pode utilizar Serviço de Aplicações Diagnóstico para encontrar informações de alocação de portas SNAT e observar a métrica de alocação de portas SNAT de um site de Serviço de Aplicações. Para localizar as informações de alocação de portas SNAT, siga os seguintes passos:

  1. Para aceder Serviço de Aplicações diagnósticos, navegue para a sua aplicação Web Serviço de Aplicações ou Ambiente do Serviço de Aplicações no portal do Azure. No painel de navegação esquerdo, selecione Diagnosticar e resolver problemas.
  2. Selecionar Categoria de Disponibilidade e Desempenho
  3. Selecione o mosaico Esgotamento da Porta SNAT na lista de mosaicos disponíveis na categoria . A prática é mantê-lo abaixo de 128. Se precisar dele, ainda pode abrir um pedido de suporte e o engenheiro de suporte irá obter a métrica do back-end automaticamente.

Uma vez que a utilização da porta SNAT não está disponível como métrica, não é possível dimensionar automaticamente com base na utilização da porta SNAT ou configurar o dimensionamento automático com base na métrica de alocação de portas SNAT.

Ligações TCP e Portas SNAT

As ligações TCP e as portas SNAT não estão diretamente relacionadas. Um detetor de utilização de ligações TCP está incluído na página de gestão Diagnosticar e Resolver Problemas de qualquer Serviço de Aplicações aplicação. Procure a expressão "Ligações TCP" para encontrá-la.

  • As Portas SNAT são utilizadas apenas para fluxos de rede externos, enquanto o total de Ligações TCP inclui ligações de loopback locais.
  • Uma porta SNAT pode ser partilhada por fluxos diferentes, se os fluxos forem diferentes em qualquer protocolo, endereço IP ou porta. A métrica Ligações TCP conta todas as ligações TCP.
  • O limite de ligações TCP ocorre ao nível da instância de trabalho. O balanceamento de carga de saída da Rede do Azure não utiliza a métrica Ligações TCP para limitar a porta SNAT.
  • Os limites de ligações TCP estão descritos em Limites Numéricos entre VMs do Sandbox – Ligações TCP
  • As sessões TCP existentes falham quando são adicionadas novas sessões TCP de saída a partir Serviço de Aplicações do Azure porta de origem. Pode utilizar um único IP ou reconfigurar os membros do conjunto de back-end para evitar conflitos.
Nome do limite Descrição Pequeno (A1) Médio (A2) Grande (A3) Escalão isolado (ASE)
Ligações Número de ligações em toda a VM 1920 3968 8064 16 000

Ligações de WebJobs e Bases de Dados

Se as portas SNAT estiverem esgotadas e os WebJobs não conseguirem ligar ao Base de Dados SQL, não existe nenhuma métrica para mostrar quantas ligações são abertas por cada processo de aplicação Web individual. Para encontrar o WebJob problemático, mova vários WebJobs para outro Serviço de Aplicações plano para ver se a situação melhora ou se um problema permanece num dos planos. Repita o processo até encontrar o WebJob problemático.

Informações adicionais