选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

重试行为 - AWS SDKs 和工具

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

重试行为

注意

如需了解设置页面布局或解释后面的 Support b y AWS SDKs 和 tools 表格的帮助,请参阅了解本指南的设置页面

重试行为包括有关如何尝试从向的 SDKs 请求导致的失败中恢复的设置。 AWS 服务

使用以下方法配置此功能:

retry_mode-共享 AWS config文件设置
AWS_RETRY_MODE - 环境变量
aws.retryMode-JVM 系统属性:仅限 Java/Kotlin

指定 SDK 或开发人员工具如何尝试重试。

默认值:此值特定于您的 SDK。请查看您的特定 SDK 指南或 SDK 的代码库以了解其默认值retry_mode

有效值:

  • standard—(推荐)推荐的一组重试规则。 AWS SDKs此模式包括一组标准的重试错误,并自动调整重试次数以最大限度地提高可用性和稳定性。此模式可在多租户应用程序中安全使用。除非max_attempts明确配置,否则此模式下默认的最大尝试次数为三次。

  • adaptive— 一种重试模式,仅适用于特殊用例,包括标准模式的功能以及自动客户端速率限制。除非您注意隔离应用程序租户,否则不建议将此重试模式用于多租户应用程序。请参阅在standard和adaptive重试模式之间进行选择了解更多信息。此模式是实验性的,将来可能会改变行为。

  • legacy—(不推荐)特定于您的 SDK(请查看您的特定 SDK 指南或 SDK 的代码库)。

max_attempts-共享 AWS config文件设置
AWS_MAX_ATTEMPTS - 环境变量
aws.maxAttempts-JVM 系统属性:仅限 Java/Kotlin

指定对请求进行的最大尝试次数。

默认值:如果未指定此值,则其默认值取决于retry_mode设置的值:

  • 如果retry_modelegacy – 使用特定于 SDK 的默认值(请查看您的特定 SDK 指南或 SDK 的代码库以了解max_attempts默认值)。

  • 如果retry_modestandard – 尝试三次。

  • 如果retry_modeadaptive – 尝试三次。

有效值:大于 0 的数字。

standardadaptive重试模式之间进行选择

除非您确定自己的用法更适合,否则我们建议您使用standard重试模式。adaptive

注意

adaptive模式假设您正在根据后端服务可能限制请求的范围来池化客户端。如果你不这样做,那么如果你对两个资源使用同一个客户端,那么一个资源中的限制可能会延迟对不相关资源的请求。

Standard 自适应
应用程序用例:全部。 应用程序用例:
  1. 对延迟不敏感。

  2. 客户机只能访问单个资源,或者,您正在提供逻辑,以便按正在访问的服务资源单独池化客户端。

支持断路以防止 SDK 在中断期间重试。 支持断路以防止 SDK 在中断期间重试。
在出现故障时使用抖动指数退避。 使用动态退避持续时间来尝试最大限度地减少失败请求的数量,以换取延迟增加的可能性。
永远不要延迟第一次请求尝试,只会延迟重试。 可以限制或延迟初始请求尝试。

如果您选择使用adaptive模式,则您的应用程序必须围绕可能受到限制的每种资源构建客户端。在这种情况下,资源要经过精细调整,而不仅仅是考虑每种资源。 AWS 服务 AWS 服务 可以有其他维度来限制请求。让我们以亚马逊 DynamoDB 服务为例。DynamoDB AWS 区域 使用加上正在访问的表来限制请求。这意味着您的代码正在访问的一个表可能比其他表更受限制。如果您的代码使用同一个客户端访问所有表,并且对其中一个表的请求受到限制,则自适应重试模式将降低所有表的请求速率。您的代码应设计为每 Region-and-table对只有一个客户端。如果您在使用adaptive模式时遇到意外延迟,请参阅所用服务的特定 AWS 文档指南。

重试模式实现细节

使用 AWS SDKs 令牌桶来决定是否应重试请求以及(在adaptive重试模式下)应以多快的速度发送请求。SDK 使用两个令牌存储桶:一个重试令牌存储桶和一个请求速率令牌存储桶。

  • 重试令牌存储桶用于确定 SDK 是否应暂时禁用重试,以便在中断期间保护上游和下游服务。在尝试重试之前会从存储桶中获取令牌,请求成功后将令牌返回到存储桶。如果尝试重试时存储桶为空,则 SDK 将不会重试该请求。

  • 请求速率令牌存储桶仅在adaptive重试模式下用于确定发送请求的速率。令牌是在发送请求之前从存储桶中获取的,并根据服务返回的限制响应,以动态确定的速率将令牌返回到存储桶。

