如何疑難排解 API Gateway 中邊緣優化 API 端點的延遲問題?

2 分的閱讀內容
0

用戶端傳送請求至 Amazon API Gateway 中的邊緣優化 API 時,我注意到延遲變高。如何找到延遲來源,進行疑難排解?

簡短說明

若要尋找邊緣優化的 API 端點的延遲來源,請判斷連線路徑下列每個部分所需的時間長短:

**重要事項:**這些連線路徑步驟僅適用於邊緣優化的 API 端點,而不適用於區域 API 端點。邊緣優化的 API 透過 Amazon CloudFront 發佈版本存取。區域 API 端點不是透過 CloudFront 存取。

  1. 開始連線至 DNS 名稱解析
  2. 開始連線至傳輸控制通訊協定 (TCP) 交握,以連線至 CloudFront
  3. 開始連線至安全通訊端層 (SSL) 交握,以連線至 CloudFront
  4. 開始連線至傳送用戶端 HTTP 請求至 CloudFront
  5. 開始連線至從 CloudFront 傳輸的第一個位元組
  6. 請求和回應 API 的總時間
  7. API Gateway 處理請求並回應 CloudFront 邊緣節點的時間
  8. 整合端點回應 API Gateway 的 HTTP 請求的時間
  9. API Gateway 回應 CloudFront 邊緣節點和 CloudFront 回應用戶端的時間

在連線路徑中花費時間最長的部分即是延遲來源。

注意: 您可以使用 AWS X-Ray 在使用者請求行經 Amazon API Gateway REST API 前往基礎服務時,追蹤和分析這些請求。在提供 X-Ray 的 AWS 區域中,API Gateway 支援該區域內所有 API Gateway REST API 端點類型的 X-Ray 追蹤。若要查看提供 X-Ray 的所有區域,請參閱 AWS 區域表格

解決方法

執行 curl_for_latency Bash 指令碼

若要判斷步驟 1-6 在您 API 連線路徑程序中的持續時間,請在 GitHub 上執行 curl_for_latency Bash 指令碼。

重要事項:請確認您有取代掉 URLHTTP 方法參數值,以符合您 API 的資訊。

指令碼會傳回您的 API 完成下列連線路徑步驟所需的一段時間:

  1. 開始連線至 DNS 名稱解析 (「time_namelookup」)
  2. 開始連線至 TCP 交握,以連線至 CloudFront (「time_connect」)
  3. 開始連線至 SSL 交握,以連線至 CloudFront (「time_appconnect」)
  4. 開始連線至傳送用戶端 HTTP 請求至 CloudFront (「time_pretransfer」)
  5. 開始連線至從 CloudFront 傳輸的第一個位元組 (「time_starttransfer」)
  6. 請求和回應 API 的總時間 (「time_total」)

識別造成延遲的事件後,請參閱我如何疑難排解並減少 CloudFront 逐漸升高的延遲?

確認 API Gateway 處理請求並回應 CloudFront 邊緣節點需要耗費多少時間

CloudWatch 主控台中檢視您 API 的延遲指標。然後,進行1 分鐘間隔最大值的延遲指標圖設定,以查看一段一分鐘時間內最長的處理時間。

如需說明,請參閱檢視 CloudWatch 主控台中的 API Gateway 指標

確認整合端點回應 API Gateway 的 HTTP 請求需要耗費多少時間

CloudWatch 主控台中檢視 IntegrationLatency 指標。然後,進行1 分鐘間隔最大值的 IntegrationLatency 圖設定,以查看一段一分鐘時間內最長的處理時間。

-或-

如果您的 API 已啟用 CloudWatch 日誌記錄,請檢閱類似下列內容的明細日誌

Received response. Integration latency: 325 ms

您也可以新增包含存取日誌記錄 (用於額外延遲疑難排解) 的 $context 變數

如須說明,請參閱如何開啟 CloudWatch 日誌來對 API Gateway REST API 或 WebSocket API 進行疑難排解?

與 Lambda 整合的 API Gateway 請求

如果您將 AWS Lambda 與 API Gateway 搭配使用,而且看到高 IntegrationLatency 指標,請檢閱 Lambda 函數的 CloudWatch 日誌。如果與 Lambda 函數整合的 API 端點傳送回應給用戶端所需的時間太長,則必須解決高延遲問題。Lambda 函數的冷啟動不會記錄在函數的持續時間指標中,因此 API 的整合延遲可能會超過函數的持續時間。若要檢視具有冷啟動的函數的持續時間,請使用 AWS X-Ray

如需詳細資訊,請參閱如何疑難排解與 Lambda 整合的 API Gateway 請求中的高延遲?

確認 API Gateway 回應 CloudFront 邊緣節點和 CloudFront 回應用戶端需要耗費的時間

取 API 的請求與回應的總時間 (「time_total」),然後減去以下時間:

  • 開始連線至傳送用戶端 HTTP 請求至 CloudFront (「time_pretransfer」)
  • API Gateway 處理請求並回應 CloudFront 邊緣節點的時間 (您 API 的延遲指標)

最終可得到 API Gateway 回應 CloudFront 邊緣節點和 CloudFront 回應用戶端需要耗費的時間。


相關資訊

使用 HTTP API 的指標

Amazon API Gateway 維度和指標

使用 CloudWatch 指標監控 WebSocket API 執行

如何使用 Amazon API Gateway 日誌進行疑難排解?

AWS 官方
AWS 官方已更新 1 年前