A API Google Play EMM tem um limite padrão de 60.000 consultas por minuto para cada EMM.
Se você exceder a cota, a API Google Play EMM vai retornar HTTP 429 Too Many Requests
.
Para garantir que você não exceda os limites de uso declarados e ofereça uma experiência ideal
aos usuários, implemente algumas das práticas recomendadas descritas na seção abaixo.
Recomendações para ficar abaixo dos limites de uso da API
Ao usar a API Google Play EMM, é possível implementar algumas práticas recomendadas para distribuir solicitações e reduzir o risco de exceder os limites de uso.
Randomizar horários de início e intervalos
Atividades como sincronizar ou fazer check-in em dispositivos ao mesmo tempo provavelmente vão resultar em um aumento significativo no volume de solicitações. Em vez de realizar essas atividades em intervalos programados regularmente, é possível distribuir a carga de solicitações randomizando esses intervalos. Por exemplo, em vez de sincronizar cada dispositivo a cada 24 horas, você pode sincronizar cada dispositivo em um período escolhido aleatoriamente entre 23 e 25 horas. Isso ajuda a distribuir o número de solicitações.
Da mesma forma, se você executar um job diário que faz muitas chamadas de API em rápida sucessão, considere iniciar o job em um horário aleatório todos os dias para evitar um grande volume de solicitações para todos os clientes corporativos ao mesmo tempo.
Usar a espera exponencial para repetir as solicitações
Se você executar jobs que consistem em muitas chamadas de API, use uma estratégia de espera exponencial em resposta ao atingimento da cota. A espera exponencial é um algoritmo que repete solicitações exponencialmente. Um exemplo de fluxo para implementar a espera exponencial simples é o seguinte:
- Faça uma solicitação para a API Google Play EMM.
- Receba uma resposta
HTTP 429
. - Aguarde 2 segundos +
random_time
e tente novamente a solicitação. - Receba uma resposta
HTTP 429
. - Aguarde 4 segundos +
random_time
e tente novamente a solicitação. - Receba uma resposta
HTTP 429
. - Aguarde 8 segundos +
random_time
e tente novamente a solicitação.
O random_time
geralmente é um número aleatório que varia de -0,5 * tempo de espera
a +0,5 * tempo de espera. Redefina um novo random_time
sempre que tentar novamente a
solicitação. As chamadas de API necessárias para concluir ações voltadas ao usuário podem ser repetidas em uma programação mais frequente (0, 5s, 1s e 2s, por exemplo).
Limitar a taxa de processos em lote
Sempre que um processo em lote atinge a cota, a latência das ações do usuário que chamam a API aumenta. Em situações como essas, estratégias como a desistência exponencial podem não ser eficazes o suficiente para manter a baixa latência das ações do usuário.
Para evitar alcançar os limites de uso da API repetidamente e aumentar a latência para ações voltadas ao usuário, use um limitador de taxa para seus processos em lote (consulte RateLimiter do Google). Com um limitador de taxa, você pode ajustar a taxa das solicitações de API para permanecer consistentemente abaixo dos limites de uso.
Por exemplo, inicie um processo em lote com um limite de taxa padrão de 50 QPS. Enquanto a API não retornar um erro, aumente o limite de taxa lentamente (1% a cada minuto). Sempre que você atingir a cota, reduza a taxa de solicitações em 20%. Essa abordagem adaptativa resulta em uma taxa de solicitação mais otimizada, além de reduzir a latência para ações voltadas ao usuário.