Olá pessoal,
[ATUALIZADO EM 05/Setembro/2019] – Desde de Março/19 o limite foi alterado de 60 mil chamadas para 4 mil, tendo isso em mente, este post continua válido, para saber das novas mudança veja este post.
Há alguns dias o time da Microsoft publicou este polêmico artigo sobre limites em chamadas via API (Web services do Dynamics 365).
Falando um pouco sobre a principal mensagem do artigo consiste em avisar que a partir de 19 de março de 2018 teremos um limite de 60.000 chamadas a cada 5 minutos de intervalo por usuário. Leia bem o que escrevi anteriormente, o limite só será excedido se o mesmo usuário realizar mais de 60.000 chamadas de API em 5 minutos no Dynamics 365 Online! Após o limite ser atingido, uma exceção será lançada. Irei falar mais sobre os outros detalhes logo a seguir…
Como era de se esperar houve bastante barulho dentro da comunidade de Dynamics, pois muitas integrações e serviços/produtos de terceiros (third-party) fazem uso massivo de APIs, assim todos gostariam de saber como se preparar e qual a chance de ser impactado por este limite. A resposta para estas perguntas, também pode ser encontrada nos comentários do post original, onde o time do produto explica que a quantidade de organizações impactadas será muito baixa (na grande maioria já foram contactados pela Microsoft), e o principal motivo da imposição do limite é de separar organizações que estão usando muito recurso das demais em um mesmo container/conjunto de servidores. Para verificar os contadores de API, utilize o Organisation Insights.
Agora voltando um pouco aos detalhes de como o limite é aplicado… Como já disse anteriormente, o limite só vale para o mesmo usuário fazendo mais de 60.000 chamadas em menos de 5 minutos. É importante lembrar que os 5 minutos são sempre os últimos 5 minutos de operação, assim, esta “janela de tempo” está em constante movimento. Com isso dito, decidi criar um exemplo diferente do que existe no post da Microsoft, pois achei que eles não estão demonstrando tão bem como o intervalo de tempo versus as chamadas se deslocam com o tempo. Vejam se assim, fica mais fácil de entender (espero que sim!):
* A imagem acima não está considerando a armazenagem das chamadas que foram realizadas quando o limite já havia sido excedido, para maiores informações, continue a leitura do artigo.
Tentei demonstrar na figura acima, como que as quotas variam de acordo com o usuário e bem como o tempo (criei intervalos de 1 em 1 minuto, mas lembre-se de que a janela de 5 minutos está sempre se movendo, então na prática estamos falando de segundos).
Deixei destacado em vermelho os intervalos em que determinado usuário atingiu o limite de chamada. Vejam o usuário 2 como um exemplo de como os valores são calculados. No minuto 1 apenas 2.000 chamadas foram feitas, porém no minuto seguinte, 70.000 chamadas estão sendo feitas, assim, 12.000 chamadas (72.000 – 60.0000) irão retornar uma exceção. Todas as chamadas posteriores até o minuto 6 irão ser impactadas, so que no minuto 7, todas as chamadas do minuto 1 e 2 já estão foram do intervalo de 5 minutos, fazendo com o total seja de apenas 13.000.
Vale lembrar que podemos tratar as exceções e tentar realizar as chamadas novamente em determinado momento, deste modo, no exemplo anterior, no minuto 2, quando o número de chamadas ultrapassou em 12.000, podemos, acumular para futura execução, somando-se aos valores do minuto 3 (4.000), 4 (2.000), 5 (1.000) e 6 (4.000), o total de chamadas para ser processo no minuto 7 iria para 35.000 chamadas ao invés dos 13.000 na imagem acima; Onde 12.000 são referentes as chamadas restantes do minuto 2, mais os valores do minuto 3 ao 6 e por fim as chamadas do próprio minuto 7 (2.000).
Para facilitar um pouco mais o entendimento de como o limite é calculado, fiz um recorte utilizando o usuário 1 como referência:
Como podem ver nos 5 primeiros minutos (destacado em vermelho) que este usuário está requisitando as APIs existem apenas 7.000 chamadas acumuladas, quando chegamos no minuto 6, apenas consideramos as chamadas entre o minuto 2 até o minuto 6 (1500+2000+1000+1500+2000), assim, o valor acumulado vai para 8.000, note que não estamos considerando o número de chamadas realizado no minuto 1. Para os demais minutos a mesma regra se aplica, assim, apenas o acumulado durante o últimos 5 minutos irá ser considerado.
Alguns pontos importantes para serem considerados:
- Consultas utilizando o ExecuteMultilpleRequesr ou ExecuteTransactionRequest irá consumir apenas como uma única chamada, desde modo, quando utilizamos código que já faz uso destas classes dificilmente irão ultrapassar o limite;
- Chamadas realizadas nos seguintes componentes não irão incrementar o contador de chamadas:
- Requests dentro de um plugin/entidade virtual;
- Ações (Processo de Negócio);
- Workflows;
- Serviços do Sistema;
Bom é isso, espero ter ajudado a desmitificar o assunto e tranquilizar aqueles que estavam a procura de informação!
[]’s,
Tiago
Ótimo post Tiago!!! Parabéns!!!
CurtirCurtir
😉
CurtirCurtido por 1 pessoa