處理事件生命週期:重試、DLQ 與目的地

使用 AWS Lambda 的無伺服器應用程式

Claudio Canales

Senior DevOps Engineer

事件生命週期一覽

  • Lambda 觸發你的處理器。
  • 處理器要嘛成功,要嘛失敗。
  • 若失敗,重試與路由決定下一步。

事件生命週期流程

使用 AWS Lambda 的無伺服器應用程式

失敗出現的兩種方式

同步

  • 呼叫端等待並收到錯誤回應。

非同步

  • 先回覆呼叫端已受理。
  • Lambda 在背景重試。
  • 失敗處理依調用模式而定。

同步 vs 非同步失敗路徑

使用 AWS Lambda 的無伺服器應用程式

重試是常態

  • 重試常是功能,不是錯誤。
  • 短暫性失敗可能下次就成功。
  • 重試會造成重複處理;你的處理器必須考量。

重試重撥類比

使用 AWS Lambda 的無伺服器應用程式

隨時間的重試

  • 重試能從暫時問題中復原。
  • 但同一事件可能執行多次。
  • 冪等性與清楚的錯誤處理是關鍵。

重試嘗試時間軸

使用 AWS Lambda 的無伺服器應用程式

何時重試很危險

  • 非冪等的工作遇到重試風險高。
  • 例如:信用卡扣款、寄送電子郵件。
  • 使用冪等鍵與安全更新,避免重複造成損害。

冪等性目標

使用 AWS Lambda 的無伺服器應用程式

DLQ(死信佇列)

  • 重試後仍失敗事件的安全暫放區。
  • 常用 SQS 佇列,AWS 託管的訊息佇列。
  • 檢視酬載,修正問題,再重送處理。

DLQ 失物招領類比

使用 AWS Lambda 的無伺服器應用程式

DLQ 與目的地對照

DLQ 失物招領類比

  • 蒐集重試後仍失敗的事件。
  • 用於調查分析。

目的地路由圖

  • 依成功或失敗路由結果。
  • 建立清楚的成功與失敗路徑。
使用 AWS Lambda 的無伺服器應用程式

目的地:成功與失敗路由

  • 成功時,將結果送到 onSuccess
  • 失敗時,將細節送到 onFailure
  • 使下一步明確。

目的地路由圖

使用 AWS Lambda 的無伺服器應用程式

調整重試原則

  • 調整 Lambda 重試次數。
  • 限制事件年齡以避免處理陳舊資料。
  • 重試越多可靠性越高,但重複與延遲也增加。

重試原則控制

使用 AWS Lambda 的無伺服器應用程式

最大事件年齡:到期日

  • 最大事件年齡是一種到期策略。
  • 事件過舊時,處理可能沒有意義。
  • 取捨:較少延遲事件,更及時行為。

事件年齡到期類比

使用 AWS Lambda 的無伺服器應用程式

可觀測性:該看哪裡

  • 記錄可回答發生了什麼。
  • 監控指標可回答發生頻率。
  • 警示能迅速偵測尖峰。

記錄 vs 指標

使用 AWS Lambda 的無伺服器應用程式

如何處理失敗事件

  • 檢查酬載與錯誤。
  • 修正根因。
  • 重送事件,並監控錯誤與吞吐量。

失敗事件復原循環

使用 AWS Lambda 的無伺服器應用程式

重點整理

  • 可靠性來自重試、路由與可觀測性。
  • 同步錯誤會回到呼叫端。
  • 非同步錯誤需重試加 DLQ 或目的地。
  • 如此可讓失敗可見。

可靠性公式圖

使用 AWS Lambda 的無伺服器應用程式

一起來練習吧!

使用 AWS Lambda 的無伺服器應用程式

Preparing Video For Download...