事件(event)就是狀態的顯著變化,比如說前面提到的客戶下單被執行。從來源來分,事件可以分為系統內部事件和外部事件。從類型來分,可以分為業務事件和系統事件。
事件驅動架構(Event Driven Architecture,EDA)一個事件驅動框架(EDA)定義了一個設計和實現一個應用系統的方法學,在這個系統里事件可傳輸於松散耦合的組件和服務之間。一個事件驅動系統典型地由事件消費者和事件產生者組成。事件消費者向事件管理器訂閱事件,事件產生者向事件管理器發布事件。當事件管理器從事件產生者那接收到一個事件時,事件管理把這個事件轉送給相應的事件消費者。如果這個事件消費者是不可用的,事件管理者將保留這個事件,一段間隔之后再次轉送該事件消費者。這種事件傳送方法在基於消息的系統里就是:儲存(store)和轉送(forward)。
說到底事件驅動架構就是通過事件進行通信的軟件架構。
它分成四個部分。
- 事件隊列(event queue):接收事件的入口
- 分發器(event mediator):將不同的事件分發到不同的業務邏輯單元
- 事件通道(event channel):分發器與處理器之間的聯系渠道
- 事件處理器(event processor):實現業務邏輯,處理完成后會發出事件,觸發下一步操作
對於簡單的項目,事件隊列、分發器和事件通道,可以合為一體,整個軟件就分成事件代理和事件處理器兩部分。
優點
- 分布式的異步架構,事件處理器之間高度解耦,軟件的擴展性好
- 適用性廣,各種類型的項目都可以用
- 性能較好,因為事件的異步本質,軟件不易產生堵塞
- 事件處理器可以獨立地加載和卸載,容易部署
缺點
- 涉及異步編程(要考慮遠程通信、失去響應等情況),開發相對復雜
- 難以支持原子性操作,因為事件通過會涉及多個處理器,很難回滾
- 分布式和異步特性導致這個架構較難測試