WebSphere ILOG JRules 規則引擎執行模式簡介
簡介: 文章簡要介紹了 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 規則引擎根據規則的不同應用場景和業務規則的特點提供了三種不同的執行模式:RetePlus、Sequential 和 FastPath。
Rete 是目前主流的規則引擎模式匹配演算法,RetePlus 則是 JRules 在 Rete 演算法上的擴充套件和優化,也是 JRules 規則引擎預設的執行模式。RetePlus 執行模式為 ILOG 規則引擎提供了種種手段,用以儘量減少需要加以評估的規則和條件的數量,計算哪些規則應當執行,並確定這些規則的執行順序。在 RetePlus 演算法中,規則引擎使用 Working memory 和 Agenda 來存放和操作應用程式物件。Working memory 中包含的應用程式物件的引用,Agenda 則按順序列出將要執行的規則例項。如圖 1 所示:
RetePlus 模式的執行過程如下:
- 規則引擎依據 Working Memory 中的資料物件來匹配規則集中規則的條件部分。在模式匹配過程中,RetePlus 首先建立出以規則條件測試之間的語義關係為基礎的網路(步驟 1),然後將匹配的規則例項化並新增到 Agenda 中,隨後對 Agenda 中的規則按照一定原則進行排序(步驟 2)。
- 執行 Agenda 中的規則例項,即執行規則的動作(Action)部分。同時,規則例項的執行也會影響 Working Memory 中的資料物件,主要方式有:(步驟 3):
- 往 Working Memory 中加入一個新的物件
- 移除 Working Memory 中現有物件
- 修改現有物件的屬性
- 以上過程將不斷重複,直至執行完 Agenda 中所有規則例項。
在 RetePlus 演算法中每當 Working Memory 被修改,規則引擎將重複模式匹配的過程。它在每次規則執行資料修改後重新評估每個規則匹配。這可能會改變 Agenda 中的規則例項。因此,RetePlus 是漸進的和資料驅動的。這些特點使 RetePlus 在計算和關聯性型別的應用方面擁有卓越的效能。
順序執行模式,顧名思義,即規則引擎按順序執行 rule task 中符合條件的所有規則。如圖 2 所示:
具體執行過程如下:
- 規則引擎根據輸入引數以及 working memory 中的物件集合和規則的條件部分進行匹配。每次匹配都將生成一個規則例項並立即執行。(步驟 1)
- 當規則例項被執行後,它有可能設定屬性或規則集輸出引數的值。(步驟 2)
順序演算法執行的規則是無狀態的。順序演算法的執行就像堆疊一樣,匹配的規則只會執行一次,而不會再次評估。因此在順序模式下,規則中不能使用類似“至少有一個 < 詞彙 >”、“如下物件的數目:< 詞彙 >”等等跟 working memory 中物件有關係的存在性條件(existence conditions),除非這個物件是集合型別。
順序模式的特性決定了其在校驗和一致性等型別的應用中有良好的效能表現。
順序處理可以通過規則任務的演算法屬性來指定,通常可以在 Rule Studio 中顯式的選擇。
Fastpath 執行模式是增強型的順序執行模式,和順序模式類似,Fastpath 也是順序執行,但是它同時還能和 RetePlus 模式一樣在進行模式匹配時檢測規則條件的語義關係。
在 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 執行模式。
當規則操作的不是相同的物件時,我們稱之為異構繫結,當遇到異構繫結時,這些規則的條件部分可能會有不同,例如:
Rule1 | when{A();B()} ... |
---|---|
Rule2 | ... when{A()} ... |
Rule3 | ... when{B()} ... |
如果您的規則採用了異構繫結,那麼建議您使用 RetePlus 或 Fastpath 執行模式。
當規則操作的物件相同(相同型別相同數量)僅僅是測試條件不同時,我們稱之為同構繫結,例如:
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 執行模式。
您可以參考下表來決定為您的任務選擇執行模式:
規則任務型別 | RetePlus | Sequential | Fastpath |
---|---|---|---|
一致性檢查、校驗 | × | √ | √ |
計算型應用 | √ | × | × |
相關性應用 | √ | × | √ |
有狀態型應用 | √ | × | × |
使用 Working Memory 物件 | √ | √ | √ |
規則鏈 | √ | × | × |
對 Working Memory 中的物件進行存在性和集合性測試 | √ | √ | √ |
測試條件具有一致性 | × | × | √ |
異構繫結 | √ | × | √ |
動態優先順序 | √ | × | × |
動態規則選擇 | √ | √ | × |
大量規則聚合 | × | √ | √ |
JRules 支援在規則任務級別上設定執行模式,因此,您可以在 Rule Studio 中為規則流中的每一個規則任務指定不同的執行模式,預設情況下,規則任務將採用 Reteplus 模式執行。為規則任務設定執行模式,首先需要代開需要設定的規則任務所在的規則流;選中需要設定的規則任務。
這時在規則任務的屬性視窗中,將可以看到該規則任務所使用的規則執行的演算法,預設是使用 RetePlus,您可以在這裡修改為 Sequential 或者 FastPath。
JRules 規則引擎提供了 RetePlus、Sequential 和 FastPath 三種執行模式,以適應不同的應用需求,獲得最優效能。在基於業務規則引擎的應用中,需要根據不同應用的特點,合理地組織和編排業務規則,選擇合適的執行模式,有助於更好的發揮規則引擎的效能。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-671384/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Drools規則引擎簡介
- Evrete 規則引擎簡介 | baeldungVR
- 規則引擎模式 - upperdine模式
- Java中最流行的幾種業務規則引擎簡介Java
- Devs--開源規則引擎介紹dev
- drools執行String規則或執行某個規則檔案
- RAP簡介教程&常用規則
- 在Java中用規則引擎模式替代ifelse - VitaliJava模式
- 如何學習Java的規則引擎模式? - plagovJava模式Go
- drools執行完某個規則後終止別的規則執行
- URule規則引擎
- 用 Java 構建簡單的規則引擎Java
- 開放封閉原則與規則引擎設計模式 - devgenius設計模式dev
- 規則引擎模式的.NET開源專案案例模式
- drools執行指定的規則
- 執行緒簡介執行緒
- Dart VM 的相關簡介與執行模式解析Dart模式
- .NET RulesEngine(規則引擎)
- 簡單分析執行緒獲取ReentrantReadWriteLock 讀鎖的規則執行緒
- 通過規則引擎跟蹤Java執行狀態的檢測工具:BytemanJava
- 正規表示式單行、多行模式簡介(使用說明)模式
- TDengine3.0 流式計算引擎語法規則介紹
- 符號執行簡介符號
- 使用DDD規格Specification模式構建資料驅動規則引擎 - jonblankenship模式
- Java規則引擎 Easy RulesJava
- Drools 規則引擎應用
- Java各種規則引擎Java
- 架構 規則引擎 quartz架構quartz
- j-easy/easy-rules: Java簡單的規則引擎Java
- 執行計劃-3:解釋規則
- 決策表模式: 一種業務規則引擎實現方式模式
- 程式和執行緒簡介執行緒
- 規則引擎Golang指南 – Mohit KhareGolang
- 什麼是規則引擎? - martinfowler
- 儲存引擎簡介儲存引擎
- 如何編寫一個簡單但強大的規則引擎? – maxant
- 快速整合和使用 drools 規則引擎
- 全渠道營銷規則引擎案例
- 什麼是業務規則引擎?