發/子模式 - AWS 規定指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

發/子模式

當平台增長時,不同的微服務可能很難在不產生相互依賴關係的情況下進行交互。發佈/訂閲(pub/sub)模式在多個AWS服務(例如 Amazon SQS、Lambda 或 Amazon Simple Storage Service (Amazon S3) 等,而無需創建相互依賴關係。在這種模式下,微服務將事件作為消息發佈在訂閲者可以監聽的通道中。例如,工廠可以使用 pub/sub 模式使設備能夠向頻道發佈問題或故障,然後用户可以顯示並記錄這些設備問題。

在以下情況下,您應該考慮使用此模式:

  • 你有一個事件驅動的體繫結構。

  • 您可以啟用鬆散耦合體繫結構。

  • 在響應回調用系統之前,您不需要完成事務的所有操作部分(某些操作可以是異步操作)。

  • 您需要擴展到超出傳統數據中心能力的卷。這種可擴展性級別的主要原因是並行操作、消息緩存、基於樹的路由以及 pub/sub 模型中內置的其他功能。

    使用此模式有幾個缺點。例如,pub/sub 模式通常不能保證將消息傳遞到所有訂户類型,儘管諸如亞馬遜簡單通知服務 (Amazon SNS) 等某些服務可以提供只有一次傳遞到某些訂閲者子集。另一個缺點是,發佈者可能會假定用户正在監聽某個頻道,而事實上他們不是這樣。

使用案例

在此使用案例中,SNS 主題用於將事件發佈到保險系統中的幾個相關微服務。客户每月付款後,必須在子系統中更新信息,如「客户」或「銷售」,並且必須向客户發送一封電子郵件並附有付款確認信息。此模式可以通過使用 Amazon SNS 或 Amazon EventBridge 實現。

EventBridge 過濾多個訂户之間的事件。EventBridge 實現提供下列兩個選項:

  • 發送三個具有不同事件類型的事件。遠方的目標根據事件規則拾取它們。

  • 發送一條消息,其中包含三個事件規則偵聽相同事件類型。在調用特定目標之前,將篩選出不必要的數據。

Amazon SNS 實施

下圖顯示瞭如何使用 Amazon SNS 來實現發佈/子模式。用户付款後,「付款」Lambda 函數將 SNS 消息發送到「付款」SNS 主題。此 SNS 主題包含三個訂閲者,他們接收郵件副本並進行處理。

亞馬Amazon SNS 實施用於發佈/子模式

Amazon EventBridge 實施

在下圖中,EventBridge 用於構建一個發佈/子模式的版本,其中訂户是通過使用事件規則定義的。用户付款後,「付款」Lambda 函數通過使用默認事件總線基於具有三個不同規則指向不同目標的自定義模式向 EventBridge 發送消息。每個微服務處理消息並執行所需的操作。

亞馬Amazon EventBridge 子模式實現工具/子模式