Categories
程式開發

從單體到事件驅動架構:找到新架構中的接縫


本文要點

  • 單體應用程序並不總是單層的;分佈式單體看起來跟微服務架構很像,但它們的行為卻是單體行為;
  • 所謂的事件驅動架構,就是將事件作為變化的單元;
  • 在CQRS中,命令(Command)和查詢(Query)之間的區別比分離(Separation)更為重要;
  • 事件溯源將事件與狀態分離,為系統的轉換狀態提供必要的抽象;
  • 當遺留元素被移除後將出現目標狀態架構,這就是過渡性架構中的接縫(Seam)。

為什麼要進行遷移?

除了單層的單體架構之外,三層架構也是一種常見的架構模式,一般由表示層、業務層和數據層組成。但是,這些層之間的複雜性幾乎是不成比例的。在某些情況下,我們會在表示層或數據層的存儲過程中發現業務邏輯。而在其他情況下,應用程序層按照系統功能被分成很多個服務。有些人甚至稱之為微服務,但如果分離不得當,它只是一個分佈式的單體。

從單體到事件驅動架構:找到新架構中的接縫 1

圖1:一些架構模式的比較

當然,這些並非都是糟糕的架構風格,但每一種都存在風險。當做出變更的風險足夠大或者無法控制時,說明該向新架構遷移了。搞清楚進行架構遷移的原因與在遷移之前進行可行性驗證同樣重要。

事件是EDA的核心

事件驅動架構(EDA)並不是新鮮事物,但我們可能會發現,我們在實現時所採用的實踐經常與核心原則相背離,導致我們忽略了EDA實際上是關於將事件作為系統變更單元的實事。我們在EDA中所採用的實踐(如消息傳遞和異步消息)可能會引入這種噪音。你也可以在一個單體系統中構建一個事件驅動的系統,就像在分佈式系統中所做的那樣,只要看看大多數操作系統內核(如Windows或Linux)就知道了。

原文鏈接:【https://www.infoq.cn/article/xHbgKHIIFj9eKszyjbai】。未經作者許可,禁止轉載。