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 retornará HTTP 429 Too Many Requests
.
Para garantir que você não exceda os limites de uso estabelecidos e ofereça uma experiência ideal aos
seus usuários, considere implementar 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, você pode implementar algumas práticas recomendadas para distribuir as solicitações e reduzir o risco de exceder os limites de uso.
Ordem aleatória e horários de início
Atividades como a sincronização ou o check-in de dispositivos ao mesmo tempo podem 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 aleatoriamente esses intervalos. Por exemplo, em vez de sincronizar cada dispositivo a cada 24 horas, sincronize cada dispositivo em um período aleatório escolhido 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 espera exponencial para repetir solicitações
Se você executar jobs que consistem em muitas chamadas de API, use uma estratégia de espera exponencial em resposta a uma cota. A espera exponencial é um algoritmo que repete solicitações exponencialmente. Veja um exemplo de fluxo para implementar a espera exponencial simples:
- Faça uma solicitação à API Google Play EMM.
- Receba uma resposta
HTTP 429
. - Aguarde dois segundos +
random_time
e tente fazer a solicitação novamente. - Receba uma resposta
HTTP 429
. - Aguarde quatro segundos +
random_time
e tente fazer a solicitação novamente. - Receba uma resposta
HTTP 429
. - Aguarde oito segundos +
random_time
e tente fazer a solicitação novamente.
O random_time
normalmente é 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 você tentar
fazer a solicitação novamente. As chamadas de API necessárias para concluir ações voltadas para o usuário podem ser repetidas em uma programação mais frequente (0, 5s, 1s e 2s, por exemplo).
Processos em lote com limitação de taxa
Cada vez que um processo em lote atinge a cota, a latência das ações do usuário que chama a API aumenta. Em situações como essas, estratégias como a espera exponencial podem não ser eficazes o suficiente para manter a baixa latência para ações do usuário.
Para evitar atingir os limites de uso da API repetidamente e aumentar a latência para ações voltadas para o usuário, considere usar um limitador de taxa para seus processos em lote. Consulte o RateLimitr do Google. Com um limitador de taxa, é possível ajustar a taxa de solicitações de API para permanecer sempre abaixo dos limites de uso.
Por exemplo, inicie um processo em lote com um limite de taxa padrão de 50 QPS. Desde que a API não retorne um erro, aumente o limite de taxa lentamente (1% a cada minuto). Sempre que você alcançar a cota, reduza a taxa de solicitação em 20%. Essa abordagem adaptável resulta em uma taxa de solicitação mais otimizada, além de reduzir a latência para ações voltadas para o usuário.