Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Resumo
Este artigo explica como solucionar problemas de desempenho Gerenciamento de API do Azure em chamadas à API, incluindo latência de back-end e erros HTTP 500 e 429. Use estas etapas para isolar falhas e melhorar os tempos de resposta da API.
Este artigo é o quarto cenário do laboratório da série de solução de problemas do Gerenciamento de API do Azure. Siga as instruções de instalação do laboratório de acordo com as instruções de laboratório da série de solução de problemas do Gerenciamento de API.
Versão original do produto: Serviço de Gerenciamento de API
Número original do KB: 4464929
Sintomas
A API ProductStore no Gerenciamento de API se comunica com o endpoint de back-end (https://productstoreapp.azurewebsites.net) para criar, ler, atualizar e excluir registros conforme necessário. No entanto, você pode encontrar problemas de desempenho e exceções ao executar as seguintes operações de API.
Note
Para obter os melhores resultados de teste, mantenha apenas três produtos com IDs variando de um a três.
Products_GetAllProducts leva cinco segundos para retornar os resultados, mas o tempo de resposta esperado é menor que um segundo.
Quando você usa a operação Products_DeleteProduct para excluir um produto com qualquer uma das IDs mencionadas anteriormente (de um a três), você obtém um HTTP 500 – Erro interno do servidor com a seguinte mensagem:
"Message": "Ocorreu um erro."
Uma operação que atualiza um produto é limitada inesperadamente e resulta em um erro HTTP 429 – Muitas solicitações . Esse erro ocorre independentemente da ID do produto e do corpo da solicitação. Por exemplo, se o cliente atualizar o preço do produto "Sopa de tomate" com a ID do produto definida como uma usando o exemplo a seguir, ele receberá um código de status HTTP 429.
ID do parâmetro do modelo: 1
Corpo da Solicitação: {"Nome": "Sopa de tomate","Categoria": "Mantimentos","Preço": 2.45}
Corpo da resposta:
{
O limite da taxa é excedido. Tente novamente depois de algum tempo.
}
Solução de problemas
Ao solucionar problemas de desempenho, a melhor maneira de isolar falhas é capturando um rastreamento do Inspetor de Gerenciamento de API que mostra o tempo necessário para cada seção (Entrada, Back-end e Saída).
latência de Products_GetAllProducts
Se você analisar o rastreamento do Inspetor de API para esse problema, verá que o back-end leva mais tempo (aproximadamente cinco segundos). Esse resultado significa que há alguma lentidão ou uma operação de execução prolongada no back-end. O exemplo a seguir mostra o tempo de resposta do backend no rastreamento do Inspetor da API:
"source": "solicitação de encaminhamento",
"timestamp": "2018-07-29T16:16:46.6615081Z"
"decorrido": "00:00:05.5844430",
"data": {
"resposta": {
"status": {
"código": 200,
"reason": "OK" }
Depois de identificar que a lentidão ocorre no back-end, será necessário investigar o código da aplicação de back-end da API da Web. Para cenários em que você não tem acesso ao back-end, você pode implementar o cache no nível de Gerenciamento de API, conforme mostrado no exemplo a seguir.
<?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 obter mais informações sobre cache, consulte Adicionar cache para melhorar o desempenho no Gerenciamento de API do Azure.
Products_DeleteProduct erro de servidor interno HTTP 500
Para este problema, siga o mesmo procedimento para analisar o rastreamento do inspetor do Gerenciamento de API. Você provavelmente verá um código de status HTTP 500 no forward-request atributo de resposta.
Esse código de status significa que a API de back-end retorna HTTP 500 devido a uma exceção sem tratamento no código de back-end. Não há nenhum problema no nível de Gerenciamento de API, conforme mostrado no exemplo a seguir:
solicitação de encaminhamento (841.060 ms)
{
"resposta": {
"status": {
"código": 500,
"reason": "Erro interno do servidor"
}
Products_PutProduct erro HTTP 429 de excesso de solicitações
Nesse caso, parece que você está esbarrando em um limite de taxa de chamadas à API. Verifique se há alguma política rate-limit ou rate-limit-by-key implementada em nível de operação.
Se você não encontrar nenhuma política como essa no nível da operação, selecione Calcular política efetiva. Essa ação mostra todas as políticas herdadas de vários níveis, incluindo políticas no nível do produto que podem causar esse problema.
Você pode ver algumas políticas implementadas no nível da API que não limitam a taxa de chamadas à API. Em vez disso, imita essas ações retornando uma resposta personalizada ao cliente, usando as políticas return-response e set-status na seção Outbound, conforme mostrado no exemplo a seguir:
<?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>