Todos os produtos
Search
Central de documentação

Alibaba Cloud SDK:Mecanismo avançado de backoff baseado na política de throttling

Última atualização: Jun 28, 2026

O mecanismo avançado de backoff usa informações de throttling do servidor para calcular intervalos de nova tentativa e gerencie taxas de requisições de API durante ciclos de throttling.

Nota

Os mecanismos de nova tentativa e a política de throttling foram adicionados. Para mais informações, consulte Mecanismo de nova tentativa.

A biblioteca principal aliyun-java-sdk-core V4.6.0 e versões posteriores oferecem suporte ao mecanismo de nova tentativa e fornecem um mecanismo avançado de backoff baseado na política de throttling. Para mais detalhes, consulte Mecanismo de nova tentativa. Adicione a seguinte dependência Maven:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.6.0</version>
</dependency>
Importante
  1. Nem todas as operações de API oferecem suporte ao mecanismo avançado de backoff. Para verificar se uma operação específica é compatível, consulte a seção Quotas Info na documentação da API do serviço correspondente. Por exemplo, veja a seção Quotas Info no tópico DescribeHpcClusters do Elastic Compute Service (ECS).

  2. Você pode ative esse mecanismo no SDK independentemente do suporte das operações de API. Caso elas não sejam compatíveis, as políticas de backoff e de desativação de requisições não terão efeito. No entanto, se essas operações passarem a oferecer suporte posteriormente, a política de throttling e a de desativação de requisições poderão ser acionadas inesperadamente, dificultando a solução de problemas.

  3. Após ative este mecanismo, continue monitorando as chamadas de API com falha. Depender exclusivamente do mecanismo de backoff pode tornar a identificação de problemas mais complexa.

  4. Os exemplos abaixo pressupõem que as operações de API oferecem suporte ao mecanismo de backoff baseado na política de throttling.

Visão geral

O mecanismo avançado de backoff compreende duas políticas:

  • Política de backoff

  • Política de desativação de requisições de API durante o throttling

O algoritmo de backoff exponencial EqualJitter calcula os intervalos de nova tentativa. Consulte Mecanismo de nova tentativa para mais informações. O mecanismo avançado ajusta ainda mais esses intervalos com base nas informações de throttling do lado do servidor.

Ative a política de backoff baseada na política de throttling

Por padrão, a política de backoff baseada em throttling vem desativada. Use um dos métodos abaixo para ativá-la:

  1. Configure uma política de nova tentativa.

RetryPolicy retryPolicy = RetryPolicy.builder()
                .maxNumberOfRetries(3) // The maximum number of retries.
                .maxDelayTimeMillis(20 * 1000) // The maximum retry interval. Unit: milliseconds. If the interval is exceeded, no retries are performed.
                //.retryConditions(retryConditions) // The policy that is used to trigger retries.
                .enableAliyunThrottlingControl(true) // Enable the backoff policy based on the throttling policy. 
                //.throttlingConditions(throttlingConditions) // The policy that is used to restrict retries.
                .build();

request.setSysRetryPolicy(retryPolicy);
  1. Use a política de nova tentativa padrão.

// The default policy. The request parameter is enableAliyunThrottlingControl. The value true specifies that the backoff policy based on the throttling policy is enabled. The value false specifies that the backoff policy based on the throttling policy is disabled.
RetryPolicy retryPolicy = RetryPolicy.defaultRetryPolicy( 
true 
);

request.setSysRetryPolicy(retryPolicy);

Benefícios de ative a política de backoff baseada na política de throttling

  1. Reduz novas tentativas desnecessárias e diminui o consumo de recursos do sistema.

  2. Calcula intervalos de backoff mais precisos, aumentando as taxas de sucesso nas novas tentativas.

Configurações avançadas

Política de backoff: Cálculo do tempo de backoff com base na política de throttling

Com a política de backoff baseada em throttling ativada, o cálculo do tempo ocorre da seguinte forma:

  1. Na ausência de throttling, o EqualJitter calcula o intervalo de nova tentativa.

  2. Quando o throttling é acionado, o intervalo corresponde ao maior valor entre o tempo restante do ciclo atual e o resultado do EqualJitter. Se esse intervalo ultrapassar o intervalo máximo de nova tentativa, uma exceção será lançada e o tempo restante do ciclo ficará em cache para uso pela política de desativação de requisições.

Política de desativação de requisições de API durante o throttling

Ao ative a política de backoff baseada em throttling e ocorrer limitação, o servidor retorna informações de cota restante no cabeçalho da resposta. Esses dados incluem a quantidade restante de chamadas de API e o tempo restante do ciclo atual, reportados nas dimensões "User" e "API + User". Em caso de throttling, a contagem restante será 0.

Nota

Chaves correspondentes às duas dimensões no cabeçalho:

  • Dimensão "API + User": X-RateLimit-User-API

  • Dimensão "User": X-RateLimit-User

Exemplo da dimensão "API + User":

"X-RateLimit-User-API" : "Remain:1,Limit:2,Time:1000,TimeLeft:122,Reset:1637835220000"

Remain: número restante de chamadas de API. O parâmetro Remain é do tipo INT. Um valor -1 indica cota suficiente. Se houver throttling, o valor retornado é 0.

Limit: the maximum throttling threshold. The value is of the INT type.
Time: the time span of throttling. The value is of the LONG type. Unit: milliseconds.
TimeLeft: the remaining time of the current throttling cycle. The value is of the LONG type. Unit: milliseconds.
Reset: the start time of the next throttling cycle. The value is of the LONG type and is a timestamp in milliseconds

.

O SDK rastreia o tempo restante do ciclo de throttling atual e bloqueia novas chamadas ou novas tentativas nesse período. Caso o tempo restante exceda o intervalo máximo de nova tentativa, um erro será lançado. Do contrário, o sistema aguarda o fim do ciclo antes de iniciar ou tentar novamente a chamada.

Ative a depuração de throttling

Para obter informações de cota de throttling sem precisar esperar que ele seja acionado, defina X-RateLimit-Mode como debug no cabeçalho da requisição.

request.putHeadParameter("X-RateLimit-Mode", "debug");

Assim, as informações de cota restante passam a constar no cabeçalho de resposta de cada chamada de API.