Límites de frecuencia

La API de Google Ads agrupa las solicitudes de límite de frecuencia por consultas por segundo (QPS) por ID de cliente (CID) y token de desarrollador, lo que significa que la medición se aplica de forma independiente tanto en los CID como en los tokens de desarrollador. La API de Google Ads usa un algoritmo de bucket de tokens para medir las solicitudes y determinar un límite de QPS adecuado, de manera que el límite exacto variará en función de la carga general del servidor en cualquier momento.

El propósito de imponer límites de frecuencia es evitar que un usuario interrumpa el servicio para otros, ya sea de forma intencional o no, sobrecargando los servidores de la API de Google Ads con un gran volumen de solicitudes.

Las solicitudes que infrinjan los límites de frecuencia se rechazarán con el error RESOURCE_TEMPORARILY_EXHAUSTED.

Puedes tomar el control de tu app y mitigar los límites de frecuencia mediante la reducción activa de la cantidad de solicitudes y la regulación de las QPS del cliente.

Existen varias formas de reducir las probabilidades de superar el límite de frecuencia. Familiarizarte con los conceptos de los Patrones de integración empresarial (EIP), como los mensajes, la entrega y la regulación, puede ayudarte a compilar una app cliente más sólida.

Estas son las prácticas recomendadas ordenadas por complejidad, con estrategias más simples en la parte superior y arquitecturas más sólidas pero sofisticadas después:

Limita las tareas simultáneas

Una causa raíz de exceder los límites de frecuencia es que la app cliente genera una cantidad excesiva de tareas paralelas. Si bien no limitamos la cantidad de solicitudes paralelas que puede tener una app cliente, esto puede exceder con facilidad el límite de solicitudes por segundo a nivel del token de desarrollador.

Se recomienda establecer un límite superior razonable para la cantidad total de tareas simultáneas que realizarán solicitudes (en todos los procesos y máquinas) y hacer ajustes ascendentes con el objetivo de optimizar la capacidad de procesamiento sin exceder el límite de frecuencia.

Además, puedes considerar limitar las QPS desde el cliente (consulta Regulación y limitadores de frecuencia).

Agrupación de solicitudes en lotes

Considera agrupar varias operaciones en lotes en una sola solicitud. Esto se aplica principalmente a las llamadas de MutateFoo. Por ejemplo, si estás actualizando el estado de varias instancias de AdGroupAd, en lugar de llamar a MutateAdGroupAds una vez por cada AdGroupAd, puedes llamar a MutateAdGroupAds una vez y pasar múltiples operations. Consulta nuestra guía de operaciones por lotes para obtener algunos ejemplos adicionales.

Aunque el procesamiento de solicitudes en lotes reduce la cantidad total de solicitudes y mitiga el límite de frecuencia de solicitudes por minuto, puede activar el límite de frecuencia de operaciones por minuto si realizas una gran cantidad de operaciones en una sola cuenta.

Regulación y limitadores de frecuencia

Además de limitar la cantidad total de subprocesos en tu aplicación cliente, puedes implementar limitadores de frecuencia en el lado del cliente. Esto puede garantizar que todos los subprocesos de tus procesos o clústeres se rijan por un límite de QPS específico del cliente.

Puedes consultar el Limitador de frecuencia de Guava o implementar tu propio algoritmo basado en un bucket de tokens para un entorno agrupado. Por ejemplo, podrías generar tokens y almacenarlos en un almacenamiento transaccional compartido, como una base de datos, y cada cliente tendría que adquirir y consumir un token antes de procesar la solicitud. Si los tokens se agotaron, el cliente tendría que esperar hasta que se genere el siguiente lote.

Agregar a una cola

Una cola de mensajes es la solución para la distribución de la carga de las operaciones y, al mismo tiempo, controlar las tarifas de las solicitudes y los consumidores. Existen varias opciones disponibles en la cola de mensajes, algunas de código abierto y otras propias, y muchas de ellas pueden funcionar con diferentes idiomas.

Cuando usas colas de mensajes, puedes tener varios productores que envíen mensajes a la cola y varios consumidores que procesen esos mensajes. Los reguladores se pueden implementar en el lado del consumidor si limitan la cantidad de consumidores simultáneos o implementan limitadores de frecuencia o reguladores para los productores o consumidores.

Por ejemplo, si un consumidor de mensajes encuentra un error de límite de frecuencia, ese consumidor puede mostrar la solicitud a la cola para que se vuelva a intentar. Al mismo tiempo, ese consumidor también puede notificar a todos los demás consumidores que detengan el procesamiento durante varios segundos para recuperarse del error.