開源規(guī)則引擎
開源的規(guī)則引擎整體分為下面幾類:
-
通過界面配置的成熟規(guī)則引擎,這種規(guī)則引擎相對來說就比較重,但功能全,比較出名的有:drools, urule。
-
基于jvm腳本語言,互聯(lián)網(wǎng)公司會覺得drools太重了,然后會基于一些jvm的腳本語言自己開發(fā)一個輕量級的規(guī)則引擎,比較出名的有,groovy(開源風(fēng)控radar),aviator,qlexpress。
-
基于java代碼的規(guī)則引擎:基于jvm腳本語言會有一些語法學(xué)習(xí)的成本,所以就有基于java代碼去做的規(guī)則引擎,比如通過一些注解實現(xiàn)抽象的方式去做到規(guī)則的擴(kuò)展,比較出名的有: easy rules。
這邊重點介紹三款產(chǎn)品drools、qlexpress和groovy,先介紹下基礎(chǔ)能力和優(yōu)劣勢,后面再進(jìn)行詳解。
Drools
drools是一款由JBoss組織提供的基于Java語言開發(fā)的開源規(guī)則引擎,可以將復(fù)雜且多變的業(yè)務(wù)規(guī)則從硬編碼中解放出來,以規(guī)則腳本的形式存放在文件或特定的存儲介質(zhì)中(例如存放在數(shù)據(jù)庫中),使得業(yè)務(wù)規(guī)則的變更不需要修改項目代碼、重啟服務(wù)器就可以在線上環(huán)境立即生效。
drools官網(wǎng)地址:https://drools.org/
drools源碼下載地址:https://github.com/kiegroup/drools
在項目中使用drools時,即可以單獨使用也可以整合spring使用。如果單獨使用只需要導(dǎo)入如下maven坐標(biāo)即可:
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>7.6.0.Final</version>
</dependency>
如果我們使用IDEA開發(fā)drools應(yīng)用,IDEA中已經(jīng)集成了drools插件。如果使用eclipse開發(fā)drools應(yīng)用還需要單獨安裝drools插件。
drools API開發(fā)步驟如下:
Groovy
Groovy是用于Java虛擬機(jī)的一種敏捷的動態(tài)語言,它是一種成熟的面向?qū)ο缶幊陶Z言,既可以用于面向?qū)ο缶幊?,又可以用作純粹的腳本語言。使用該種語言不必編寫過多的代碼,同時又具有閉包和動態(tài)語言中的其他特性。
Groovy是從Java衍生出來的,并且運(yùn)行在Java虛擬機(jī)上的語言.其目標(biāo)是不管作為腳本語言,還是編程語言,都可以簡單、直接使用。Groovy 也并不會替代 Java,而是相輔相成、互補(bǔ)的關(guān)系,具體使用哪門語言這取決于要解決的問題和使用的場景。
QLExpression
由阿里的電商業(yè)務(wù)規(guī)則、表達(dá)式(布爾組合)、特殊數(shù)學(xué)公式計算(高精度)、語法分析、腳本二次定制等強(qiáng)需求而設(shè)計的一門動態(tài)腳本引擎解析工具。
在阿里集團(tuán)有很強(qiáng)的影響力,同時為了自身不斷優(yōu)化、發(fā)揚(yáng)開源貢獻(xiàn)精神,于2012年開源。
QLExpress腳本引擎被廣泛應(yīng)用在阿里的電商業(yè)務(wù)場景,具有以下的一些特性:
1、線程安全,引擎運(yùn)算過程中的產(chǎn)生的臨時變量都是threadlocal類型。
2、高效執(zhí)行,比較耗時的腳本編譯過程可以緩存在本地機(jī)器,運(yùn)行時的臨時變量創(chuàng)建采用了緩沖池的技術(shù),和groovy性能相當(dāng)。
3、弱類型腳本語言,和groovy,javascript語法類似,雖然比強(qiáng)類型腳本語言要慢一些,但是使業(yè)務(wù)的靈活度大大增強(qiáng)。
4、安全控制,可以通過設(shè)置相關(guān)運(yùn)行參數(shù),預(yù)防死循環(huán)、高危系統(tǒng)api調(diào)用等情況。
5、代碼精簡,依賴最小,250k的jar包適合所有java的運(yùn)行環(huán)境,在android系統(tǒng)的低端pos機(jī)也得到廣泛運(yùn)用。
規(guī)則引擎對比
常見能力對比如下:
規(guī)則引擎 | QLExpression (ms) | groovy(ms) | drools(ms) |
---|---|---|---|
動態(tài)規(guī)則 | 支持 | 支持 | 支持 |
靈活性 | 低 | 高 | 中 |
復(fù)雜度 | 低 | 高 | 中 |
上手 | 快 | 慢 | 慢 |
使用廣度 | 中 | 中 | 高 |
執(zhí)行性能對比如下:文章來源:http://www.zghlxwxcb.cn/news/detail-767551.html
執(zhí)行次數(shù)\規(guī)則引擎 | QLExpression (ms) | groovy(ms) | drools(ms) |
---|---|---|---|
100w | 1590 | 171 | 364 |
1000w | 12551 | 709 | 3530 |
5000w | 60230 | 3516 | 19414 |
三種規(guī)則引擎都支持動態(tài)規(guī)則,可以通過提供的api動態(tài)擴(kuò)展規(guī)則文章來源地址http://www.zghlxwxcb.cn/news/detail-767551.html
- 靈活性上看groovy和drools支持腳本編寫方式,市面上有常見的包裝方案;
- 其中QLExpression在中小企業(yè)應(yīng)用較廣泛對熟悉java的選手來說基本開箱即用;
- groovy和drools作為規(guī)則引擎在互聯(lián)網(wǎng)企業(yè)應(yīng)用較多,有一定的學(xué)習(xí)和培訓(xùn)成本;
- drools追隨者更多適用面積更廣泛;
到了這里,關(guān)于規(guī)則引擎專題---2、開源規(guī)則引擎對比的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!