流程/規則引擎框架-Baikal設計

1.節點結構

前面的Baikal介紹中提到用節點將業務拆解,並使用關係節點將業務連接起來並控制業務流轉。
在這裏插入圖片描述
結構解釋:

1.BaseNode 所有節點的基類,存放着節點的共性

2.BaseRelation 所有關係節點的基類,children是關係節點下的所有子節點,具體的有介紹中所說的AndRelationAnyRelationAllRelationNoneRelationTrueRelation

3.BaseLeafFlow 葉子節點,所有過濾性條件的基類,供具體業務繼承並實現其doFlow方法,返回truefalse代表是否滿足/是否通過

4.BaseLeafResult 葉子節點,所有結果性質的類的基類,供具體業務繼承並實現其doResult方法,返回truefalse代表結果是否被髮放,如發放獎勵等

5.BaseLeafNone 葉子節點,所有僅數據組裝/數據加載等不干預流程的類的基類,供具體業務繼承並實現其doNone方法,無返回值,數據的組裝和加載後放入上下文中,供後續流程使用

2.基礎流程

在這裏插入圖片描述

上圖爲一個以往版本的解釋,現已大部分優化,但原理一致

1.業務通過BaikalPack數據包進入Baikal執行,需指定要執行的baikalId/scene(場景)

2.BaikalPack組裝成BaikalContext在Baikal中流轉

3.依託觀察者模式,將數據庫/其他地方配置的完整的baikal樹形結構,經過組裝形成對應執行的handler,在特定scene/baikalId下觸發並執行handle方法

3.Client設計

在這裏插入圖片描述
1.各自app在項目啓動時通過Mq拉取最新配置,並組裝到本地緩存

2.當server發現某app下有更新,便推送更新到具體業務並更新Baikal緩存

3.server端實現可視化配置,操作樹與更新樹形結構配置等

4.待實現

1.監控與報警與落盤
當某個葉子節點報錯後,可根據配置選擇是否落盤異常,並記錄當時baikal快照與執行到的節點信息,當錯誤修復/恢復後,可選擇重新執行/從錯誤節點恢復

2.同scene多handler處理優先級
當同scene多handler情況發生時根據各個handler的優先級指定執行順序,確保高優先級請求優先處理

3.節點根據複雜度調整與併發執行
調整:如A過濾比B過濾耗時多,且是A&&B的情況,則應調整爲B&&A
併發:如A&&B&&C 是不是ABC併發執行,當有一個返回false時結束執行並返回false會不會對一些特殊場景有性能提升?

4.持續性優化,等等等等,還有很多業務場景待發掘

有更好方案/簡易的小夥伴歡迎交流~~

e:[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章