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.