編排式規則引擎LiteFlow在轉轉輕質檢報告的實踐
1 引言
1.1 簡述輕質檢報告的背景
在去年,正式上線了對N品類的質檢能力。質檢中心也有一套標準可以來拓展越來越多N品類,實現用戶閉眼打包寄賣,在系統維度上可以認為轉轉官方驗沒有不能質檢的品類。
在傳統的報告中,通常采用固定的模板和結構,無法滿足在N品類中的靈活訴求。而輕質檢報告的目標是提供一種自由組合和解析的方式,可以按照不同的訴求,自由選擇和配置去不同的質檢報告呈現出來,同時也需要確保報告的邏輯和數據的準確性,避免信息的混亂或錯誤的解讀,為此轉轉輕質檢報告可能需要建立靈活的數據解析和處理引擎。
N品類在官方驗賣場的質檢報告如圖所示:
質檢報告
1.2 組件式規則引擎及其應用潛力
組件式規則引擎是一種將規則拆分為獨立組件并通過組合和配置來實現業務邏輯的規則引擎。它把規則表示為可重用和可配置的組件,每個組件負責處理一個特定的規則或規則集合。這些規則組件可以通過組合、連接和配置來構建復雜的業務規則,以滿足不同的需求和場景。
在公司的系統中充斥著復雜且豐富多樣的業務邏輯,承載的也是公司各種各樣的核心業務功能,每個復雜的業務都涉及到RPC的調用,不同步驟不同的業務規則的處理,數據的運算等。隨著時間的推移和版本的地迭代維護的成本會越來越高。代碼的抽象,復用情況也會越來越差,各個模塊耦合度變高。邏輯的變動,會影響到其他模塊,也會帶來一定的測試成本。
先看個在電商行業中簡單的例子:
假設平臺希望根據不同的用戶類型和購買行為來發放優惠券。以下是一個組件式規則引擎的簡單編排例子:
- 規則組件(A): 用戶類型規則組件
條件:用戶類型為新用戶
動作:發放新用戶專享優惠券
- 規則組件(B): 購買金額規則組件
條件:購買金額超過一定閾值
動作:發放滿減優惠券
- 規則組件(C): 商品類別規則組件
條件:購買特定商品類別
動作:發放該商品類別相關的優惠券
- 規則組件(D): 優惠券疊加規則組件
條件:用戶已經擁有一張優惠券
動作:根據疊加規則判斷是否發放額外的優惠券
以上的A,B,C,D四個組件,按照順序執行。
規則編排
在例子中,每個規則組件都是一個獨立的組件,負責處理特定的規則。它們可以通過組合和配置來構建復雜的優惠券發放規則。
通過組件式規則引擎的編排,平臺可以根據不同的條件和業務規則,靈活地發放不同類型的優惠券。同時,這種模塊化的設計讓規則的管理和維護更加方便,可以根據業務需求進行靈活的調整和擴展,比如實時的去增加一個E組件,或者去掉一個B組件,在或者C可依賴AB,AB并發執行等。
2 組件式規則引擎概述
2.1 LiteFlow的核心概念和特點
LiteFlow是一款組件式規則引擎,它通過將規則拆分為獨立的組件,以靈活、可組合的方式進行規則編排和執行。以下是該規則引擎的核心概念和特點:
- LiteFlow的核心流程核心流程
- 組件(Component - A B C):每個組件獨立處理特定的規則邏輯
- 條件(Condition):條件用于判斷是否滿足某個規則的觸發條件。
- 動作(Action):動作是規則觸發后執行的操作。
實際業務中可以理解為每個處理的Class類標記為一個LiteFlow中的一個組件規則,定義如下,滿足了條件就執行相應動作。
@Slf4j
@LiteflowComponent(FlowNodeVar.DYNAMIC_APPOINT)
public class DynamicAppointCmp extends NodeComponent {
// 條件
isAccess();
// 動作
process();
}
- 編排(Orchestration):編排是指將多個組件按照特定的順序和邏輯組合起來形成規則流程。
例如:
THEN (A,B,C,D) // 串行執行四個節點。
WHEN (A,B,C,D) // 并行執行四個節點。
SWITCH(A).to(B, C, D) // 利用A的結果去選擇執行B,C,D任一節點。
THEN(IF(X, A),B) // 如果X=TRUE執行A, 否則執行B
....
能夠非常靈活的去定義組件的執行流程, 如下圖所示A, B, C, D四個規則節點,可以通過不同的Chain-1, Chain-2去編排,而Chain的內部就是各樣的WHEN THEN 等條件去編排各個節點而設立的執行規則。
- 編排元數據信息
- 數據上下文(Data Context):LiteFlow使用數據上下文來共享和傳遞數據(多線程隔離)。
上下文
- 執行引擎(Execution Engine):執行引擎是LiteFlow的核心組件,負責解析規則流程,按照定義的順序執行組件,并處理組件間的數據傳遞和上下文管理。執行引擎
總的來說,LiteFlow組件式規則引擎的核心概念是組件、編排、條件和動作。它具有靈活的規則組合和配置能力,支持數據上下文共享和傳遞,以及可擴展性。這些特點使得LiteFlow成為一個強大而靈活的規則引擎,適用于各種業務場景的規則編排和執行。
2.2 為什么選擇該引擎處理輕質檢報告
常用的規則引擎組件,例如:drools、easy-rules、liteFlow等。根據自己的業務場景選擇合適的組件無疑是最好的。在轉轉寄賣中用戶物品質檢完成后賣法的判斷(寄賣,回收...)選擇了easy-rules,因為其業務邏輯中存在過多的if else 邏輯判斷,它能夠簡練的把規則定義好按照規則執行。但在輕質檢報告中選用liteflow 處理主要考慮幾個方面:
- 實時的增加組件,移除組件,編配不同場景的規則執行鏈,這將帶來的好處是我可以隨時的調整報告所呈現的內容信息,各種各樣的規則執行鏈也會對應各樣的報告頁面或業務數據的依賴場景。
- 各個組件之間具備并發處理能力且數據上下文線程隔離。
- 規則定義能夠直接集成第三方比如Apollo,Nacos,Etcd,Zookeeper中,且具備熱刷新機制,規則變化,無需重啟應用,即時去改變報告的規則。高并發下不會因為刷新規則導致正在執行的規則有任何錯亂所帶來報告展示問題。
- 框架內自帶一個監控,能夠知道每個組件的運行耗時排行,可以感知某個規則出現的問題。
3 輕質檢報告處理流程設計
3.1 規則和鏈路處理的簡述
首先在初始化階段,會將質檢報告生成的規則存儲插件(Apollo)中,規則通過解析器加載到規則引擎,然后通過構建器構建工程中定義的各個組件(A,B,C等)節點和規則執行鏈進行加載,執行器獲得執行鏈路以及執行條件和規則節點,最終按照業務請求的執行鏈,進行節點執行和上下文的數據交換。如下圖所示:
規則的定義和執行
3.2 在輕質檢報告中配置和集成LiteFlow
- 集成數據源和服務:LiteFlow通常需要與外部數據源和服務進行集成。涉及連接配置中心、RPC等操作,以獲取所需的數據和執行規則所需的規則。
圖片
- 執行器初始化
- 設計規則組件:根據規則需求,設計和定義規則組件。每個規則組件負責處理特定的規則邏輯,具備條件判斷、動作執行、數據轉換等。規則組件具備獨立性和可重用性。
報告規則劃分
- 創建規則流程:在LiteFlow中創建規則流程,將規則組件按照需要的順序進行編排。規則流程定義了規則的執行順序和流程控制邏輯。
質檢報告規則編排
這里只列舉了兩種報告的編排形式,在內部系統流程中還有其他場景的一些編排。
- 配置中心配置規則組件:對每個規則組件進行配置,設置條件、定義動作和指定數據上下文。
3.3 進一步提高輕質檢報告配置能力
通過對一個質檢組(外觀檢測)的icon和匯總描述文案進行配置化,通過兩種存儲在配置中心的規則,使得質檢項的匯總提示信息進行自定義配置化處理。
報告細節處理
4 總結
本文介紹了轉轉寄賣業務下輕質檢報告采用LiteFlow編排式規則引擎的實踐。在N品類質檢能力上線以來,多次的質檢報告變更做到無需上線配置生效的目標,一定程度上降低了開發成本。
關于作者:
趙路通,轉轉C2C&寄賣業務研發工程師