事件驅動架構——生產、發布、消費 · 心智圖

事件驅動架構——生產、發布、消費. 可編輯嘅心智圖,以彩色分支、子題目同曲線連結呈現概念。 曲線表示關聯;只有方向重要時先用箭嘴。

事件驅動架構讓系統之間透過事件溝通,從而達致解耦:生產者發布已經發生的事,匯流排把它路由給訂閱者,而事件儲存則保留歷史。

事件驅動架構——生產、發布、消費 · 心智圖

The interactive MindMap canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.

點樣閱讀呢張心智圖

  • 由中央主題開始,沿住彩色分支探索相關概念。
  • 曲線表示關聯;只有方向重要時先用箭嘴。

Producers

呢個分支匯集 “An event records something that HAPPENED — “order placed”, “user updated” — not an instruction to anyone in particular. Producers don't know who is listening.”.

Event bus

呢個分支匯集 “Events are published to the bus”, “The bus decouples producers from consumers: a producer keeps publishing whether or not any consumer is ready, and consumers subscribe to the events they care about.”.

Consumers

呢個分支匯集 “Consumers process events asynchronously”, “The test of the architecture: add a service that reacts to existing events, and not one producer changes. This is the flexibility the pattern buys.”.

Event history

呢個分支匯集 “The event log is the system of record: every state change, in order, forever. Current state is a projection that can be rebuilt from it.”, “Events can be replayed for audit or recovery”.

跨分支關聯

事件記錄的是已經發生的事;它並不是給任何特定對象的命令。

匯流排把生產者與消費者解耦——雙方都不知道對方的身分或時間表。

事件儲存把歷史變成一份可以重播的權威紀錄。

消費者是非同步的:一個慢的消費者永遠不會阻塞生產者。

新的消費者靠訂閱就能加入——這套架構關於彈性的全部主張都建立在這一點之上。

Key relationships and takeaways

  • 事件記錄的是已經發生的事;它並不是給任何特定對象的命令。
  • 匯流排把生產者與消費者解耦——雙方都不知道對方的身分或時間表。
  • 事件儲存把歷史變成一份可以重播的權威紀錄。
  • 消費者是非同步的:一個慢的消費者永遠不會阻塞生產者。
  • 新的消費者靠訂閱就能加入——這套架構關於彈性的全部主張都建立在這一點之上。

When to use this visual

  • 向一個正由請求/回應轉向事件的團隊,講解生產者、匯流排、消費者這個分工。
  • 設計一項新的整合:事件儲存回答的是歷史需要保留下來,還是消費完就可以忘記。
  • 覆核一個既有的事件驅動系統,找出那個經典的失誤——一個實際上是同步依賴的消費者。

運作方式

  1. 調整中央主題

    按項目或課堂修改中央主題名稱。

  2. 擴展分支

    編輯概念並加入例子或註解。

  3. 連結相關概念

    畫出跨分支連結;只有方向重要時先用箭嘴。

常見問題

甚麼是事件驅動架構?

這是一種架構風格:各個組件以發布與訂閱事件的方式溝通,而不是直接互相呼叫。一項建立或改動了甚麼的服務,會發布一個描述已發生之事的事件;匯流排把它路由給每一個在意的訂閱者;而事件儲存則保留歷史。因為生產者從來不點名它的消費者,系統可以在不觸碰既有部分的情況下成長。

命令與事件有甚麼分別?

命令是一項指向特定接收者的指令——「處理這張訂單」——而且它期待一個結果。事件則是一份記錄,說明某件事已經發生——「訂單已建立」——而且它不點名任何接收者。這個分別之所以重要,是因為命令把發送方耦合到接收方,而事件則讓接收方保有改變的自由。圖解中的生產者永遠只發出事件,這正是令匯流排保持鬆散的原因。

事件儲存是用來做甚麼的?

事件儲存是系統保留下來的歷史:每一個事件,按次序,永久保存。它有三個用途——審計(發生了甚麼、何時發生)、復原(透過重播事件重建一項服務的狀態),以及可擴充性(一個新的消費者可以靠讀取過去來追上進度)。圖解把它畫成底下那條分支,因為它是對消費者即時處理的同一批事件的另一種用法。

事件驅動架構有哪些故障模式?

經典的幾種是:事件被送達多於一次(所以消費者必須是冪等的)、事件被亂序處理(所以消費者必須處理次序),以及死信佇列(那些一再失敗的事件)。圖解中的非同步處理正是令這些情況可以管理的原因——消費者可以重試而不會阻塞生產者——這也是為甚麼操作步驟裡那些故障分支,是這個設計實務上的另一半。

喺 QueryChart 編輯呢張心智圖

喺可編輯畫布開啟心智圖。移動概念、加入分支同畫連結。

喺 QueryChart 編輯呢張心智圖

心智圖的更多內容