Limites de taxas

A API Google Ads agrupa as solicitações de limitação de taxa por consultas por segundo (QPS) por ID do cliente (CID, na sigla em inglês) e token de desenvolvedor, o que significa que a medição é aplicada de maneira independente nos CIDs e tokens de desenvolvedor. A API Google Ads usa um algoritmo de bucket de token para medir as solicitações e determinar um limite de QPS apropriado. 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, seja de forma intencional ou não intencional, 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 QPS do lado do cliente.

Há várias maneiras de reduzir as chances de exceder o limite de taxa. Familiarizar-se com os conceitos de Enterprise Integration Padrões (EIP, na sigla em inglês) como Mensagens, Reenvio e Limitação pode ajudar você a criar um app de cliente mais robusto.

As práticas recomendadas a seguir, ordenadas por complexidade, com estratégias mais simples na parte superior e arquiteturas mais robustas, mas sofisticadas, após:

Limitar tarefas simultâneas

Uma causa raiz de exceder os limites de taxa é que o app cliente está gerando um número excessivo de tarefas paralelas. Embora não limitemos o número de solicitações paralelas que um app cliente pode ter, isso pode facilmente exceder o limite de solicitações por segundo no nível do token de desenvolvedor.

É recomendado definir um limite superior razoável para o número total de tarefas simultâneas que farão solicitações (em todos os processos e máquinas) e ajustar para cima a fim de otimizar a capacidade sem exceder o limite de taxa.

Além disso, você pode avaliar a limitação de QPS do lado do cliente (confira Limitação e limitação de taxa).

Solicitações em lote

Considere agrupar várias operações em uma única solicitação. Isso é mais aplicável em chamadas de 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, é possível chamar MutateAdGroupAds uma vez e transmitir várias operations. Consulte a orientação sobre operações em lote para ver mais alguns exemplos.

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 limitadores 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 Limite de taxa Guava ou implemente seu próprio algoritmo de 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 precisaria adquirir e consumir um token antes de processar a solicitação. Se os tokens fossem usados, o cliente teria que esperar até que o próximo lote de tokens fosse gerado.

Enfileiramento

Uma fila de mensagens é a solução para a distribuição da carga de operações, além de controlar as taxas de solicitações e consumidores. Há várias opções disponíveis de filas de mensagens (algumas de código aberto, outras reservadas) e muitas delas podem funcionar com diferentes idiomas.

Ao usar filas de mensagens, é possível ter vários produtores enviando 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 encontra um erro de limite de taxa, ele pode retornar a solicitação para a 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.