為什麼我的 Lambda 迭代器年齡指標會增加,以及如何減少它?

1 分的閱讀內容
0

我發現 AWS Lambda 函數的迭代器年齡指標有所增加 (或尖峰)。

簡短描述

當函數無法有效處理寫入到調用函數之串流的資料時,Lambda 函數的迭代器年齡就會增加。若要減少函數的迭代器年齡指標,您必須增加串流處理輸送量。

以下因素會影響函數的迭代器年齡指標:

查看本文以了解每個因素如何影響迭代器年齡。然後,根據您的使用案例重新設定函數或資料串流以減少函數的迭代器年齡。如需 Lambda 調用的詳細資訊,請參閱使用 AWS Lambda 函數指標

**注意:**對於 Amazon DynamoDB streams,請參閱為什麼我的 Amazon DynamoDB Streams 的 Lambda 迭代器年齡指標會增加?

解決方法

減少函數的執行期持續時間

較高的執行期持續時間會增加函數的迭代器年齡。減少持續時間會增加函數的輸送量,從而減少函數的迭代器年齡。

若要減少函數的執行期持續時間,請執行下列其中一項或兩項操作:

1.    增加分配給函數的內存量。Lambda 按照所述存儲器成比例分配 CPU 功率。

2.    最佳化您的函數代碼,減少處理記錄所需的時間。

注意: 若要取得 Lambda 持續時間和效能的詳細資訊,請參閱使用 AWS Lambda 和 AWS X-Ray

增加串流的批次大小

如果函數的執行期持續時間不取決於事件中的記錄數,則增加函數的批次大小會減少迭代器年齡。

若要增加函數的批次大小,請遵循將串流設定為事件來源中的指示進行

**注意:**如果您的函數的持續時間取決於事件中的記錄數,則增加函數的批次大小不會減少迭代器年齡。如需詳細資訊,請參閱使用串流

確保您的函數妥善處理調用錯誤

調用錯誤可能會導致 Lambda 函數花費更長的時間來處理事件,或處理相同的事件多次。因為事件記錄會依序讀取,所以如果記錄批次每次重試時都會造成錯誤,函數就無法進入稍後的記錄。在這種情況下,迭代器年齡會隨著這些記錄的年齡線性增加。

如果您的函數傳回錯誤,Lambda 會持續重試該批次。批次重試會繼續進行,直到處理成功、達到重試次數上限或資料從串流到期為止。

請確定您的函數能妥善處理寫入串流的記錄。在開發函數時,記錄和檢測代碼可協助您診斷錯誤。

如需詳細資訊,請參閱下列內容:

管理您的限流發生

因為事件記錄依序讀取,所以如果當前的調用被限流,函數無法進入下一個記錄。在這種情況下,當 Lambda 重試限流的調用時,迭代器的年齡將增加。

若要管理 Lambda 函數的限流,您可以要求並行提高,或是檢閱函數中的效能問題。

在串流中平均分配記錄

每個資料記錄中的分區索引鍵會決定資料流中要寫入記錄的碎片。如果串流流量增加包含相同分區索引鍵的記錄,會導致碎片收到不成比例的記錄數量。這會導致熱碎片

Kinesis 增強型碎片層級指標可讓您驗證每個碎片的擷取速率,並對熱碎片進行疑難排解。

如需詳細資訊,請參閱最終的謎底:擴展 Kinesis 資料串流

增加直播的碎片數

流中的碎片數量較少會增加函數的迭代器時間。增加串流中的碎片數量會增加串流使用並行 Lambda 函數的數量,進而減少函數的迭代器時間。

如要增加串流的碎片計數,請依照重新分片串流中的指示操作

**注意:**碎片拆分對函數的迭代器時代沒有立即影響。現有記錄會保留在寫入它們的碎片中。這些碎片必須在碎片迭代器減少之前趕上積壓。如需詳細資訊,請參閱使用串流

透過測試不同的平行化因子設定並使用增強型扇出,提高串流處理輸送量

測試平行化因子設定

您可以設定函數的平行化因子,以增加串流每個碎片的並行 Lambda 調用數目,藉此改善串流處理。這是透過指定 Lambda 從每個碎片輪詢的並行批次數來完成。這是在事件來源組態上設定的

如果平行化因子設定為 10,則最多可以有 50 個並行 Lambda 調用來處理五個 Kinesis 資料碎片。

例如,並行執行 = 每個碎片的碎片數 x 並行批次 (平行化因子)。

如需詳細資訊,請參閱將 AWS Lambda 與 Amazon Kinesis 搭配使用,以適用於 Kinesis 和 Amazon DynamoDB 事件來源的新 AWS Lambda 擴展控制

**注意:**增加每個碎片的並行批次數時,Lambda 會在分區索引鍵層級驗證順序處理

使用增強型扇出

您可以建立具有增強型扇出功能的資料串流取用者,藉此減少延遲並增加讀取輸送量。串流取用者會取得每個碎片的專用連線,這些碎片不會影響同時從串流讀取的其他應用程式。

如需詳細資訊,請參閱開發具有專用輸送量的自訂取用者 (增強型扇出)將 AWS Lambda 與 Amazon Kinesis 搭配使用

**注意:**如果您有許多應用程式讀取相同的資料,或者您要重新處理具有大量記錄的串流,最佳實務是使用增強型扇出功能。

相關資訊

使用 Lambda 函數的最佳實務

Lambda 事件來源映射

AWS Lambda 函數擴展

重新分片、縮放和平行處理

設定您的資料串流和功能

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