Erro 500 do servidor interno do Azure Function Proxy de SocketException

Aug 21 2020

Eu tenho um Azure Function que usa proxies e encaminha para outra função azure como back-end. Existe um endpoint / api / ping que aceita um GET. Quando envio um HTTP-GET para ping, ocasionalmente recebo um 500 Erro Interno do Servidor que falhou, onde apenas vejo a solicitação no proxy, mas não vejo a solicitação na função de execução de código de backend.

Eu adicionei o cabeçalho "Proxy-Trace-Enabled" para "true" no cabeçalho para rastrear os resultados. Tenho os resultados na minha pasta D: \ home \ LogFiles \ Application \ Proxies \ DetailedTrace. Lá, o log de uma solicitação com falha contém um objeto json "Backend" com o seguinte

{
    "source": "forward-request",
    "timestamp": "2020-08-20T15:42:20.8272145Z",
    "elapsed": "00:00:00.0061051",
    "data": {
      "messages": [
        "Only one usage of each socket address (protocol/network address/port) is normally permitted Only one usage of each socket address (protocol/network address/port) is normally permitted",
        "Only one usage of each socket address (protocol/network address/port) is normally permitted",
        "Only one usage of each socket address (protocol/network address/port) is normally permitted"
      ]
    }
  }

Acredito que este seja o Azure Functions 1.0 no DotNet, mas ele foi criado há muito tempo. Por que meu proxy simples do Azure Function está me fornecendo erros de servidor internos que não estão encaminhando para o meu código de back-end executar?

Para referência sobre como rastrear as solicitações

Respostas

JustinNeff Sep 09 2020 at 00:17

Existem limites de conexão TCP para Planos de Serviço de Aplicativo da Função do Azure que se correlacionam com as conexões de soquete. A documentação estava em um blog que vou colocar aqui. Houve uma pergunta semelhante sobre exaustão de TCP / porta que usa uma correlação semelhante entre os problemas . Embora a exceção relatada seja diferente, os erros desaparecem em meus testes ao aumentar o serviço do aplicativo.

Exemplo: eu tenho 2 funções do Azure, FunctionA e FunctionB. FunctionA é um proxy e sem execução de back-end no Plano de Serviço de Aplicativo P1. FunctionB é uma função não correlacionada, mas executa no mesmo Plano de Serviço de Aplicativo P1.

A FunctionA no Plano de Serviço de Aplicativo P1 falha com problemas de Erro Interno do Servidor 500 quando chamada. Reportado como falha no App Insights e rastreado nos logs de back-end como uma exceção de soquete.

Recriei o Azure Function, FunctionA, no Plano de Serviço de Aplicativo P3. A FunctionA não recebeu 500 erros internos do servidor. No entanto, não requer a escala de um plano de pagamento P3. Então eu mudei de volta para o P1. Os erros do servidor ocorreram novamente.

FunctionB estava no mesmo Plano de Serviço de Aplicativo que FunctionA (P1). As métricas de monitoramento do Azure totalizaram 4.200 SocketOutboundAll por minuto. Mudei (excluí e recriei) a FunctionB de P1 para P3. Eu mantive a função A em P1. Os erros de SocketOutboundAll foram eliminados da FunctionA em P1. As funções no Plano de Serviço de Aplicativo P3 também não relatam nenhuma exceção.