Limites de taxas

A API Google Ads agrupa as solicitações de 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 maneira independente nos CIDs e nos 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 apropriado. Assim, o limite exato varia de acordo com a carga geral do servidor em qualquer momento.

O objetivo da imposição de limites de taxa é impedir que um usuário interrompa o serviço de outros usuários (de maneira intencional ou não) sobrecarregar os servidores da Google Ads API com um grande volume de solicitações.

As solicitações que violarem as limitações 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 exceder o limite de taxa. Conhecer conceitos de Enterprise Integration Patterns (EIP, na sigla em inglês), como mensagens, nova entrega e otimização, pode ajudar 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, porém sofisticadas em seguida:

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. Não limitamos o número de solicitações paralelas que um app cliente pode ter, mas isso pode facilmente exceder o limite de solicitações por segundo no nível do token de desenvolvedor.

Recomendamos 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 aumentar para otimizar sua capacidade sem exceder o limite de taxa.

Além disso, você pode avaliar a possibilidade de limitar o QPS do lado do cliente. Consulte 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 para 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 nossa orientação sobre operações em lote para mais alguns exemplos.

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

Você pode conferir o limitador de taxa Guava ou implementar seu próprio algoritmo com base 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 precisa adquirir e consumir um token antes de processar a solicitação. Se os tokens tiverem sido usados, o cliente precisará aguardar a geração do próximo lote de tokens.

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 do consumidor. Há várias opções de fila de mensagens disponíveis, algumas de código aberto, outras reservadas, e muitas delas funcionam com linguagens 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 taxa, ele poderá retornar a solicitação para a fila para ser repetida. Ao mesmo tempo, ele também pode notificar todos os outros consumidores para que pausem o processamento por alguns segundos a fim de se recuperar do erro.