事件驅動架構是一種分布式的異步架構模式,是解耦復雜系統組件的一種處理手段。這種架構模式主要包含兩種實施方式,一種是集中式的,一種是非集中式的。
集中式架構
其包含了 event mediator、event channel、event queue、event processor 這些組件,理解 event mediator 是理解這種架構的關鍵。Event mediator 直譯為事件中間處理器,也就是說這個組件是一個事件中樞處理單元,既然是中樞作用也就是這個組件知道事件的處理流程,但是他不執行具體的事件業務處理邏輯,舉例來說 event mediator 在接受到 initial event 之后(在集中式模式中,有兩種事件類型,一種是 initial event,一種是 processing event,initial event 是 event mediator 接受的原始事件,processing event 是由 event mediator 分發并且由 event processor 處理的事件),會根據事件的特征對事件進行拆分,形成不同的更小單元的 processing event ,這些事件之間沒有明顯的順序依賴,各自獨立,然后經過不同的 event channel 發送到不同的 event processor。
Event processor 是一組各自獨立的組件,他們彼此之間沒有依賴,也就是 他們處理 processing event 的邏輯是自包含的,不依賴于其他 processor 的處理結果 ,這是他們的顯著特征。
集中式的工作模式可以以一個處理保險流程的例子來說明如圖:
Event mediator 在接受到一個 relocation event 原始事件之后,拆分成 change address、recalc quote、update cliams 等 processing event,這些 event 彼此獨立,經由各自的 event channel 發送到 不同的 event processor 處理。
非集中式架構
這種模式主要由 event processor 和 event channel 構成,較為簡單,但是不同于集中式,這種模式的 事件可能彼此是相互關聯的 ,比如一個 event processor 的處理結果是另一個 event processor 的需要消費的事件,整個事件處理過程像一條彼此相扣的鏈條。
同樣以處理保險的為例來說明這種模式的工作流程:
圖中明顯可以觀察到,當 change address 完成后產生的 event 會被 quote process 和 claims process 接收并處理,同樣他們的處理結果又分別被 notification process 和 adjustment process 接受,整個過程就像是接力賽跑,每個 processor 必須要完成自己的工作其他 processor 才能開始執行,整個處理過程像鏈條一樣,只有整個流程結束才能形成一個完整的業務邏輯。
權衡
事件驅動架構模式是較為復雜的,他涉及了多個分布式系統之間的交互,系統之間的穩定調用、業務的延遲敏感性等都是要必須考量的因素,尤其是在業務邏輯拆分成多個分布式執行單元之后,他們不再是一組完整的原子執行單元,而變成了分布式事務,這也加劇了這種架構模式的設計難度。因而在設計這種架構時,event 是否能夠獨立完成,是否要依賴于其他事件,是否是一組無法分割的事務單元都在影響著事件的拆分粒度。
事件架構的度量
agility
各個組件彼此獨立,耦合性低,彼此變更而不相互影響,敏捷性強
deployment
非集中式架構部署相對容易,組件的依賴程度較低,集中式架構相對較難,各個 processor 都依賴 event mediator
testability
復雜分布式系統難以測量
performance
雖然各個組件之間的消息傳遞的成本需要考慮,但是由于業務邏輯分拆成多個小單元異步執行,整體性能提升較為明顯
scalability
組件獨立,scale out 容易,尤其是 processor
development
分布式系統,天然特征,開發難,測試難