Límites de frecuencia

La API de Google Ads agrupa las solicitudes de limitación de frecuencia por consultas por segundo (QPS) por ID de cliente (CID) y token de desarrollador del cliente, lo que significa que la medición se aplica de forma independiente en los CID y 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, por lo que el límite exacto variará según la carga general del servidor en un momento determinado.

El objetivo de imponer límites de frecuencia es evitar que un usuario interrumpa el servicio de otros usuarios sobrecargando (ya sea de forma intencional o no) 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 si reduces de forma activa la cantidad de solicitudes y limitas el QPS desde el 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 reenvío y el control de la velocidad, puede ayudarte a compilar una app cliente más sólida.

Las siguientes prácticas recomendadas se ordenan según la complejidad, con estrategias más simples en la parte superior y arquitecturas más sólidas pero sofisticadas a continuación:

Limita las tareas simultáneas

Una causa raíz del exceso de límites de frecuencia es que la app cliente genera una cantidad excesiva de tareas en paralelo. Si bien no limitamos la cantidad de solicitudes simultáneas que puede tener una app cliente, esta puede superar fácilmente el límite de solicitudes por segundo a nivel del token del 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 ajustarlo hacia arriba para optimizar el rendimiento sin exceder el límite de frecuencia.

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

Agrupación de solicitudes en lotes

Considera agrupar varias operaciones en una sola solicitud. Esto es más aplicable a las llamadas a MutateFoo. Por ejemplo, si actualizas 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 varios operations. Consulta nuestra guía de operaciones por lotes para ver algunos ejemplos adicionales.

Si bien el procesamiento por lotes de solicitudes reduce la cantidad total de solicitudes y mitiga el límite de solicitudes por minuto, es posible que active el límite 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, también puedes implementar limitadores de frecuencia del cliente. Esto puede garantizar que todos los subprocesos de tus procesos o clústeres estén regidos por un límite de QPS específico desde el cliente.

Puedes consultar el limitador de frecuencia de Guava o implementar tu propio algoritmo basado en Token Bucket 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 se agotaran los tokens, el cliente tendría que esperar hasta que se genere el siguiente lote de tokens.

Agregar a la fila

Una cola de mensajes es la solución para la distribución de la carga de operaciones y, al mismo tiempo, controla las tasas de solicitud y de consumidor. Hay varias opciones de filas de mensajes disponibles, algunas de código abierto y otras propietarias, y muchas de ellas pueden funcionar con diferentes idiomas.

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

Por ejemplo, si un consumidor de mensajes encuentra un error de límite de tarifas, puede devolver 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 unos segundos para recuperarse del error.