隔了兩年多沒有在部落格留下文字,這段時間因為工作異常忙碌,卻也收穫頗多。除了累積更多的專案實戰經驗外,也在日常中不斷摸索與學習,特別是在 大規模資料流處理 以及 高併發服務的開發與維護 上,都有了更深的體會。
今天想和大家聊聊我近期在系統設計上常碰到的一個重要主題 —— 事件驅動架構 (Event-Driven Architecture, EDA) 中經常被使用與討論的兩項技術:Message Queue 與 Event Broker。
在提到 Message Queue 之前,我們需要先知道甚麼是「Queue」。Queue (佇列) 是電腦科學中一個常見的資料結構,它的特性是 FIFO (First-In-First-Out,先進先出),也就是最先進入佇列的資料,會最先被取出處理。這樣的行為就像日常生活中排隊買東西一樣:先排隊的人先被服務。
在分散式系統與應用整合中,Message Queue 正是基於這樣的概念設計,用來可靠地處理訊息傳遞,讓不同服務之間能夠解耦合、平衡流量、並避免資料遺失。

那甚麼是 Message Queue 與 Message Broker 呢?
訊息佇列(Message Queue,MQ),本質就是個佇列,具有 FIFO (First-In-First-Out) 先入先出的特性,只不過佇列中存放的內容不是物件、檔案,而是message。
其主要用途可以在不同服務、不同程序或不同執行緒之間更有效地處理資料流。
而為了讓開發者能更專注在程式邏輯的撰寫上,目前已經有許多第三方服務提供了 Message Queue 的能力,我們通常將這類服務稱為 Message Broker。
換句話說,像是 訊息的儲存、重試機制、可靠傳遞 等細節,我們不需要再從零實作,因為這些 Message Broker 本身就已經內建了相應的功能。
常見的例子包括 Azure Service Bus、RabbitMQ 等,它們都能幫助我們快速構建穩定的訊息傳遞管道。
除此之外,這些 Message Broker 更進一步擴大以 Queue 為基礎的功能,譬如可以讓訊息被延遲傳遞(Delayed/Scheduled Message) 或是實作如在 Java 中的資料結構 PriorityQueue 的功能,可以讓訊息針對不同的優先級進行傳遞等等。
Event Broker (事件代理)
這裡我們必須了解另外一個名詞「Event Broker」。
Event Broker(事件代理)是一種 中介軟體 (Middleware),主要負責協調 事件的發布與訂閱。在事件驅動架構 (EDA) 中,Event Broker 提供基礎的訊息傳遞能力:當應用程式發佈事件時,事件會先送達 Event Broker,然後由 Event Broker 根據 訂閱規則 將事件傳遞給對應的消費者。
與 Message Broker 相比,Event Broker 除了具備基本的訊息傳遞與 Queue/Topic 支援外,還提供更進階的能力,例如:
- 動態路由 (Dynamic Routing):支援精準、萬用字元 (wildcard)、甚至基於內容的事件過濾。
- 事件回放 (Replay):允許消費者重新取得過去的事件。
- 跨區域 / 多雲的事件網格 (Event Mesh)。
因此,我們可以理解成:Message Broker 強調可靠傳遞,而 Event Broker 則著重在大規模的事件流處理與靈活的路由能力。
常見的產品如「Solace」、「Azure Event Grid」、「Apache Kafka」等等都已經是相當成熟的工具。
那,為甚麼我們需要 Message Broker 跟 Event Broker呢?
舉例來說,在高併發的場景下,一秒鐘的 request 可能高達數十萬甚至百萬,這時候如果沒有對應的機制去處理這些流量或是同步狀態,很有可能你的服務或系統就會被打爆了,更不可能透過傳統的 Database 去處理,因為,在資料庫中,資源是固定的,例如建立時就已經決定好 CPU Core 數與記憶體容量,更不可能進行動態的水平或垂直擴展。
因此,我們需要這些 Broker 來協助處理各種高併發場景,例如 電子商務的下單流程、金融交易的即時撮合,或是 IoT 裝置的大量資料上傳。
透過 Message Broker 或 Event Broker 的能力,我們可以將瞬間湧入的請求進行緩衝、分流與可靠傳遞,避免後端服務因流量過載而崩潰。
這些 Broker 若能與進一步 分散式系統 (如 Kubernetes, K8s) 結合,便能發揮更高的彈性與可用性。系統不僅能夠自動擴展應對高峰流量,還能在發生故障時快速恢復,整體架構因此具備了更好的 穩定性 (Stability) 與 高可用性 (High Availability)。
總結來說,Message Broker 與 Event Broker 在現代分散式系統中,已經不再只是「可有可無」的輔助,而是應對 高併發、事件驅動架構 (EDA)、以及 跨系統整合 的關鍵基礎建設。