什么是規(guī)則引擎

一個業(yè)務規(guī)則包含一組條件和在此條件下執(zhí)行的操作,它們表示業(yè)務規(guī)則應用程序的一段業(yè)務邏輯。業(yè)務規(guī)則通常應該由業(yè)務分析人員和策略管理者開發(fā)和修改,但有些復雜的業(yè)務規(guī)則也可以由技術(shù)人員使用面向?qū)ο蟮募夹g(shù)語言或腳本來定制。業(yè)務規(guī)則的理論基礎是:設置一個或多個條件,當滿足這些條件時會觸發(fā)一個或多個操作。

規(guī)則引擎(rule engine)是指將復雜的業(yè)務邏輯抽象成規(guī)則,然后使用特定的算法(比如Rete)對規(guī)則進行求值等操作。簡單點說,規(guī)則引擎就是實現(xiàn)復雜業(yè)務邏輯的框架。

為什么要用規(guī)則引擎

在維護和更新項目的業(yè)務邏輯代碼時,大家深有體會:

  • 因編碼風格的問題,不同人有不同的代碼實現(xiàn),而造成代碼理解的困難;
  • 每一次業(yè)務邏輯的更改會導致項目的重編譯;
  • 為了能實時響應更改,而不得不做服務重啟服務的無縫銜接

從上面的需求出發(fā),規(guī)則引擎應滿足如下特點:

  • 腳本化,允許用類Python的腳本語言或DSL來描述規(guī)則;
  • 動態(tài)化,實時動態(tài)地加載規(guī)則腳本,規(guī)則的修改能實時地反饋于服務系統(tǒng);
  • 快速的執(zhí)行速度。

2. 實現(xiàn)

已有的開源方案

Drools應該是Java界名頭最響、功能最豐富、社區(qū)最活躍的開源規(guī)則引擎了,目前的版本號為6.5.0.Final。淘寶也開源了自己的一套規(guī)則引擎QLExpress,但是似乎在2011年后項目沒有再維護了。相較于QLExpress,Drools設計一套類DSL的腳本語言,用起來非常爽。但是在我看來,對于特定場景(比如用戶畫像),Drools顯得過于重量級了,而QLExpress設計的API過于Java化了。

Scal