Limitación controlada de solicitudes de la API de Amazon ECS
Amazon Elastic Container Service aplica limitación controlada a todas las solicitudes de API de cada cuenta de AWS por región. Esto permite garantizar un rendimiento uniforme y un uso justo del servicio para todos los clientes de Amazon ECS. La limitación controlada impide que las llamadas a la API de Amazon ECS superen las cuotas máximas permitidas de solicitudes de API, tanto para Amazon ECS como para los demás servicios de AWS con los que se integra. Las llamadas a la API están sujetas a las cuotas de solicitudes, independientemente de su procedencia:
-
Una aplicación de terceros
-
Una herramienta de línea de comandos
-
Consola de Amazon ECS
Si supera una cuota de limitación de la API, aparece el código de error ThrottlingException.
An error occurred (ThrottlingException) when calling the DescribeClusters operation (reached max retries: 4): Rate exceeded.
com.amazonaws.services.ecs.model.AmazonECSException: Rate exceeded (Service: AmazonECS; Status Code: 400; Error
Code: ThrottlingException; Request ID: 5ed90669-e454-464d-9b2f-6523bc86f537; Proxy: null)
Cómo se aplica la limitación controlada
Amazon ECS utiliza el algoritmo de bucket de tokens
Amazon ECS analiza la frecuencia con la que se envían solicitudes a todas las API de Amazon ECS de la cuenta, por región, y aplica dos tipos de cuotas de limitación controlada de API: sostenida y de ampliación. La tasa sostenida es el promedio de solicitudes de API permitidas por segundo a lo largo del tiempo para una operación. La tasa de ampliación es el número máximo de solicitudes de API permitidas en un segundo determinado. Con la tasa de ampliación, es posible realizar periódicamente una cantidad de solicitudes de API superior a la tasa sostenida. Después de eso, Amazon ECS aplica limitación controlada a las solicitudes de API posteriores hasta que la tasa de solicitudes de API permitidas a lo largo del tiempo se estabiliza en la tasa sostenida. En el algoritmo de bucket de tokens, la capacidad máxima del bucket representa la tasa de ampliación, y la tasa de recarga del bucket corresponde a la tasa sostenida. En el siguiente ejemplo, se usarán estos términos para ilustrar la limitación controlada de solicitudes de la API de Amazon ECS.
La limitación controlada se aplica en función del número de solicitudes de API realizadas, y cada solicitud elimina un token del bucket de tokens. Por ejemplo, el tamaño del bucket para las acciones de lectura de clúster, como la API DescribeClusters, es de 50 tokens, por lo que se pueden realizar hasta 50 solicitudes DescribeClusters en un segundo. Si se superan las 50 solicitudes en un segundo, se aplica la limitación controlada y las solicitudes restantes de ese segundo fallan.
Los buckets se recargan automáticamente a una tasa fija. Si el bucket está por debajo de la capacidad máxima, se vuelve a agregar un número determinado de tokens cada segundo hasta que alcanza la capacidad máxima. Si el bucket está lleno cuando llegan los tokens de relleno, se descartan. El bucket no puede contener más tokens que su capacidad máxima. Por ejemplo, el tamaño del bucket para las acciones de lectura de clúster, como la API DescribeClusters, es de 50 tokens, y la tasa de recarga es de 20 tokens por segundo. Si se realizan 50 solicitudes de API DescribeClusters en un segundo, el bucket se reduce inmediatamente a cero tokens. A continuación, el bucket se rellena con 20 tokens por segundo hasta alcanzar la capacidad máxima de 50 tokens. Esto significa que el bucket, que estaba vacío, alcanza su capacidad máxima en 2,5 segundos.
No tiene que esperar a que el bucket esté completamente lleno para realizar solicitudes a la API. Puede usar los tokens a medida que se vayan agregando al bucket. Si utiliza inmediatamente los tokens de relleno, el bucket no alcanza la capacidad máxima. Por ejemplo, el tamaño del bucket para las acciones de lectura de clúster, como la API DescribeClusters, es de 50 tokens, y la tasa de recarga es de 20 tokens por segundo. Si se vacía el bucket al realizar 50 solicitudes de API en un segundo, se pueden seguir realizando 20 solicitudes de API por segundo. El bucket solo puede rellenarse hasta su capacidad máxima si realiza menos 20 solicitudes a la API por segundo.
Tamaños de bucket de tokens de solicitudes y tasas de recarga
Para fines de la limitación de la tasa de solicitudes, las acciones de la API se agrupan en categorías. Todas las acciones de API de una categoría comparten el mismo bucket de tokens. Por ejemplo, las API DescribeClusters y ListClusters comparten el bucket Acciones de lectura de clúster, cuya capacidad es de 50 y cuya tasa de recarga es de 20. Esto significa que el número acumulado de solicitudes de API para todas las Acciones de lectura de clúster está sujeto a la misma cuota de tasa de ampliación de 50 solicitudes de API. Por lo tanto, es posible realizar 25 solicitudes de API DescribeClusters y 25 solicitudes de API ListClusters en un segundo; o 30 solicitudes DescribeClusters y 20 solicitudes ListClusters; o 50 solicitudes DescribeClusters y 0 solicitudes ListClusters; o 0 solicitudes DescribeClusters y 50 solicitudes ListClusters. Sin embargo, no es posible realizar 50 solicitudes DescribeClusters y 50 solicitudes ListClusters al mismo tiempo. La tasa sostenida también se aplica de forma acumulativa a todas las solicitudes de API dentro de un bucket.
En la siguiente tabla, se muestran la capacidad del bucket (o ampliación) y la tasa de recarga (o sostenida) para todas las regiones de AWS. Todas las categorías de acciones de API aplican cuotas de tasa por región para cada cuenta de AWS.
| Categoría de la acción de la API | Acciones | Capacidad máxima del bucket (o velocidad de ráfaga) | Tasa de recarga del bucket (o tasa sostenida) |
|---|---|---|---|
| Acciones de modificación de clúster |
|
20 | 1 |
| Acciones de lectura de clúster |
|
50 | 20 |
| Acciones de modificación de definiciones de tarea |
|
20 | 1 |
| Acciones de lectura de definiciones de tarea |
|
50 | 20 |
| Acciones de eliminación de definiciones de tarea |
|
5 | 1 |
| Acciones de modificación de proveedores de capacidad |
|
10 | 1 |
| Acciones de lectura de proveedores de capacidad |
|
50 | 20 |
| Acciones de modificación de etiquetas |
|
20 | 10 |
| Acciones de lectura de etiquetas |
|
50 | 20 |
| Acciones de modificación de configuración |
|
10 | 1 |
| Acciones de lectura de configuración |
|
50 | 20 |
| Acciones de modificación de recursos de clúster |
|
100 | 40 |
| Acciones de lectura de recursos de clúster |
|
100 | 20 |
| Acciones de modificación del agente |
|
200 | 120 |
| Acciones de modificación de servicios |
|
50 | 5 |
| Acciones de lectura de servicios |
|
100 | 20 |
| Acciones de implementación de servicios |
|
50 | 20 |
| Acciones de revisiones de servicios |
|
50 | 20 |
|
Acciones de protección de tareas |
|
200 | 80 |
| Acciones de lectura de recursos de servicios de clúster |
|
10 | 1 |
1 AWS Fargate también aplica limitación controlada a la API RunTask de Amazon ECS según las tasas indicadas aquí en la Guía para desarrolladores de Amazon ECS.
Ajuste de las cuotas de limitación de las API
Se puede solicitar un aumento de las cuotas de limitación controlada de API para la cuenta de AWS. Para solicitar un ajuste de cuota, póngase en contacto con AWS SupportCenter
Gestión de la limitación controlada de la API
Se puede implementar una estrategia de reintento de errores y retroceso exponencial para evitar que los errores de limitación controlada afecten las cargas de trabajo. Si se utiliza el SDK de AWS, la lógica de reintento automático ya viene incorporada y se puede configurar. Para obtener más detalles, consulte los siguientes recursos:
-
Reintentos de error y retroceso exponencial en AWS en la Guía de referencia general de AWS
-
Publicación en el blog Retroceso exponencial y fluctuación
-
Artículo Tiempos de espera, reintentos y retroceso con fluctuación
en Amazon Builder’s Library