事件驅動應用程式
在 AWS 上開發應用程式
Ricardo Sueiras
Principal Technologist
什麼是事件?
- 訊息是元件間傳遞的工作單位。
- 事件是對已發生事情的記錄。
- 服務以發布事件的方式溝通。
- 其他服務各自對事件做出反應。
- 解耦可降低相依並提升擴充性。
事件生產者
- 生產者在動作發生時建立並發布事件。
- AWS 服務與自訂應用程式都能產生事件。
- 上傳檔案到 Amazon S3 是一個例子。
- 之後 Amazon S3 會發出物件已建立事件。
事件消費者
- 消費者以非同步方式接收並處理事件。
- 事件來源有不同的傳遞模型。
- 推送式:事件即時送達。
- 輪詢式:消費者輪詢時自行取回事件。
事件來源對應(Event source mapping)
- AWS Lambda 是常見的事件消費者。
- 它會自動輪詢來源並擷取成批紀錄。
調校 Lambda 事件來源對應
- 調校事件來源對應以提升輸送量。
- 調整批次大小以控制每次呼叫的紀錄數。
- 為失敗紀錄設定重試控制。
- 在支援的來源上使用部分批次回應。
ReportBatchItemFailures 可避免重處理成功的紀錄。
Amazon EventBridge
- EventBridge 在服務與應用程式間路由事件。
- 它支援動態路由而不需緊密耦合服務。
- 應用程式將事件發布到 EventBridge。
- 路由規則決定哪些目標接收各事件。
EventBridge 功能
- EventBridge 提供多種路由功能。
- 規則可將一個事件擴散到多個目標。
- 排程規則可取代 cron 伺服器。
- 排程支援
rate()、at() 與 cron() 表達式。
- Pipes 提供點對點整合。
- Pipes 也支援篩選與轉換。
事件匯流排(Event bus)
- 不同事件匯流排可最佳化事件路由。
- 預設匯流排接收來自 AWS 服務的事件。
- 自訂匯流排承載應用程式特定事件。
- 合作夥伴匯流排接收第三方供應商的事件。
- 規則位於每個匯流排與其目標之間。
架構(Schema)探索
- 生產者與消費者常會各自演進。
- 了解事件結構至關重要。
- 架構探索可擷取傳入事件的結構。
- 用它檢視事件載荷。
- 用它驗證整合。
- 用它為支援語言產生繫結。
架構登錄庫(Schema registry)
- 架構登錄庫會儲存你的事件架構。
- 它協助開發者理解結構並產生繫結。
事件篩選
- 篩選可減少不必要的處理。
- 以 JSON 事件樣式定義比對條件。
- 樣式只會比對你要的特定事件。
- 下游系統因此只處理相關事件。
事件排序
- 事件順序不一定有保證。
- 有些服務可能會亂序處理事件。
- 使用排序控制來明確強制序列。
事件封存與重播
- EventBridge 可封存並於之後重播事件。
- 重播事件可從故障中復原。
- 重播事件可測試新的消費者。
- 重播事件可重建下游系統。
錯誤處理
- 事件驅動應用必須安全處理錯誤。
- 失敗情況包含重複事件、
- 盡可能將消費者設計為具冪等性。
DLQ 與目的地(Destinations)
- 使用 DLQ 隔離反覆失敗的事件。
- 在 EventBridge 中,DLQ 是針對每個規則目標設定,不是針對函式。
- Lambda Destinations 進一步擴充此路由。
- Destinations 可路由成功與失敗結果。
事件測試與驗證
- 測試事件驅動應用可驗證路由設定。
- 也可驗證事件篩選。
- 也可驗證事件重試。
- 並確認分散式系統的整體處理。
- 使用 AWS SAM 產生範例測試事件。
- 範例事件會複製精確的 JSON 輸出。
測試重點
- SAM 讓你在部署前於本機測試。
- 驗證事件樣式比對。
- 驗證重試行為。
- 驗證節流情境。
- 驗證重複事件傳遞。
- 驗證具冪等性的消費者行為。
Preparing Video For Download...