什么是規則引擎?
- 是一種嵌入在應用程序中的組件,實現了將業務決策從應用程序代碼中分離出來
- 規則引擎的核心就是獲取knowledge(知識)
- 應用knowledge到特定的數據上(fact)
- 使用 “production rules(產生式規則)” IF <conditions> THEN <actions> Rule表達邏輯(任何邏輯都可以用這種方式表達)
什么是規則?
- 一個rule由conditions,和actions組成。當所有的conditions匹配,rule可能“fire” Conditions即LHS(left hand side)
- Actions即RHS(right hand side或者consequence)
- Rule操縱應用程序中的數據( fact )
術語:
- Rule engines(比如Drools)使用正向或者反向鏈(或者混合使用)
- 正向鏈從事實到結論的推理。rule在LHS conditions匹配的時候執行。Actions可以改變facts,並可能導致新rule被fire。
- 反向鏈指則是從假設,即要證明的結論,到事實的推理
推理引擎:
- 規則系統的大腦實際上就是一個推理引擎,用於匹配facts和rules
- 推理引擎將事實、數據與產生式規則進行匹配(模式匹配),以推出結論
- 當匹配被找到,rule actions被fire
- Actions—經常會改變facts的狀態,或者在應用上執行一些“外部”action
正向鏈
何時使用規則引擎
- 當沒有更讓人滿意的“傳統”方案
- 當遇到以下問題:
太復雜
沒有已知的算法
太易變
JBoss Drools
Drools是一個業務邏輯集成平台,基於JAVA和RATE算法的產生式規則引擎實現,是Red Hat旗下的開源產品.
Drools歷史
2001年,Drools問世,基於線性蠻力搜索
在2.0版本后,又基於Rate算法進行了重寫,提高了Drools的性能,規則文件主要以XML為主
在3.0版本,引入了.drl文件格式,它是一種領域特定語言(DSL)專門針對規則編寫
在5.0版本,引入了Drools Funsion/Flow rule等重要功能模塊
Drools組成模塊
總結:
- Rules技術提供了一種新的方式用於創建業務應用系統,通過“聲明式”的rule語言寫業務邏輯,而不是傳統的程序語言
- Rule engine非常適合解決復雜問題,且在沒有更好的其他
- Rule engine非常適合用來表述業務邏輯