如何疑難排解與 Lambda 整合的 API Gateway 請求中的高延遲?

2 分的閱讀內容
0

當我對與 AWS Lambda 函數整合的 Amazon API Gateway API 提出請求時,回應時間很慢。我想確定高延遲的原因。

解決方法

如果與 Lambda 函數整合的 API 端點傳送回應給用戶端所需的時間太長,則必須解決高延遲問題。檢閱 API 閘道的測量結果,以識別造成高延遲的請求/回應流程區段。在確定高延遲的原因之後,您可以針對減少延遲進行作為。

篩選 CloudWatch 指標以檢閱 API 上的延遲指標

若要識別造成高延遲的請求/回應流程區段,請先執行下列步驟:

  1. 向 API 發送請求後,觀察用戶端的延遲。
  2. 注意到整體延遲後,開啟 Amazon CloudWatch 主控台。在左側導覽窗格中,選擇 Metrics (指標)、All metrics (所有指標)。在指標搜尋方塊中,輸入 APIGateway。從搜尋結果中,選擇 API Gateway (API 閘道)、ApiId
  3. 在 API 清單中,使用 API ID 或 API 名稱篩選指定的 API。篩選後,勾選 IntegrationLatency (整合延遲) 和 Latency (延遲) 核取方塊。
    注意: API ID 和 API 名稱可從 API 閘道主控台取得。
  4. 開啟 Graphed metrics (圖表化指標) 索引標籤。對於 Statistic (統計資料),選擇 Maximum (最大值)。對於 Period (期間),選擇 1 minute (1 分鐘)。在圖表上方,選取 Custom (自訂) 時間週期。選擇用戶端經歷高延遲的時間範圍。
  5. 同時檢閱 IntegrationLatency 和 Latency 指標。請注意這些指標擁有高值時的值和時間戳記。這些值可以解釋導致延遲高的原因。

比較指標以識別高延遲的原因

繼續檢閱與請求/回應流程相關的指標,以尋找高延遲的原因:

  1. 比較 API 閘道 Latency (延遲) 指標與用戶端觀察到的整體延遲值。
    例如,API 具有 Latency (延遲) 指標,其 Maximum (最大值) 大致等於用戶端的 Max Latency (最大延遲) 值。這些值表明請求/回應流程中的最大延遲是 API 閘道處理請求所需的時間。API 閘道處理時間包括傳送請求給 Lambda、等待 Lambda 回應,以及傳送回應給用戶端所需的時間。
  2. 比較 IntegrationLatency (整合延遲) 指標與 API 的 Latency (延遲) 指標。
    例如,IntegrationLatency (整合延遲) 指標大致等於 Latency (延遲) 指標。這些值表示 API 的延遲主要是由傳送到 Lambda 的後端請求所造成,這些請求需要更長時間來回應。IntegrationLatenc (整合延遲) 指標包括 API 閘道傳送請求與 API 閘道接收後端回應之間的時間
  3. IntegrationLatency (整合延遲) 指標與 API 的 Latency (延遲)指標相比較低時,則後端回應時間很低。在這種情況下,處理 API 請求或回應需要更長時間。
    例如,在 API 或 API Gateway Lambda authorizer 中設定的映射範本都可能會造成延遲。
  4. 當 API 的 Latency (延遲) 指標比用戶端觀察到的延遲要低得多時,路由可是導致延遲的原因。檢閱用戶端與 API 閘道之間的路由,確認是否有任何中間端點增加延遲。
    例如,私人 VPN 連線或代理可能會造成延遲。

檢視 Lambda 指標以識別高 IntegrationLatency \的原因

最後,專注於與請求/回應流程相關的 Lambda 指標,以找到高 IntegrationLatency 的原因:

  1. 檢查 Lambda 函數 Duration (持續時間) 指標,確認 Lambda 函數的執行時間是否更長。如果 Lambda 函數的執行時間增加,請檢閱 CloudWatch 日誌以找到造成高延遲的程式碼區段。根據預設,Lambda 函數會在 CloudWatch 日誌中記錄 START、END 和 REPORT 陳述式。在 Lambda 函數代碼的每個邏輯區段增加自訂日誌陳述式,以獲取詳細的 CloudWatch 日誌。
  2. 如果在用戶端高延遲期間,Duration (持續時間) 指標沒有變更,請確定初始化時間是否增加。Lambda 函數中的初始化時間是設定執行環境來處理請求所需的時間。來自 API 閘道的請求可能需要新的環境來處理。這是透過 Lambda 所設置。通常,Lambda 函數處理常式之外的程式碼會在初始化時間執行。需較長完成時間的程式碼可能會造成對用戶端的整體回應時間延遲。
    注意: 初始化時間稱為 INIT 或冷啟動。
  3. 藉由驗證 Lambda 函數日誌中的報告陳述式,確認初始化時間的 Duration (持續時間) 是否增加。部分請求的初始化時間較高,可能會造成 API 閘道的 IntegrationLatency (整合延遲) 指標增加。

相關資訊

使用 HTTP API 的指標

Amazon API Gateway 維度和指標

使用 CloudWatch 指標來監控 WebSocket API 執行

在 CloudWatch 主控台上檢視指標

Lambda 執行時期環境生命週期

AWS 官方
AWS 官方已更新 2 個月前