POSTS
EDA 事件驅動架構 Event-driven Architecture
事件驅動架構
來談談事件驅動架構與一般架構設計上有何不同與差異。
一般程式架構
一般專案架構來說,會有幾個部分。
- 程式
- 主要商業邏輯部分。
- 與資料庫連結與處理。
- 後端其他程序處理部分。
- 錯誤處理。
- 資料庫
- 主要與資料有關都會在這邊。
- 常常也會放些無關的,像是網站Logo site staff等等。
- 儲存與查詢為主要事務確保資料執行ACID。
- 維運
- 確保各系統如預期運作正常。
- 各種系統故障排除
- 安全控管
可以看到程式部分就是專案主要部分了,其他只是他的延伸。
一般程序 範例說明
這邊說明如果是一個購物車下單程序,在一個下單過程正常程式程序。 那個位可以看到下圖,下單時會有一連串的檢查一個一個的執行!沒錯吧很直覺。 那這邊來看看除非是異常資料庫過慢等等問題先排除在外。 你所要花費程序時間:
檢查庫存->檢查餘額->活動確認->組合商品->客戶扣款->...
以這個範例成功訂單總共8個程序要處理。 如果是失敗的話只有耗費2~4個程序時間。
事件驅動 範例說明
再來看看如果是以事件驅動架構還做的事件有何差異。
這邊可以看到你所要花費程序時間:
檢查庫存->\
檢查餘額-> |
活動確認-> >>接收事件狀態與判定 --> 客戶扣款->...
組合商品->/
總共8個程序要處理,但是事件處理只花費一個處理程序時間同時觸發四個程序。 以這個範例成功訂單只有花費6個程序時間。 如果是失敗的話只有耗費2個程序時間。
想法結論
以事件方式處理好處:
- 各事件程序各自獨立事件。
- 可以自定擴充事件,包含依照組態資料庫做即時異動與變更。
- 節省處理時間與一般程式開發做比較來說。
- 可以以不同語言開發以往要混何開發較為分散且獨立。
- Microservice微服務。
以事件方式處理壞處:
- 需要較良好的例外狀況處理。
- 需要維護較多 Microservice微服務。
- Microservice微服務 程式碼品質參差不齊考驗開發能力。
- 需要定義完善的共通『格式與文件』並且具備良好的擴充與容錯能力。
- 需要避免錯綜複雜依賴。