事件驅動架構——生產、發布、消費 · 心智圖
事件驅動架構——生產、發布、消費. 可編輯嘅心智圖,以彩色分支、子題目同曲線連結呈現概念。 曲線表示關聯;只有方向重要時先用箭嘴。
事件驅動架構讓系統之間透過事件溝通,從而達致解耦:生產者發布已經發生的事,匯流排把它路由給訂閱者,而事件儲存則保留歷史。
事件驅動架構——生產、發布、消費 · 心智圖
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
- 向一個正由請求/回應轉向事件的團隊,講解生產者、匯流排、消費者這個分工。
- 設計一項新的整合:事件儲存回答的是歷史需要保留下來,還是消費完就可以忘記。
- 覆核一個既有的事件驅動系統,找出那個經典的失誤——一個實際上是同步依賴的消費者。
運作方式
調整中央主題
按項目或課堂修改中央主題名稱。
擴展分支
編輯概念並加入例子或註解。
連結相關概念
畫出跨分支連結;只有方向重要時先用箭嘴。
常見問題
甚麼是事件驅動架構?
這是一種架構風格:各個組件以發布與訂閱事件的方式溝通,而不是直接互相呼叫。一項建立或改動了甚麼的服務,會發布一個描述已發生之事的事件;匯流排把它路由給每一個在意的訂閱者;而事件儲存則保留歷史。因為生產者從來不點名它的消費者,系統可以在不觸碰既有部分的情況下成長。
命令與事件有甚麼分別?
命令是一項指向特定接收者的指令——「處理這張訂單」——而且它期待一個結果。事件則是一份記錄,說明某件事已經發生——「訂單已建立」——而且它不點名任何接收者。這個分別之所以重要,是因為命令把發送方耦合到接收方,而事件則讓接收方保有改變的自由。圖解中的生產者永遠只發出事件,這正是令匯流排保持鬆散的原因。
事件儲存是用來做甚麼的?
事件儲存是系統保留下來的歷史:每一個事件,按次序,永久保存。它有三個用途——審計(發生了甚麼、何時發生)、復原(透過重播事件重建一項服務的狀態),以及可擴充性(一個新的消費者可以靠讀取過去來追上進度)。圖解把它畫成底下那條分支,因為它是對消費者即時處理的同一批事件的另一種用法。
事件驅動架構有哪些故障模式?
經典的幾種是:事件被送達多於一次(所以消費者必須是冪等的)、事件被亂序處理(所以消費者必須處理次序),以及死信佇列(那些一再失敗的事件)。圖解中的非同步處理正是令這些情況可以管理的原因——消費者可以重試而不會阻塞生產者——這也是為甚麼操作步驟裡那些故障分支,是這個設計實務上的另一半。
喺 QueryChart 編輯呢張心智圖
喺可編輯畫布開啟心智圖。移動概念、加入分支同畫連結。