一、SEDA
SEDA全稱是:stage event driver architecture,中文直譯為“分階段的事件驅動架構”,它旨在結合事件驅動和多線程模式兩者的優點,從而做到易擴展,解耦合,高並發。
各個stage之間的通信由event來傳遞,event的處理由stage的線程池異步處理。
上圖對SEDA做了一點改動,如圖所示,每個stage由幾個核心部分組成:
1)階段控制器:StageController
2) 事件隊列:eventQueue
3) 事件監聽器
4)事件處理線程池(線程池內部維護一個隊列)
5)事件處理器(事件處理器圖上沒顯示,作為一個業務線程來實現)
處理流程如下:
1)event推送到stage的eventQueue
2) EventListener監聽到了event
3)ThreadPool異步並發處理event
二、UML類圖
依據上圖的邏輯,下面是UML類圖設計
1) StageManager初始化調用boot(),創建Stage並維護Event和Stage之間的映射關系
2)Stage啟動監聽器,監聽事件隊列(事件隊列可以是本地,也可以是分布式隊列,這里采用一個Builder構造器了來實現,你可以在構造器里面實現自己的策略)
3)如果接收到事件,將提交給執行器去執行(這里涉及到事件處理器,包含業務邏輯)
三、PDM
下面設計了兩張表:
1)t_stage_event:針對每個Stage的事件進行持久化,防止事件丟失補償處理
2)t_stage_event_log: 對一個event做鏈路跟蹤的日志表