Limites de taxas

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

A finalidade da imposição de limites de taxa é evitar que um usuário interrompa o serviço para outros usuários, sobrecarregando (intencionalmente ou não) os servidores da Google Ads API com um alto volume de solicitações.

As solicitações que violam os limites de taxa serã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 limitando o QPS do lado do cliente.

Há várias maneiras de reduzir as chances de ultrapassar o limite de taxa. Familiarizar-se com conceitos do Enterprise Integration Patterns (EIP, na sigla em inglês), como mensagens, nova entrega e otimização, pode ajudar você a criar um app cliente mais robusto.

As seguintes práticas recomendadas, ordenadas por complexidade, com estratégias mais simples na parte superior e arquiteturas mais robustas, mas sofisticadas, em seguida:

Limitar tarefas simultâneas

Uma causa raiz de exceder os limites de taxa é o app cliente estar 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.

É recomendável 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 para otimizar a capacidade sem exceder o limite de taxa.

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

Embora o agrupamento de solicitações em lote reduza o número total de solicitações e reduza o limite de taxa de solicitações por minuto, ele poderá acionar o limite de 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 garante que todas as linhas de execução nos seus processos e / ou clusters sejam regidas por um limite de QPS específico do lado do cliente.

Confira o limitador de taxa Guava ou implemente seu próprio algoritmo com base em bucket de token para um ambiente em cluster. Por exemplo, seria 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 de processar a solicitação. Se os tokens foram usados, o cliente teria 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 do consumidor. 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, você pode 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 uma nova tentativa. Ao mesmo tempo, esse consumidor também pode notificar todos os outros consumidores para que pausem o processamento por alguns segundos e se recuperem do erro.