Controle de utilização de solicitações para a API do Amazon ECS
O Amazon Elastic Container Service controla a utilização de todas as solicitações de API para cada conta da AWS com base na região. Fazemos isso para garantir um desempenho consistente e uma utilização justa do serviço para todos os clientes do Amazon ECS. O controle de utilização garante que as chamadas para a API do Amazon ECS não ultrapassem as cotas máximas de solicitação de API permitidas para o Amazon ECS e para os outros serviços da AWS com os quais ele tem integração. As chamadas de API estão sujeitas às cotas de solicitação, independentemente de serem originadas de:
-
Aplicativos de terceiros
-
Uma ferramentas da linha de comando
-
O console do Amazon ECS
Se você exceder a cota de controle de utilização de API, receberá o código de erro 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)
Como o controle de utilização é aplicado
O Amazon ECS usa o algoritmo de bucket de tokens
O Amazon ECS inspeciona a taxa de envio de solicitações de API para todas as APIs do Amazon ECS em sua conta, por região, e aplica dois tipos de cotas de controle de utilização de API: sustentada e intermitente. A taxa sustentada é o número médio de solicitações de API permitido por segundo durante o tempo para uma operação. A taxa de intermitência é o número máximo de solicitações de API permitido em qualquer segundo. Com a intermitência, você pode fazer um número maior de solicitações de API periodicamente comparado com a taxa sustentada. Depois disso, o Amazon ECS faz o controle de utilização das solicitações subsequentes de API até que a taxa de solicitações de API permitida ao longo do tempo se estabilize na taxa sustentada. No algoritmo do bucket de tokens, a capacidade máxima do bucket significa a taxa de intermitência e a taxa de recarga do bucket é a taxa sustentada. Usaremos esses termos para apresentar a você uma ilustração do controle de utilização de solicitação da API do Amazon ECS no exemplo a seguir.
O sistema aplica o controle de utilização do número de solicitações de API que você faz, e cada solicitação remove um token do seu bucket de tokens. Por exemplo, o tamanho do bucket para Ações de leitura do cluster, como a API DescribeClusters, é de 50 tokens, então você pode fazer até 50 solicitações DescribeClusters em 1 segundo. Se ultrapassar as 50 solicitações em 1 segundo, o sistema aplicará o controle de utilização e as solicitações restantes nesse segundo falharão.
Os buckets são recarregados automaticamente a uma taxa definida. Se o bucket ficar abaixo da capacidade máxima, um determinado número de tokens será adicionado novamente a ele a cada segundo até atingir sua capacidade máxima. Se o bucket estiver cheio quando os tokens de recarga forem adicionados, eles serão descartados. O bucket não pode reter mais do que seu número máximo de tokens. Por exemplo, o tamanho do bucket para Ações de leitura do cluster, como a API DescribeClusters, é de 50 tokens, e a taxa de recarga é 20 tokens por segundo. Se você fizer 50 solicitações da API DescribeClusters em 1 segundo, o bucket será imediatamente reduzido para 0 tokens. Em seguida, o bucket será recarregado com 20 tokens a cada segundo até atingir sua capacidade máxima de 50 tokens. Isso significa que o bucket, antes vazio, atingirá sua capacidade máxima após 2,5 segundos.
Para fazer solicitações de API, não é necessário esperar que o bucket esteja completamente cheio. Você pode usar tokens à medida que eles são adicionados ao bucket. Se você usar imediatamente os tokens de recarga, o bucket não atingirá sua capacidade máxima. Por exemplo, o tamanho do bucket para Ações de leitura do cluster, como a API DescribeClusters, é de 50 tokens, e a taxa de recarga é 20 tokens por segundo. Se você esgotar o bucket fazendo 50 solicitações de API em 1 segundo, poderá continuar fazendo 20 solicitações de API por segundo. O bucket só pode ser recarregado até a capacidade máxima quando você faz menos de vinte solicitações de API por segundo.
Tamanhos de buckets e taxas de recarga do bucket de tokens
Para fins de limitação da taxa de solicitação, as ações da API são agrupadas em categorias. Todas as ações de API em uma categoria compartilham o mesmo bucket de tokens. Por exemplo, as APIs DescribeClusters e ListClusters compartilham o bucket Ações de leitura do cluster, para o qual a capacidade é 50 e a taxa de recarga é 20. Isso significa que o número cumulativo de solicitações de API para todas as Ações de leitura do cluster é limitado pela mesma cota de taxa de intermitência de 50 solicitações de API. Consequentemente, você pode fazer 25 solicitações de API DescribeClusters e 25 solicitações de API ListClusters em 1 segundo, ou 30 DescribeClusters e 20 ListClusters, ou 50 DescribeClusters e 0 ListClusters, ou 0 DescribeClusters e 50 ListClusters, mas não pode fazer 50 DescribeClusters e 50 ListClusters solicitações ao mesmo tempo. A taxa sustentada também é aplicada cumulativamente a todas as solicitações de API em um bucket.
A tabela a seguir mostra a capacidade (ou intermitência) do bucket e a taxa de recarga (ou sustentada) para todas as regiões da AWS. Todas as categorias de ação de API impõem cotas de taxas para cada conta da AWS de acordo com a região.
| Categoria de ações de API | Ações | Capacidade máxima do bucket (ou taxa de intermitência) | Taxa de reabastecimento do bucket (ou taxa sustentada) |
|---|---|---|---|
| Ações de modificação de cluster |
|
20 | 1 |
| Ações de leitura de cluster |
|
50 | 20 |
| Ações de modificação de definição de tarefa |
|
20 | 1 |
| Ações de leitura de definição de tarefa |
|
50 | 20 |
| Ações de exclusão de definição de tarefa |
|
5 | 1 |
| Ações de modificação de provedor de capacidade |
|
10 | 1 |
| Ações de leitura de provedor de capacidade |
|
50 | 20 |
| Ações de modificação de tag |
|
20 | 10 |
| Ações de leitura de tag |
|
50 | 20 |
| Ações de modificação de configuração |
|
10 | 1 |
| Ações de leitura de configuração |
|
50 | 20 |
| Ações de modificação de recurso de cluster |
|
100 | 40 |
| Ações de leitura de recursos de cluster |
|
100 | 20 |
| Ações de modificação de agente |
|
200 | 120 |
| Ações de modificação de serviço |
|
50 | 5 |
| Ações de leitura de serviço |
|
100 | 20 |
| Ações de implantação de serviço |
|
50 | 20 |
| Ações de revisão de serviço |
|
50 | 20 |
|
Ações de proteção de tarefa |
|
200 | 80 |
| Ações de leitura de recursos do serviço de cluster |
|
10 | 1 |
1 AWS Fargate também faz o controle de utilização da API RunTask do Amazon ECS com as taxas listadas aqui no Guia do desenvolvedor do Amazon ECS.
Ajustar as cotas de controle de utilização da API
É possível solicitar um aumento das cotas de controle de utilização de API para sua conta da AWS. Para solicitar um ajuste de cota, entre em contato com a Central do AWS Support
Tratamento do controle de utilização de API
Você pode implementar uma nova tentativa de erro e uma estratégia de recuo exponencial para evitar o impacto de erros do controle de utilização em suas workloads. Caso use o AWS SDK, a lógica de repetição automática já está incorporada e configurável. Consulte os seguintes recursos para obter mais detalhes:
-
Novas tentativas de erro e recuo exponencial na AWS no Guia de referência geral da AWS
-
Postagem do blog sobre recuo exponencial e jitter
-
Artigo sobre tempos limite, novas tentativas e recuo com jitter
na Amazon Builders' Library