處理事件生命週期:重試、DLQ 與目的地
使用 AWS Lambda 的無伺服器應用程式
Claudio Canales
Senior DevOps Engineer
事件生命週期一覽
- Lambda 觸發你的處理器。
- 處理器要嘛成功,要嘛失敗。
- 若失敗,重試與路由決定下一步。
失敗出現的兩種方式
同步
非同步
- 先回覆呼叫端已受理。
- Lambda 在背景重試。
- 失敗處理依調用模式而定。
重試是常態
- 重試常是功能,不是錯誤。
- 短暫性失敗可能下次就成功。
- 重試會造成重複處理;你的處理器必須考量。
隨時間的重試
- 重試能從暫時問題中復原。
- 但同一事件可能執行多次。
- 冪等性與清楚的錯誤處理是關鍵。
何時重試很危險
- 非冪等的工作遇到重試風險高。
- 例如:信用卡扣款、寄送電子郵件。
- 使用冪等鍵與安全更新,避免重複造成損害。
DLQ(死信佇列)
- 重試後仍失敗事件的安全暫放區。
- 常用 SQS 佇列,AWS 託管的訊息佇列。
- 檢視酬載,修正問題,再重送處理。
DLQ 與目的地對照

- 依成功或失敗路由結果。
- 建立清楚的成功與失敗路徑。
目的地:成功與失敗路由
- 成功時,將結果送到
onSuccess。
- 失敗時,將細節送到
onFailure。
- 使下一步明確。
調整重試原則
- 調整 Lambda 重試次數。
- 限制事件年齡以避免處理陳舊資料。
- 重試越多可靠性越高,但重複與延遲也增加。
最大事件年齡:到期日
- 最大事件年齡是一種到期策略。
- 事件過舊時,處理可能沒有意義。
- 取捨:較少延遲事件,更及時行為。
可觀測性:該看哪裡
- 記錄可回答發生了什麼。
- 監控指標可回答發生頻率。
- 警示能迅速偵測尖峰。
如何處理失敗事件
- 檢查酬載與錯誤。
- 修正根因。
- 重送事件,並監控錯誤與吞吐量。
重點整理
- 可靠性來自重試、路由與可觀測性。
- 同步錯誤會回到呼叫端。
- 非同步錯誤需重試加 DLQ 或目的地。
- 如此可讓失敗可見。
一起來練習吧!
使用 AWS Lambda 的無伺服器應用程式
Preparing Video For Download...