如何對 Amazon DynamoDB 中的間歇性逾時錯誤進行疑難排解?

上次更新日期:2022 年 8 月 19 日

當我使用 AWS SDK 與 Amazon DynamoDB 互動時,我發現了間歇性連線逾時或請求逾時錯誤,如下所示:

  • Unable to execute HTTP request: Connect to dynamodb.xx-xxxx-x.amazonaws.com:443 [dynamodb.us-east-1.amazonaws.com/x.xxx.xxx.x] failed: connect timed out
  • com.amazonaws.SdkClientException: Unable to execute HTTP request. (無法執行 HTTP 請求:連接至 Connect to dynamodb.xx-xxxx-x.amazonaws.com:443 [dynamodb.us-east-1.amazonaws.com/x.xxx.xxx.x] 失敗:連接 com.amazonaws.SdkClientException 逾時:無法執行 HTTP 請求。)在請求逾時組態之前未完成請求

解決方案

當您對 DynamoDB 進行 API 呼叫時,會發生下列情況:

  1. 您的應用程式會使用您的本機 DNS 伺服器來解析 DynamoDB 端點。
  2. 獲取 DynamoDB 端點的 IP 地址後,應用程式會連線至端點並進行 API 呼叫。
  3. 端點會將此呼叫路由至其中一個後端節點。

在此過程中,API 呼叫可能會間歇性地導致連線逾時或請求逾時錯誤。在大多數情況下,由於網路問題或用戶端的 SDK 組態不正確,在 API 呼叫到達 DynamoDB 之前發生了用戶端錯誤,進而導致了逾時錯誤。

若要對這些錯誤進行疑難排解,請執行以下操作:

  • 根據您的使用案例和應用程式 SLA,調整 SDK HTTP 用戶端參數。除了調整 connectionTimeoutrequestTimeoutmaxRetries 之外,您也可以調整用 clientExecutionTimeoutsocketTimeoutClientExecutionTimeout 參數表示,執行端對端操作和接收所需回應 (包括可能發生的任何重試) 所花費的允許的總時間上限。請確認您將此值設定為大於個別 requestTimeout 值。socketTimeout 參數表示,HTTP 用戶端等待接收來自已建立的 TCP 連線回應的時間上限。如需詳細資訊,請參閱為延遲感知型 Amazon DynamoDB 應用程式調整 AWS Java SDK HTTP 請求設定
  • 請確認傳送固定流量或重複使用連線。當您不發出請求時,請考慮讓用戶端將虛擬流量傳送至 DynamoDB 表。或者,您可以重複使用用戶端連線或使用連線共用。這些技術可以保溫內部快取,進而有助於減少延遲並避免用戶端出現逾時錯誤。例如,請參閱在 Node.js 中利用 Keep-Alive 重複使用連線
  • 檢視您的 Amazon Virtual Private Cloud (Amazon VPC) 流量日誌,以檢查您收到錯誤的時間範圍內是否有傳入 DynamoDB 的流量。您還可以使用 AWS X-Ray 來監控應用程式的延遲。

此文章是否有幫助?


您是否需要帳單或技術支援?