Límites de frecuencia
La API de Google Ads agrupa las solicitudes para el 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 manera independiente tanto en CID como en tokens de desarrollador. La API de Google Ads utiliza un algoritmo de bucket de tokens para medir las solicitudes y determinar un límite adecuado de QPS, por lo que el límite exacto variará según 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 usuarios, ya sea de forma intencional o no, con el objetivo de sobrecargar los servidores de la API de Google Ads con una gran cantidad de solicitudes.
Las solicitudes que infrinjan los límites de frecuencia se rechazarán con el siguiente 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 las QPS del cliente.
Existen varias formas de reducir las probabilidades de exceder el límite de frecuencia. Familiarizarte con los conceptos de los patrones de integración empresarial (EIP), como la mensajería, el reenvío y la regulación, puede ayudarte a compilar una aplicación cliente más sólida.
Las siguientes prácticas recomendadas están ordenadas por complejidad, con estrategias más simples en la parte superior y arquitecturas más sólidas, pero sofisticadas:
- Limita las tareas simultáneas
- Agrupación de solicitudes en lotes
- Regulación y limitadores de frecuencia
- En fila
Limita las tareas simultáneas
Una de las causas principales 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 superar fácilmente el límite de solicitudes por segundo a nivel de 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 las máquinas) y realizar ajustes a fin de optimizar la capacidad de procesamiento sin exceder el límite de frecuencia.
Además, puedes considerar la regulación de QPS desde el cliente (consulta Regulación y limitadores de frecuencia).
Agrupación de solicitudes en lotes
Considera agrupar varias operaciones en una sola solicitud. Esto se aplica más 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 obtener algunos ejemplos adicionales.
Si bien el procesamiento por 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.
Limitadores 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 lado del cliente. Esto puede garantizar que todos los subprocesos en tus procesos o clústeres se rijan por un límite de QPS específico del cliente.
Puedes probar el Limitador de frecuencia de Guava o implementar tu propio algoritmo basado en el depósito 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 que procese 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 cargas de operaciones, a la vez que controla las solicitudes y los índices de consumo. Hay una serie de opciones de cola de mensajes disponibles, algunas de código abierto y otras de propiedad, y muchas de ellas pueden funcionar con diferentes lenguajes.
Cuando usas las colas de mensajes, puedes hacer que varios productores envíen mensajes a la cola y que varios consumidores procesen esos mensajes. Los reguladores se pueden implementar en el lado del consumidor mediante la limitación de la cantidad de consumidores simultáneos, o la implementación de limitadores o reguladores de frecuencia 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 la reintenten. Al mismo tiempo, el consumidor también puede notificar a todos los demás consumidores para que detengan el procesamiento durante varios segundos a fin de recuperarse del error.