選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

重試行為 - AWS SDKs和工具

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

重試行為

注意

如需了解設定頁面配置或解譯 Support AWS SDKs和後續工具資料表的說明,請參閱 了解本指南的設定頁面

重試行為包括有關 SDKs 如何嘗試從對 提出的請求所造成的失敗中復原的設定 AWS 服務。

使用下列項目設定此功能:

retry_mode - 共用 AWS config檔案設定
AWS_RETRY_MODE - 環境變數
aws.retryMode - JVM 系統屬性:僅限 Java/Kotlin

指定 SDK 或開發人員工具嘗試重試的方式。

預設值:此值專屬於您的 SDK。檢查您的特定 SDK 指南或軟體開發套件的程式碼基礎,了解其預設 retry_mode

有效值

  • standard – (建議) 建議的一組跨 AWS SDKs重試規則。此模式包含一組標準錯誤,這些錯誤會重試,並自動調整重試次數,以最大化可用性和穩定性。此模式可在多租用戶應用程式中安全使用。除非max_attempts明確設定,否則使用此模式的預設嘗試次數上限為三次。

  • adaptive – 重試模式,僅適用於特殊的使用案例,其中包含標準模式的功能,以及自動用戶端速率限制。除非您小心隔離應用程式租用戶,否則不建議多租用戶應用程式使用此重試模式。如需更多資訊,請參閱選擇 standard和 adaptive 重試模式。此模式是實驗性的,未來可能會變更行為。

  • legacy – (不建議) 專屬於您的 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 模式假設您根據後端服務可能調節請求的範圍來集區用戶端。如果您不這樣做,如果您對兩個資源使用相同的用戶端,則一個資源中的調節可能會延遲不相關的資源請求。

標準 自適應
應用程式使用案例:全部。 應用程式使用案例:
  1. 對延遲不敏感。

  2. 用戶端只會存取單一資源,或者,您提供邏輯,以透過正在存取的服務資源來個別集區您的用戶端。

支援中斷電路,以防止 SDK 在中斷期間重試。 支援中斷電路,以防止 SDK 在中斷期間重試。
在故障時使用抖動指數退避。 使用動態退避持續時間,嘗試將失敗請求的數量降至最低,以換取延遲增加的可能性。
永遠不要延遲第一次請求嘗試,只延遲重試。 可以調節或延遲初始請求嘗試。

如果您選擇使用 adaptive 模式,您的應用程式必須建構以每個可能節流的資源為中心的用戶端。在這種情況下,資源的調校會比只考慮每個資源更精細 AWS 服務。 AWS 服務 可以有額外的維度,用來調節請求。讓我們使用 Amazon DynamoDB 服務做為範例。DynamoDB 使用 AWS 區域 加上要存取的資料表來調節請求。這表示您的程式碼存取的一個資料表可能比其他資料表受到更多限制。如果您的程式碼使用相同的用戶端來存取所有資料表,且對其中一個資料表的請求受到調節,則適應性重試模式將降低所有資料表的請求率。您的程式碼應設計成每個Region-and-table對有一個用戶端。如果您在使用 adaptive 模式時遇到意外延遲,請參閱您正在使用服務的特定 AWS 文件指南。

重試模式實作詳細資訊

AWS SDKs 會使用字符儲存貯體來決定是否應重試請求,以及 (在adaptive重試模式下) 應傳送請求的速度。軟體開發套件會使用兩個字符儲存貯體:重試字符儲存貯體和請求速率字符儲存貯體。

  • 重試字符儲存貯體用於判斷 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 狀態碼 。

  • 從 服務傳回的錯誤碼。

  • 連線錯誤,定義為軟體開發套件收到的任何錯誤,其中未收到服務的 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 指南或原始程式碼進行確認。

支援 AWS SDKs和工具

下列 SDKs 支援本主題中所述的功能和設定。會記下任何部分例外狀況。 適用於 Java 的 AWS SDK 和 適用於 Kotlin 的 AWS SDK 僅支援任何 JVM 系統屬性設定。

SDK 支援 備註或更多資訊
AWS CLI v2
適用於 C++ 的 SDK
SDK for Go V2 (1.x)
適用於 Go 的 SDK 1.x (V1)
適用於 Java 的 SDK 2.x
適用於 Java 的 SDK 1.x JVM 系統屬性:使用 com.amazonaws.sdk.maxAttempts而非 aws.maxAttempts;使用 com.amazonaws.sdk.retryMode而非 aws.retryMode
適用於 JavaScript 3.x 的 SDK
適用於 JavaScript 2.x 的 SDK 支援重試次數上限、具有抖動的指數退避,以及用於重試退避之自訂方法的選項。
適用於 Kotlin 的 SDK
適用於 .NET 3.x 的 SDK
適用於 PHP 3.x 的 SDK
適用於 Python 的 SDK (Boto3)
適用於 Ruby 的 SDK 3.x
適用於 Rust 的 SDK
適用於 Swift 的 SDK
PowerShell 的工具

下一個主題:

請求壓縮

上一個主題:

IMDS 用戶端
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。