Solucionar problemas de desempenho em chamadas de API

Referindo-se ao blog no Azure Gerenciamento de API Série de Solução de Problemas, este é o quarto cenário do laboratório. Verifique se você seguiu as instruções de instalação do laboratório de acordo com isso, para recriar o problema.

Versão original do produto: Gerenciamento de API Service
Número de KB original: 4464929

Sintomas

O ProductStore da API no APIM se comunica com o ponto de extremidade de back-end (https://productstoreapp.azurewebsites.net) para criar, ler, atualizar e excluir registros facilmente como e quando necessário. No entanto, você pode enfrentar alguns problemas de desempenho e exceções ao invocar as operações de API listadas abaixo. Para facilitar o teste, mantenha apenas três produtos com IDs variando de 1 a 3.

  • Uma das funções de API Products_GetAllProducts está levando 5 segundos para retornar os resultados, enquanto o tempo de resposta esperado é menor que um segundo.

  • Ao excluir um produto com qualquer uma das IDs mencionadas acima (1 a 3), você está recebendo HTTP 500 – Erro interno do servidor com a mensagem abaixo chamando Products_DeleteProduct operação.

    {
    "Mensagem": "Ocorreu um erro".
    }

  • Products_PutProduct operação que atualiza um produto está sendo limitada inesperadamente, lançando HTTP 429 – Muitas solicitações com a mensagem de erro abaixo, independentemente da ID do produto e do corpo da solicitação, que você envia na solicitação. Por exemplo, se o cliente atualizar o preço do produto de "Sopa de Tomate" com ID do produto = 1 com o corpo Json abaixo, ele receberá HTTP 429 status código.

    ID do parâmetro de modelo: 1
       Corpo da Solicitação: {"Nome": "Sopa de tomate", "Categoria": "Mercearias", "Preço": 2,45}
       Corpo da resposta:
    {
    O limite de taxa é excedido. Tente novamente depois de algum tempo.
    }

Etapas para a solução de problemas

  • Enquanto soluciona problemas de desempenho, a melhor maneira de a técnica de isolamento de falhas é capturar [rastreamento de inspetor APIM que mostra o tempo gasto em cada seção (Entrada/Back-end/Saída).

  • Se você analisar o rastreamento do Inspetor de API para o primeiro problema, você perceberá que a seção Back-end está levando a maior parte do tempo (aproximadamente 5 segundos), o que significa que há alguma lentidão ou operação de execução longa ocorrendo no back-end.

    "source": "forward-request",
    "carimbo de data/hora": "2018-07-29T16:16:46.6615081Z",
    "decorrido": "00:00:05.5844430", "dados": {
    "response": {
    "status": {
    "code": 200,
    "reason": "OK"
    }

  • Depois de isolar que a lentidão está no back-end, você precisará investigar o código do aplicativo de back-end do aplicativo de API Web. Para cenários em que você não tem acesso ao back-end, você pode implementar o cache no nível APIM como abaixo. Leia sobre como implementar políticas de cache para melhorar o desempenho no Azure Gerenciamento de API.

    <?xml version="1.0" encoding="UTF-8"?>
    <policies>
       <inbound>
          <base />
          <cache-lookup vary-by-developer="true" vary-by-developer-groups="true" must-revalidate="true" downstream-caching-type="public" />
       </inbound>
       <backend>
          <base />
       </backend>
       <outbound>
          <base />
          <cache-store duration="60" />
       </outbound>
       <on-error>
          <base />
       </on-error>
    </policies>
    
  • Para o segundo problema (HTTP 500 – Erro interno do servidor), siga o mesmo procedimento de análise do rastreamento do inspetor APIM e devemos ver HTTP 500 status código em atributo de resposta 'solicitação de encaminhamento'.

  • Isso significa que a API de back-end retornou HTTP 500 devido a alguma exceção não tratada ocorrida no código de back-end, não há nenhum problema no nível APIM.

    solicitação de encaminhamento (841.060 ms)
    {
    "response": {
    "status": {
    "code": 500,
    "reason": "Internal Server Error"
    }

  • Para o terceiro problema (HTTP 429 – Muitas solicitações) parece que você está atingindo o limite de taxa de chamada da API. Provavelmente você pode marcar se houver qualquer política de "limite de taxa" ou "limite de taxa por chave" implementada no nível da operação.

  • Se você não conseguir encontrar tais políticas no nível de operação, clique no botão Calcular política efetiva , que mostrará todas as políticas herdadas de vários níveis, como se você tivesse algumas políticas no nível do produto que possam causar esse problema.

  • Aqui, você deve observar que algumas políticas são implementadas no nível da API que não realmente limitam a taxa de chamada da API, mas imitam sua ação retornando uma resposta personalizada de volta ao cliente usando políticas de "retorno-resposta" e "set-status" na seção de saída.

    <?xml version="1.0" encoding="UTF-8"?>
    <outbound>
       <!--base: Begin Api scope-->
       <return-response>
          <set-status code="429" reason="Too many requests" />
          <set-body><![CDATA[{
    
    Rate limit is exceeded. Try again after some time.
    
    }]]></set-body>
       </return-response>
       <!--base: End Api scope-->
    </outbound>
    

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.