

# Controle de utilização de solicitações para a API do Amazon ECS
<a name="request-throttling"></a>

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
<a name="throttling-how"></a>

O Amazon ECS usa o [algoritmo de bucket de tokens](https://en.wikipedia.org/wiki/Token_bucket) para implementar o controle de utilização de API. Com esse algoritmo, sua conta tem um *bucket* que contém um número específico de *tokens*. O número de tokens no bucket representa sua cota de controle de utilização a qualquer segundo.

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
<a name="throttling-quotas"></a>

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 |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 20 | 1 | 
| Ações de leitura de cluster |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 50 | 20 | 
| Ações de modificação de definição de tarefa |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 20 | 1 | 
| Ações de leitura de definição de tarefa |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 50 | 20 | 
| Ações de exclusão de definição de tarefa |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 5 | 1 | 
| Ações de modificação de provedor de capacidade |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 10 | 1 | 
| Ações de leitura de provedor de capacidade |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 50 | 20 | 
| Ações de modificação de tag |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 20 | 10 | 
| Ações de leitura de tag |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 50 | 20 | 
| Ações de modificação de configuração |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 10 | 1 | 
| Ações de leitura de configuração |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 50 | 20 | 
| Ações de modificação de recurso de cluster |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 100 | 40 | 
| Ações de leitura de recursos de cluster |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 100 | 20 | 
| Ações de modificação de agente |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 200 | 120 | 
| Ações de modificação de serviço |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 50 | 5 | 
| Ações de leitura de serviço |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 100 | 20 | 
| Ações de implantação de serviço |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 50 | 20 | 
| Ações de revisão de serviço |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 50 | 20 | 
| Ações de proteção de tarefa |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 200 | 80 | 
| Ações de leitura de recursos do serviço de cluster |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/request-throttling.html)  | 10 | 1 | 

<a name="note-1"></a>1 AWS Fargate também faz o controle de utilização da API `RunTask` do Amazon ECS com as taxas listadas [aqui](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/throttling.html) no *Guia do desenvolvedor do Amazon ECS*.

## Ajustar as cotas de controle de utilização da API
<a name="throttling-increase"></a>

É 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](https://console.aws.amazon.com/support/home#/).

## Tratamento do controle de utilização de API
<a name="handling-throttling"></a>

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](https://docs.aws.amazon.com/general/latest/gr/api-retries.html) no Guia de referência geral da AWS
+ Postagem do blog sobre [recuo exponencial e jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)
+ Artigo sobre [tempos limite, novas tentativas e recuo com jitter](https://aws.amazon.com/builders-library/timeouts-retries-and-backoff-with-jitter/) na Amazon Builders' Library