Limites de taxas
A API Google Ads agrupa solicitações para a limitação de taxa por consultas por segundo (QPS) por ID do cliente (CID, na sigla em inglês) e token de desenvolvedor. Isso significa que a medição é aplicada de maneira independente nos CIDs e tokens de desenvolvedor. A Google Ads API usa um algoritmo de intervalo de token para medir solicitações e determinar um limite de QPS adequado. Assim, o limite exato varia de acordo com a carga geral do servidor a qualquer momento.
O objetivo de impor limites de taxa é impedir que um usuário interrompa o serviço para outros usuários, intencionalmente ou não, sobrecarregando os servidores da API Google Ads com um alto volume de solicitações.
As solicitações que violam os limites de taxa são rejeitadas com o erro:
RESOURCE_TEMPORARILY_EXHAUSTED
.
Você pode assumir o controle do seu aplicativo e reduzir os limites de taxa reduzindo ativamente o número de solicitações e limitando o QPS do lado do cliente.
Existem várias maneiras de reduzir as chances de exceder o limite de taxa. Conhecer melhor os conceitos de Enterprise Integration Patterns (EIP, na sigla em inglês) como Mensagens, Reenvio e Limitação pode ajudar você a criar um app cliente mais robusto.
Veja a seguir as práticas recomendadas ordenadas por complexidade, com estratégias mais simples na parte de cima e arquiteturas mais robustas, porém sofisticadas:
Limitar tarefas simultâneas
Uma causa raiz de exceder os limites de taxa é que o app cliente é gerado por um número excessivo de tarefas paralelas. Não limitamos o número de solicitações paralelas que um app cliente pode ter, mas isso pode exceder facilmente o limite de solicitações por segundo no nível do token de desenvolvedor.
É recomendável definir um limite superior razoável para o número total de tarefas simultâneas que vão fazer solicitações (em todos os processos e máquinas) e ajustar para otimizar a capacidade sem exceder o limite de taxa.
Além disso, é possível limitar o QPS do lado do cliente (confira Limitação e limitadores de taxa).
Solicitações em lote
Considere agrupar várias operações em uma única solicitação. Isso é mais
aplicável em chamadas MutateFoo
. Por exemplo, se você estiver atualizando o status
de várias instâncias de AdGroupAd
, em vez de chamar
MutateAdGroupAds
uma vez para cada AdGroupAd
, chame
MutateAdGroupAds
uma vez
e transmita várias operations
. Para mais exemplos, consulte nossas
orientações sobre operações em lote.
As solicitações em lote reduzem o número total de solicitações e reduzem o limite da taxa de solicitações por minuto, mas podem acionar o limite da taxa de operações por minuto se você executar um grande número de operações em uma única conta.
Limitação e limitação de taxa
Além de limitar o número total de conversas do aplicativo cliente, você também pode implementar limitadores de taxa no lado do cliente. Isso pode garantir que todas as linhas de execução nos processos e/ou clusters sejam regidas por um limite específico de QPS do lado do cliente.
Confira o limitador de taxa Guava ou implemente seu próprio algoritmo baseado em bucket de token para um ambiente em cluster. Por exemplo, é possível gerar tokens e armazená-los em um armazenamento transacional compartilhado, como um banco de dados, e cada cliente teria que adquirir e consumir um token antes do processamento da solicitação. Se os tokens forem usados, o cliente terá que esperar até que o próximo lote de tokens seja gerado.
Sistema de fila
Uma fila de mensagens é a solução para a distribuição de carga de operação, além de controlar as taxas de solicitação e consumidor. Há várias opções de fila de mensagens disponíveis, algumas de código aberto, outras reservadas, e muitas delas funcionam com idiomas diferentes.
Ao usar filas de mensagens, é possível que vários produtores enviem mensagens para a fila e vários consumidores processando essas mensagens. Para implementar os otimizadores no lado dos consumidores, limite o número de consumidores simultâneos ou implemente limitadores de taxa ou otimizadores para os produtores ou consumidores.
Por exemplo, se um consumidor de mensagem encontrar um erro de limite de taxas, esse cliente poderá retornar a solicitação à fila para ser repetida. Ao mesmo tempo, o consumidor também pode notificar todos os outros consumidores para que pausem o processamento por alguns segundos com a finalidade de se recuperar do erro.