以下是standardadaptive两种重试模式的高级伪代码:

MakeSDKRequest() { attempts = 0 loop { GetSendToken() response = SendHTTPRequest() RequestBookkeeping(response) if not Retryable(response) return response attempts += 1 if attempts >= MAX_ATTEMPTS: return response if not HasRetryQuota(response) return response delay = ExponentialBackoff(attempts) sleep(delay) } }

以下是关于伪代码中所用组件的更多详细信息:

GetSendToken:

此步骤仅在adaptive重试模式下使用。此步骤从请求费率令牌存储桶中获取令牌。如果代币不可用,它将等待令牌变为可用。您的 SDK 可能有配置选项可以让请求失败,而不必等待。存储桶中的令牌按照根据客户端收到的限制响应数量动态确定的速率进行充值。

SendHTTPRequest:

此步骤将请求发送到 AWS。大多数人 AWS SDKs 使用 HTTP 库,该库在发出 HTTP 请求时使用连接池来重用现有连接。通常,如果请求由于限制错误而失败,则会重复使用连接,但如果请求由于暂时性错误而失败,则不会重复使用连接。

RequestBookkeeping:

如果请求成功,则会将令牌添加到令牌存储桶中。仅在adaptive重试模式下,请求速率令牌存储桶的填充率会根据收到的响应类型进行更新。

Retryable:

此步骤根据以下内容确定是否可以重试响应:

  • HTTP 状态代码。

  • 从服务返回的错误代码。

  • 连接错误,定义为 SDK 收到的任何错误,其中未收到来自服务的 HTTP 响应。

瞬时错误(HTTP 状态代码 400、408、500、502、503 和 504)和节流错误(HTTP 状态代码 400、403、429、502、503 和 509)都可能被重试。SDK 重试行为是结合错误代码或服务中的其他数据确定的。

MAX_ATTEMPTS:

默认的最大尝试次数由设置retry_mode设置,除非被设置所max_attempts覆盖。

HasRetryQuota

此步骤从重试令牌存储桶中获取令牌。如果重试令牌存储桶为空,则不会重试请求。

ExponentialBackoff

对于可以重试的错误,使用截断的指数回退来计算重试延迟。 SDKs 使用带抖动的截断二进制指数回退。以下算法显示了如何为请求i的响应定义睡眠时间(以秒为单位):

seconds_to_sleep_i = min(b*r^i, MAX_BACKOFF)

在上述算法中,以下值适用:

b = random number within the range of: 0 <= b <= 1

r = 2

MAX_BACKOFF = 20 seconds对于大多数 SDKs。请参阅您的特定 SDK 指南或源代码进行确认。

Support AWS SDKs by 和工具

以下内容 SDKs 支持本主题中描述的功能和设置。所有部分例外情况均已注明。 适用于 Java 的 AWS SDK 和 AWS SDK for Kotlin 唯一支持任何 JVM 系统属性设置。

SDK 支持 备注或更多信息
AWS CLI v2
适用于 C++ 的 SDK
适用于 Go V2 (1.x) 的 SDK
适用于 Go 1.x(V1)的 SDK
适用于 Java 2.x 的 SDK
适用于 Java 1.x 的 SDK JVM 系统属性:使用com.amazonaws.sdk.maxAttempts代替aws.maxAttempts;使用com.amazonaws.sdk.retryMode代替。aws.retryMode
适用于 JavaScript 3.x 的软件开发工具包
适用于 JavaScript 2.x 的 SDK 支持最大重试次数、带抖动的指数回退以及用于重试回退的自定义方法选项。
适用于 Kotlin 的 SDK
适用于 .NET 3.x 的 SDK
适用于 PHP 3.x 的 SDK
适用于 Python (Boto3) 的 SDK
适用于 Ruby 3.x 的 SDK
适用于 Rust 的 SDK
适用于 Swift 的 SDK
用于 PowerShell

下一主题:

请求压缩

上一主题:

IMDS 客户端
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。