簡體   English   中英

如果 Lambda 跟不上,DynamoDB 流項目是否會過期?

[英]Will DynamoDB streams items expire if Lambda can't keep up?

我們配置了 DynamoDB 流來觸發 Lambda function。超過 1000 萬條唯一記錄將在 30 分鍾內插入到 DynamoDB 表中,Lambda 將在通過流觸發時處理這些記錄。

根據 DynamoDB Streams 文檔,流將在 24 小時后過期。

問題:

這是否意味着 Lambda function(多次並發執行)應該在 24 小時內完成所有 1000 萬條記錄的處理?

如果某些流事件在 24 小時后仍未處理,它們會丟失嗎?

只要您不限制 lambda,它就不會“跟不上”。

將發生的情況是 stream 將根據您的設置進行批處理 - 因此,如果您將 dynamo stream 中的設置同時設置為 5 個事件,它將捆綁五個事件並將它們推向 lambda。

即使這種情況每分鍾發生數百次,Lambda 也會(再次假設您沒有故意限制 lambda 執行)啟動額外的並發執行來處理負載。

這是標准的 AWS 理念。 幾乎所有無服務器資源(甚至有些不是,例如 EC2 和 Elastic Beanstalk)都旨在無縫且輕松地水平擴展以處理突發流量。

您的 Lambda 執行可能會在發送最后一個事件后的幾分鍾內完成。 “24 小時超時”反對等待 lambda 完成/重新激活(即:您可以設置 cloudwatch 事件以“保持”Dynamo Streams 直到一天中的特定時間,然后處理所有內容,例如等到下班時間讓所有流處理,然后在第二天的工作時間再次將其關閉)

舉一個類似的例子——我通過 SQS 將 10,000 次執行執行到 lambda。它在大約 15 分鍾內完成了 10,000 次執行。 Lambda並發就是為了應對這種突發流量。

但是,您的 Dynamo 讀/寫容量將受到重創,因此請確保您至少將其設置為動態且未配置。

更新

正如@Maurice 在評論中指出的那樣,使用 Dynamo 一次發送的並發批次有 Stream 限制。 計算表明,即使 lambda 執行時間較短,它也會遠遠不夠 - lambda 越長,您完成的可能性就越小。

這意味着,如果您不必盡可能快地處理所有這些,您應該划分輸入。

您可以在流程中的某處添加 AWS SQS 隊列。 最有可能的是,因為即使使用最大的批量大小和超快速的過程,在插入發電機之前,您也無法完成所有這些操作。

SQS 對其消息有最長 14 天的限制。 可能足以做你想做的事。 如果您可以控制傳入的消息,則可以將它們插入到帶有等待的 sqs 隊列中,以便一次處理較小數量的插入 - 這可以在一天內完成,或者稍微少一點。 這將是

lambda to collate your inserts into an SQS queue -> SQS with a wait/smaller batch size -> Lambda to insert smaller batches into dynamo -> Dynamo Stream -> Processing Lambda

另一種選擇是做類似的事情,但使用帶有等待時間和地圖的 State 機器。 State 機器有 1 年的運行時間限制,因此您有足夠的時間使用它。

最后的選擇是,不是將數據直接流式傳輸到 lambda,而是執行 lambda 以立即查詢發電機的較小部分以處理它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM