WebSphere ILOG JRules 規則引擎運行模式

引言
作為 JRules 的核心組件,規則引擎決定了在規則集的執行過程中,哪些業務規則會被執行,以及以何種順序執行。理解併合理選擇規則引擎的運行模式對於業務規則的正確應用有著重要意義。文章首先介紹了 JRules 規則引擎的三種運行模式,然後闡述了如何針對特定的應用場合選擇合適的運行模式,最後展示了如何在 Rule Studio 中為 rule task 設置運行模式。本文需要讀者對 WebSphere ILOG JRules 以及 Rule Studio 有一定了解。

背景
隨著信息技術在企業的廣泛的應用,企業 IT 部門所開發和維護的應用系統也越來越複雜,如何使應用系統能夠更快的響應的企業業務的變化已成為企業 IT 發展的重要挑戰之一。業務規則管理系統(Business Rule Management System)正是解決上述問題的最佳方案,BRMS 將以程序代碼的形式固化在應用系統中的業務邏輯分離、抽象出來,被分離的業務邏輯以業務規則形式存儲在規則庫中,並通過規則引擎進行執行;同時,BRMS 還提供一系列的規則開發和管理工具供開發人員和業務人員來創建、修改、查詢、部署和管理這些業務規則。ILOG JRules 是面向 Java 環境的完整的業務規則管理系統 (BRMS)。它提供了所有必要的工具 , 用於對整個企業的業務規則進行管理 , 包括規則建模、規則編寫、規則測試、規則部署、規則執行和規則維護。

規則引擎簡介
規則引擎是 BRMS 中的核心模塊,它旨在處理業務規則集合與業務數據關係匹配,並通過選擇規則匹配演算法來得出最後的計算結果 [1]。我們知道,業務規則管理技術能將業務邏輯從固化在代碼中剝離出來,使之能像管理業務數據一樣管理業務規則,因此從系統應用設計的角度看,規則引擎可視為一座連接應用系統與業務規則之間的重要橋樑。
規則引擎由基於規則的專家系統中的推理引擎發展而來,通常包括規則庫、Working Memory 和推理引擎(Inference Engine)。在規則引擎執行過程中,數據將首先被送入到 Working Memory,然後由推理引擎將 Working Memory 中的數據對象和規則庫中的規則進行比較,得到符合條件的規則並執行。因此,規則引擎運行模式的核心在於如何高效地匹配出符合條件的規則,規則條件匹配的效率即決定了引擎的性能。

JRules 規則引擎運行模式
JRules 規則引擎根據規則的不同應用場景和業務規則的特點提供了三種不同的運行模式:RetePlus、Sequential 和 FastPath。
RetePlus
Rete 是目前主流的規則引擎模式匹配演算法,RetePlus 則是 JRules 在 Rete 演算法上的擴展和優化,也是 JRules 規則引擎默認的運行模式。RetePlus 運行模式為 ILOG 規則引擎提供了種種手段,用以盡量減少需要加以評估的規則和條件的數量,計算哪些規則應當執行,並確定這些規則的執行順序。在 RetePlus 演算法中,規則引擎使用 Working memory 和 Agenda 來存放和操作應用程序對象。Working memory 中包含的應用程序對象的引用,Agenda 則按順序列出將要執行的規則實例。如圖 1 所示:
圖 1. RetePlus 執行模式

下載 (27.86 KB)

2010-8-18 14:09

RetePlus 模式的執行過程如下:

規則引擎依據 Working Memory 中的數據對象來匹配規則集中規則的條件部分。在模式匹配過程中,RetePlus 首先創建出以規則條件測試之間的語義關係為基礎的網路(步驟 1),然後將匹配的規則實例化並添加到 Agenda 中,隨後對 Agenda 中的規則按照一定原則進行排序(步驟 2)。

執行 Agenda 中的規則實例,即執行規則的動作(Action)部分。同時,規則實例的執行也會影響 Working Memory 中的數據對象,主要方式有:(步驟 3):

往 Working Memory 中加入一個新的對象

移除 Working Memory 中現有對象

修改現有對象的屬性

以上過程將不斷重複,直至執行完 Agenda 中所有規則實例。

在 RetePlus 演算法中每當 Working Memory 被修改,規則引擎將重複模式匹配的過程。它在每次規則執行數據修改後重新評估每個規則匹配。這可能會改變 Agenda 中的規則實例。因此,RetePlus 是漸進的和數據驅動的。這些特點使 RetePlus 在計算和關聯性類型的應用方面擁有卓越的性能。
Sequential
順序運行模式,顧名思義,即規則引擎按順序執行 rule task 中符合條件的所有規則。如圖 2 所示:
圖 2. 順序執行模式

下載 (49.89 KB)

2010-8-18 14:09

具體執行過程如下:

規則引擎根據輸入參數以及 working memory 中的對象集合和規則的條件部分進行匹配。每次匹配都將生成一個規則實例並立即運行。(步驟 1)

當規則實例被執行後,它有可能設置屬性或規則集輸出參數的值。(步驟 2)

順序演算法執行的規則是無狀態的。順序演算法的運行就像堆棧一樣,匹配的規則只會運行一次,而不會再次評估。因此在順序模式下,規則中不能使用類似”至少有一個 < 辭彙 >”、”如下對象的數目:< 辭彙 >”等等跟 working memory 中對象有關係的存在性條件(existence conditions),除非這個對象是集合類型。
順序模式的特性決定了其在校驗和一致性等類型的應用中有良好的性能表現。
順序處理可以通過規則任務的演算法屬性來指定,通常可以在 Rule Studio 中顯式的選擇。
FastPath
Fastpath 運行模式是增強型的順序運行模式,和順序模式類似,Fastpath 也是順序運行,但是它同時還能和 RetePlus 模式一樣在進行模式匹配時檢測規則條件的語義關係。
圖 3.FastPath 執行模式

下載 (26.95 KB)

2010-8-18 14:09

 

在 Fastpath 模式中,規則引擎可以通過 working memory 引用應用數據對象或規則集參數。與 Reteplus 類似,在模式匹配時 Fastpath 同樣創建以規則條件測試之間的語義關係為基礎的網路(步驟 1)。
每次匹配,將創建一個規則實例並立即執行。規則實例執行後,它可能修改 working memory 中的對象,但是這些修改不會影響其它規則的執行,並且規則引擎也不會重複模式匹配的過程(步驟 2)。
Fastpath 綜合了 Reteplus 的模式匹配和順序運行模式的規則執行的特性,從這個意義上來說,它在關聯型應用和校驗類應用中都有較好表現。
和順序運行模式一樣,Fastpath 運行模式也是無狀態的,適合在大量單獨執行簡單判定或少量交叉測試的規則上進行對象匹配。這樣一些規則集可以在沒有任何 agenda 支持下很好的按順序執行。除了作為一種變異的順序模式的優勢,Fastpath 運行模式的目的是進一步優化一致性和校驗性類型規則的執行,通常這些類型的規則佔據了商業規則的絕大部分。

選擇合適的運行模式
你可以為規則流中的每一個規則任務選擇運行模式,默認情況下,規則任務採用 Reteplus 運行模式。為了達到最佳性能,您可能需要選擇其他的運行模式,以更好的適應特定規則任務中的規則。
通常要確定規則任務應該使用哪種運行模式,你需要分析規則任務中各個規則的結構,以及它們執行何種類型的業務處理。
為了更好的作出決策,您需要回答一下這些問題:

您的業務規則針對何種類型的應用?

你的業務規則使用什麼類型的對象?

規則執行的影響是什麼?

規則條件中使用什麼類型的測試?

您的業務規則使用了什麼樣的優先設置?

您的業務規則針對何種類型的應用?
根據規則任務中業務邏輯的目的不同,所選擇的運行模式也各異。
一致性檢查、校驗
鬆散關聯的規則檢查一系列條件以產生 GO /NOGO 或類似限制的結果。一致性業務規則的應用通常用於承保,欺詐檢測,數據驗證和表單驗證。這種類型的應用中的業務規則通常會有一個是或不是的結果並提供一些關於這個決定的解釋。
對於這種類型的應用,推薦使用順序或者 Fastpath 運行模式。
計算
緊密關聯的規則,用來計算一個複雜對象模型的度量。計算型業務規則應用程序通常用於評分、定級,合同和分配。這種應用中的業務規則將針對特定對象進行不同運算並據此提供一個最終結果(或品級)。
對於這種類型的應用,推薦使用 RetePlus 運行模式。
相關性
緊密相關的規則,從一組對象中抽取信息,從而計算一些複雜的數據。相關性業務規則的應用程序通常用於計費。這種類型中的業務規則通常需要插入信息。
對於這種類型的應用,推薦使用 RetePlus 或 Fastpath 運行模式。
有狀態會話
強烈的關聯引擎的狀態會期活動,相互關聯的規則。有狀態應用通常用於報警過濾和相關性,圖形用戶界面定製,以及網頁導航。
對於這種類型的應用,推薦使用 RetePlus 運行模式。

你的業務規則使用什麼類型的對象?
根據您的規則中所使用的對象的不同,所選擇的運行模式也各異。
Working memory 對象或規則集參數
如果您的規則中使用的對象是通過規則集傳入的,那麼建議您選擇順序或 Fastpath 運行模式。如果這些對象是您插入到 working memory 中的,那麼建議您選擇 RetePlus 或 Fastpath 運行模式。
當規則操作的不是相同的對象時,我們稱之為異構綁定,當遇到異構綁定時,這些規則的條件部分可能會有不同,例如:
表 1. 異構綁定

Rule1 when{A();B()} …
Rule2 … when{A()} …
Rule3 … when{B()} …

如果您的規則採用了異構綁定,那麼建議您使用 RetePlus 或 Fastpath 運行模式。
當規則操作的對象相同(相同類型相同數量)僅僅是測試條件不同時,我們稱之為同構綁定,例如:
表 2. 同構綁定

Rule1 … when{Person(age == 12);} …
Rule2 … when{Person(age > 20);} …

如果您的規則採用了同構綁定,那麼建議您選擇順序運行模式。
規則執行的影響是什麼?
根據您的規則執行所產生的影響的類型,所選擇的運行模式也各異。
對 Working memory 進行修改
如果規則的執行部分通過使用 IRL insert、retract 或者 update 關鍵字操作 working memory 對象,那麼你必須要使用 RetePlus 運行模式。因為這些關鍵字需要修改 working memory,並期望規則引擎重新評估後續的規則。如果您選擇其他運行模式,規則引擎將不會在工作區修改之後重新評估後續規則。
規則鏈
所謂規則鏈即規則的執行部分將觸發工作區或者參數的更改而且這些規則所匹配的對象本身沒有關聯。
例如有這樣的規則:
金卡客戶訂單超過 5000 元,升級為鑽石客戶
鑽石客戶訂單超過 5000 元,享受 75 折優惠
可以看到這兩個規則之間存在規則鏈,因為它們的模式匹配基於兩個不同的對象——客戶和訂單,並且訂單的多少將導致客戶對象級別的變化。
一般來說,如果您知道您的規則的執行部分將引發其他規則的執行,那麼您應該使用 RetePlus 運行模式。
規則條件中使用什麼類型的測試?
根據您的規則中使用什麼類型的條件,所選擇的運行模式也各異。
測試需要查詢工作區
如果您的規則的條件使用 IRL exist 關鍵字驗證 working memory 中否存在一個對象或使用 collect 關鍵字從工作區中收集一些對象而不提供 from 或 in 在條件的構造中,那麼我們建議您使用 RetePlus 或者 Fastpath 運行模式。
測試條件具有特定規律
如果您的規則的測試條件具有一致的模式或順序,就像決策表所使用的測試,那麼我們建議您使用 Fastpath 運行模式。
如果測試條件的順序沒有規則,則使用 RetePlus 或者順序運行模式。
您的業務規則使用了什麼樣的優先設置?
如果您的規則設置了靜態優先順序,可以使用任何運行模式。然而如果您設置的是動態的優先順序即優先順序被定義成一個表達式,則您只能選擇 RetePlus 運行模式。
小結
您可以參考下表來決定為您的任務選擇運行模式:
表 3. 選擇運行模式

規則任務類型 RetePlus Sequential Fastpath
一致性檢查、校驗 ×
計算型應用 × ×
相關性應用 ×
有狀態型應用 × ×
使用 Working Memory 對象
規則鏈 × ×
對 Working Memory 中的對象進行存在性和集合性測試
測試條件具有一致性 × ×
異構綁定 ×
動態優先順序 × ×
動態規則選擇 ×
大量規則聚合 ×
TOP

在 Rule Studio 中為您的任務設置運行模式
JRules 支持在規則任務級別上設置運行模式,因此,您可以在 Rule Studio 中為規則流中的每一個規則任務指定不同的運行模式,默認情況下,規則任務將採用 Reteplus 模式執行。為規則任務設置運行模式,首先需要代開需要設置的規則任務所在的規則流;選中需要設置的規則任務。
圖 4. 規則流

下載 (9.65 KB)

2010-8-18 14:12

這時在規則任務的屬性窗口中,將可以看到該規則任務所使用的規則執行的演算法,默認是使用 RetePlus,您可以在這裡修改為 Sequential 或者 FastPath。
圖 5. 規則任務屬性

下載 (25.21 KB)

2010-8-18 14:12

結束語
JRules 規則引擎提供了 RetePlus、Sequential 和 FastPath 三種運行模式,以適應不同的應用需求,獲得最優性能。在基於業務規則引擎的應用中,需要根據不同應用的特點,合理地組織和編排業務規則,選擇合適的運行模式,有助於更好的發揮規則引擎的效能。

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營