天天看點

規則引擎

我是阿裡巴巴做規則引擎相關工作多年的java工程師一枚,本職工作就是通過規則引擎、規則管理平台等技術輸出,來應對阿裡巴巴複雜多變的上層規則相關業務的支援。

限于技術保密、安全等因素,本文隻講一些個人對“規則引擎”的看法,歡迎大家一起探讨。

總體來說,要搞清楚“規則引擎”,需要很好的回答以下幾個問題。

1、“規則引擎”的實際用途和價值

2、“規則引擎”的一般實作方式

3、“規則引擎”發展的一些坎坷

一、“規則引擎”的實際用途和價值

規則引擎和流程引擎一起,是使用在大規模複雜業務場景下必備的業務架構技術,使用這兩門技術搭建起來的系統能夠很好的梳理清楚業務邏輯,并且友善快速的修改業務邏輯,甚至可以做到需求的實時生效。

1、案例分析:

規則引擎

hard code的代價非常大,随着業務的膨脹會使開發人員和規則需求方非常的疲憊。

規則引擎

然而,“規則引擎”技術的運用會使整個業務發生很大變化。

規則引擎

從上面的案例可以看出,規則引擎最大的價值就在于通過以下的三個過程,大大的緩解了頻繁的需求變化給整個業務系統帶來的災難。

  • a、逼迫系統開發人員和業務專家梳理業務,定義統一的BOM(業務對象模型)。
  • b、業務專家可以快速的制定修改規則,然後交由規則引擎自動化地來處理分析。
  • c、規則引擎代替系統開發人員,解決由規則條件關關聯作變化帶來的開發工作。

二、“規則引擎”的一般實作方式

一套規則引擎總體就是要做到以下的目标:

建立規則語言标準,動态編輯,自動化執行。
           

很多業務系統一般會使用某種腳本語言來實作,比如groovy,jruby,javascript,原因很簡單單,因為腳本語言本質上可以解決變量識别和自動運作的問題,而且擴充性強,表達能力強,動态部署生效。

另外,其他比如決策表等類似excel的輸入,form表單的配置化 也可以轉化為腳本語言。

三、“規則引擎”發展的一些坎坷

1、規則管理的複雜性:

a、優先級問題:比如你買了50塊錢的東西,有滿30減10,滿50減20,系統會優先使用哪個規則呢?

b、沖突問題:假設有10條相關的法律規定,傷害緻人死亡,會有可能判死刑。然後《未成年人保護法》規定,未滿18周歲,不能判處死刑。這種情況下,系統對未成年人的殺人罪該如何判定呢?

c、規則清單的選擇問題:很多時候,這可能隻是個規則管理的業務模型問題,但是如何設計出一套足夠應對所有的業務場景的模型還是非常難的。

2、面向營運人員的規則的頁面配置化

a、通過一套通用的form表單來配置規則,産生規則腳本。

最佳的實踐可能是采用 表單--------->json,xml格式化資料--------->規則腳本,這樣可以很好的分離配置界面和腳本的強耦合關系,友善以後的維護。

3、規則運作效率的問題

如果你google下“規則引擎”,一般會有關于JSR94 和rete算法的介紹。

https://www.ibm.com/developerworks/cn/java/j-java-rules/
規則引擎

本質上,“專家決策系統規則引擎模型”和rate算法,解決的是大量重複的condition比對效率的問題,以及規則沖突規範的問題,和腳本的性能比較不在同一個層面上。

具體,大家可以看看開源規則引擎:drools的實作方式。

當然,實際業務場景并不一定适合這套比價重量級的規則模型,會遇到學習成本高,靈活性差,rate算法不能發揮優勢反而初始化成本很高的問題。

以上是個人結合工作實踐,将一些個人對“規則引擎”的看法。

本人在阿裡巴巴長期擔任和負責規則引擎、流程引擎相關的技術開發,并且這方面也相當的缺乏人才。

這個是我們底層腳本引擎的開源項目:

https://github.com/alibaba/QLExpress

歡迎對這方面感興趣的人聯系我哦。

微信: 371754252

email: [email protected]

原文第一版發表于知乎專欄

https://zhuanlan.zhihu.com/p/28487660