事件驅動應用程式

在 AWS 上開發應用程式

Ricardo Sueiras

Principal Technologist

什麼是事件?

 

事件與訊息比較

  • 訊息是元件間傳遞的工作單位。
  • 事件是對已發生事情的記錄。
  • 服務以發布事件的方式溝通。
  • 其他服務各自對事件做出反應。
  • 解耦可降低相依並提升擴充性。
在 AWS 上開發應用程式

事件生產者

 

事件生產者

  • 生產者在動作發生時建立並發布事件。
  • AWS 服務與自訂應用程式都能產生事件。
  • 上傳檔案到 Amazon S3 是一個例子。
  • 之後 Amazon S3 會發出物件已建立事件。
在 AWS 上開發應用程式

事件消費者

 

事件消費者

  • 消費者以非同步方式接收並處理事件。
  • 事件來源有不同的傳遞模型。
  • 推送式:事件即時送達。
  • 輪詢式:消費者輪詢時自行取回事件。
在 AWS 上開發應用程式

事件來源對應(Event source mapping)

  • AWS Lambda 是常見的事件消費者。
  • 它會自動輪詢來源並擷取成批紀錄。

 

事件來源對應

在 AWS 上開發應用程式

調校 Lambda 事件來源對應

  • 調校事件來源對應以提升輸送量。
  • 調整批次大小以控制每次呼叫的紀錄數。
  • 為失敗紀錄設定重試控制。
  • 在支援的來源上使用部分批次回應。
  • ReportBatchItemFailures 可避免重處理成功的紀錄。

 

事件來源對應

在 AWS 上開發應用程式

Amazon EventBridge

  • EventBridge 在服務與應用程式間路由事件。
  • 它支援動態路由而不需緊密耦合服務。
  • 應用程式將事件發布到 EventBridge。
  • 路由規則決定哪些目標接收各事件。

 

EventBridge

在 AWS 上開發應用程式

EventBridge 功能

 

功能

  • EventBridge 提供多種路由功能。
  • 規則可將一個事件擴散到多個目標。
  • 排程規則可取代 cron 伺服器。
  • 排程支援 rate()at()cron() 表達式。
  • Pipes 提供點對點整合。
  • Pipes 也支援篩選與轉換。
在 AWS 上開發應用程式

事件匯流排(Event bus)

 

事件匯流排

  • 不同事件匯流排可最佳化事件路由。
  • 預設匯流排接收來自 AWS 服務的事件。
  • 自訂匯流排承載應用程式特定事件。
  • 合作夥伴匯流排接收第三方供應商的事件。
  • 規則位於每個匯流排與其目標之間。
在 AWS 上開發應用程式

架構(Schema)探索

 

事件結構與登錄

  • 生產者與消費者常會各自演進。
  • 了解事件結構至關重要。
  • 架構探索可擷取傳入事件的結構。
  • 用它檢視事件載荷。
  • 用它驗證整合。
  • 用它為支援語言產生繫結。
在 AWS 上開發應用程式

架構登錄庫(Schema registry)

  • 架構登錄庫會儲存你的事件架構。
  • 它協助開發者理解結構並產生繫結。

 

事件結構與登錄

在 AWS 上開發應用程式

事件篩選

  • 篩選可減少不必要的處理。
  • 以 JSON 事件樣式定義比對條件。
  • 樣式只會比對你要的特定事件。
  • 下游系統因此只處理相關事件。

 

事件篩選

在 AWS 上開發應用程式

事件排序

  • 事件順序不一定有保證。
  • 有些服務可能會亂序處理事件。
  • 使用排序控制來明確強制序列。

 

事件排序

在 AWS 上開發應用程式

事件封存與重播

 

封存與重播

  • EventBridge 可封存並於之後重播事件。
  • 重播事件可從故障中復原。
  • 重播事件可測試新的消費者。
  • 重播事件可重建下游系統。
在 AWS 上開發應用程式

錯誤處理

 

錯誤處理

  • 事件驅動應用必須安全處理錯誤。
  • 失敗情況包含重複事件、
    • 處理失敗、
    • 消費者不可用。
  • 盡可能將消費者設計為具冪等性。
在 AWS 上開發應用程式

DLQ 與目的地(Destinations)

 

錯誤處理

  • 使用 DLQ 隔離反覆失敗的事件。
  • 在 EventBridge 中,DLQ 是針對每個規則目標設定,不是針對函式。
  • Lambda Destinations 進一步擴充此路由。
  • Destinations 可路由成功與失敗結果。
在 AWS 上開發應用程式

事件測試與驗證

  • 測試事件驅動應用可驗證路由設定。
  • 也可驗證事件篩選。
  • 也可驗證事件重試。
  • 並確認分散式系統的整體處理。
  • 使用 AWS SAM 產生範例測試事件。
  • 範例事件會複製精確的 JSON 輸出。

 

測試

在 AWS 上開發應用程式

測試重點

  • SAM 讓你在部署前於本機測試。
  • 驗證事件樣式比對。
  • 驗證重試行為。
  • 驗證節流情境。
  • 驗證重複事件傳遞。
  • 驗證具冪等性的消費者行為。

 

測試

在 AWS 上開發應用程式

一起來練習吧!

在 AWS 上開發應用程式

Preparing Video For Download...