Limites de taxas

A API Google Ads agrupa solicitações de limitação de taxa por consultas por segundo (QPS) por ID de cliente (CID) e token do desenvolvedor, o que significa que a medição é aplicada de forma independente a ambos. A API Google Ads usa um algoritmo Token Bucket para medir solicitações e determinar um limite de QPS adequado. Portanto, o limite exato varia de acordo com a carga geral do servidor em um determinado momento.

O objetivo de impor limites de taxa é impedir que um usuário atrapalhe o serviço de outros usuários (intencionalmente ou não) sobrecarregando os servidores da API do Google Ads com um grande 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 app e reduzir os limites de taxa reduzindo ativamente o número de solicitações e restringindo o QPS do lado do cliente.

Há várias maneiras de reduzir as chances de exceder o limite de taxa. Conhecer os conceitos de padrões de integração empresarial (EIP, na sigla em inglês), como mensagens, reenvio e limitação, pode ajudar você a criar um app cliente mais robusto.

As práticas recomendadas a seguir são ordenadas por complexidade, com estratégias mais simples no topo e arquiteturas mais robustas, mas sofisticadas, depois:

Limitar tarefas simultâneas

Uma das causas raiz do excesso de limites de taxa é que o app cliente está gerando um número excessivo de tarefas paralelas. Embora não limite o número de solicitações em paralelo que um app cliente pode ter, isso pode exceder facilmente o limite de solicitações por segundo no nível do token do 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 cima para otimizar a taxa de transferência sem exceder o limite de taxa.

Além disso, você pode considerar 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 a 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ários operations. Consulte nossas orientações sobre operações em lote para conferir mais exemplos.

Embora as solicitações em lote reduzam o número total de solicitações e mitiguem o limite de taxa de solicitações por minuto, elas podem acionar o limite de taxa de operações por minuto se você realizar um grande número de operações em uma única conta.

Limitação de taxa e de largura de banda

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 dos seus processos e / ou clusters sejam governadas por um limite específico de QPS do lado do cliente.

Confira o Limitador de taxa do Guava ou implemente seu próprio algoritmo baseado em Token Bucket para um ambiente agrupado. Por exemplo, você poderia 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 de processar a solicitação. Se os tokens forem usados, o cliente terá que esperar até que o próximo lote de tokens seja gerado.

Enfileiramento

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 de consumo. Há várias opções de fila de mensagens disponíveis, algumas de código aberto, outras proprietárias, e muitas delas podem funcionar com idiomas diferentes.

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 mensagens encontrar um erro de limite de taxas, ele poderá retornar a solicitação para a fila para que seja tentada novamente. Ao mesmo tempo, esse consumidor também pode notificar todos os outros consumidores para pausar o processamento por um número de segundos para se recuperar do erro.