Limites de taxas

A API Google Ads agrupa as solicitações para limitação de taxa por consultas por segundo (QPS) por ID de cliente (CID) e token de desenvolvedor. Isso significa que a medição é aplicada de forma independente em CIDs e tokens de desenvolvedor. A API Google Ads usa um algoritmo de 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 a qualquer momento.

O objetivo de impor limites de taxa é evitar que um usuário prejudique o serviço para outros usuários, intencionalmente ou não, sobrecarregando os servidores da API Google Ads com um grande volume de solicitações.

As solicitações que violarem os limites de taxa serão rejeitadas com o erro: RESOURCE_TEMPORARILY_EXHAUSTED.

É possível controlar seu app e reduzir os limites de taxa diminuindo ativamente o número de solicitações e limitando o QPS do lado do cliente.

Há várias maneiras de reduzir as chances de exceder o limite de taxa. Conhecer os conceitos de Enterprise Integration Patterns (EIP), 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 causa raiz do excesso de 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 exceder facilmente o limite de solicitações por segundo no nível do token de desenvolvedor.

Recomendamos definir um limite 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 para otimizar a capacidade sem exceder o limite de taxa.

Além disso, você pode 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, você pode chamar MutateAdGroupAds uma vez e transmitir vários operations. Consulte nossas orientações sobre operações em lote para ver mais exemplos.

Embora o agrupamento de solicitações reduza o número total de solicitações e diminua o limite de taxa de solicitações por minuto, ele pode 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 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 threads nos seus processos e / ou clusters sejam regidas 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 clusterizado. Por exemplo, você pode gerar tokens e armazená-los em um armazenamento transacional compartilhado, como um banco de dados. 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 fosse 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 filas de mensagens disponíveis, algumas de código aberto e outras proprietárias, e muitas delas funcionam com diferentes linguagens.

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 à fila para ser repetida. Ao mesmo tempo, esse consumidor também pode notificar todos os outros consumidores para pausar o processamento por alguns segundos e se recuperar do erro.