張?zhí)煨?/p>
(福建船政交通職業(yè)學院 信息工程學院,福建 福州350101)
目前,高校普遍實現(xiàn)數(shù)字化校園管理,隨著各種數(shù)字管理業(yè)務的增多,其延伸的CRM 系統(tǒng)涉及的業(yè)務規(guī)則也越來越紛繁復雜,為了制定比較通用的CRM 業(yè)務規(guī)則模型,需要對CRM 業(yè)務規(guī)則進行全面的分析,以便設計的業(yè)務規(guī)則模型能夠適應CRM 業(yè)務規(guī)則的特點[1].基于Drools規(guī)則引擎技術(shù)的出現(xiàn),對數(shù)字化校園管理CRM 系統(tǒng)的發(fā)展有很大幫助,因為引入規(guī)則引擎技術(shù)可以縮短需求開發(fā)周期,快速響應系統(tǒng)業(yè)務邏輯的變化[2].雖然引入規(guī)則引擎有這個好處,但對CRM 系統(tǒng)而言,并不是現(xiàn)有的規(guī)則引擎產(chǎn)品都是拿來就可以直接應用的,由于CRM 系統(tǒng)有其自身的特點,因此有必要根據(jù)數(shù)字化校園管理CRM 系統(tǒng)的特點設計一套滿足CRM 需求的業(yè)務規(guī)則引擎,以能更好的發(fā)揮規(guī)則引擎的作用,并能運用到實際生產(chǎn)中.
(1)對于有一定規(guī)律性、規(guī)律穩(wěn)定,且大量出現(xiàn)的業(yè)務規(guī)則,歸納其共同規(guī)律進行固化建模,并在系統(tǒng)中固化規(guī)則觸發(fā)點、判斷邏輯及處理邏輯,然后通過數(shù)據(jù)驅(qū)動.比如:教學信息管理、學生信息管理、教材管理、畢業(yè)檔案管理等.
(2)對于個性化、出現(xiàn)頻度不高的業(yè)務規(guī)則,大多數(shù)是通過一段固化代碼加部分參數(shù)化配置實現(xiàn).但由于個性化業(yè)務規(guī)則總量大、易變性等特點,很容易導致規(guī)則代碼膨脹、代碼重寫率高、系統(tǒng)性能下降,增加了系統(tǒng)維護的成本且無法滿足需求快速支撐的要求,也降低了系統(tǒng)的易用性.
針對上述兩種實現(xiàn)方式,第一種方式目前已較成熟,且具有效率高、代碼穩(wěn)定等優(yōu)點,但分散的配置缺乏一個統(tǒng)一的規(guī)則視圖.第二種方式是目前規(guī)則管理的問題焦點,對于這部分業(yè)務規(guī)則的管理目前業(yè)界已呈現(xiàn)了部分規(guī)則引擎[3],如:IBM ILOG、Jboss Drools等,但對于規(guī)則引擎如何與CRM 系統(tǒng)結(jié)合,建立行之有效的CRM 業(yè)務規(guī)則引擎是本文重點考慮的內(nèi)容.
(1)如何滿足多樣化、個性化的條件組合要求.針對這個問題需要引入業(yè)務規(guī)則語言以及技術(shù)規(guī)則語言等定義來解決規(guī)則組合復雜問題,本文采用Drools所帶的規(guī)則語言來定義規(guī)則.
(2)規(guī)則條件和規(guī)則操作中引用的業(yè)務領域?qū)ο髷?shù)據(jù)如何獲取和操作.針對這個問題需引入元模型管理,以使CRM 系統(tǒng)對自身業(yè)務對象有個自我認知的能力.目前CRM 各個功能都已經(jīng)定義了形式化、通用化的信息結(jié)構(gòu)圖,如學生選課管理已經(jīng)定義了選課信息結(jié)構(gòu)圖(SaleInfo Schema),因此本次規(guī)則管理的訂單元模型直接以訂單提交的接口協(xié)議作為規(guī)則輸入元模型,以實現(xiàn)規(guī)則處理過程訂單信息的動態(tài)訪問能力.
(3)如何滿足不同的規(guī)則處理的動作要求,如界面提示、中斷當前流程、改變當前流程,特別是業(yè)務規(guī)則如何與界面操作銜接問題.本文的設計思路是規(guī)則引擎根據(jù)規(guī)則配置和業(yè)務對象元模型數(shù)據(jù)計算出需界面調(diào)用的規(guī)則邏輯,界面應用在關鍵點植入規(guī)則代碼調(diào)用邏輯.如:客戶對象屬性取值約束,在客戶對象的業(yè)務元數(shù)據(jù)上配置客戶各屬性的取值約束規(guī)則,客戶保存時將客戶信息傳給規(guī)則引擎判斷,規(guī)則引擎處理后輸出相關界面操作信息,然后由前臺根據(jù)返回的信息觸發(fā)調(diào)用.該問題的關鍵點在于規(guī)則引擎需要統(tǒng)一規(guī)范前臺規(guī)則處理標準,前臺應用按標準植入相關調(diào)用代碼.
基于以上關鍵問題的考慮,本文提出一個應用于CRM 系統(tǒng)中使用Java語言實現(xiàn)的CRM 業(yè)務規(guī)則引擎架構(gòu),如圖1所示.
圖1 CRM業(yè)務規(guī)則引擎架構(gòu)Fig. 1 Engine Architecture of CRM Operation Rules
一個比較完整的CRM 業(yè)務規(guī)則引擎是由規(guī)則管理器、規(guī)則執(zhí)行管理器、規(guī)則處理器、規(guī)則庫、參考數(shù)據(jù)接口共同協(xié)作構(gòu)架而成[4].
規(guī)則管理器負責對規(guī)則的管理和維護.規(guī)則執(zhí)行管理器負責根據(jù)當前事件及相關條件提取出規(guī)則集以及業(yè)務事實提供給規(guī)則處理器.規(guī)則處理器負責實現(xiàn)規(guī)則判斷功能.參考數(shù)據(jù)接口則是給規(guī)則處理器調(diào)用,負責提供在規(guī)則判斷過程中所需要的外部數(shù)據(jù)信息.
2.2.1 業(yè)務規(guī)則管理器
業(yè)務規(guī)則管理器主要是對規(guī)則進行維護,并提供規(guī)則的讀寫、更新、查詢等功能.在系統(tǒng)中主要由規(guī)則事件管理、規(guī)則目錄管理、業(yè)務規(guī)則管理三個功能實現(xiàn).
規(guī)則事件管理需要支持規(guī)則事件的增加、刪除、修改和查詢,同時支持配置規(guī)則事件關聯(lián)的條件參數(shù).規(guī)則事件必須包含規(guī)則事件標識、規(guī)則事件名稱等基本信息.
規(guī)則目錄管理是具有多個層級的業(yè)務規(guī)則的列表之間的管理,中國數(shù)字化校園管理內(nèi)部能夠通過此列表,管理所有的業(yè)務規(guī)則.規(guī)則目錄管理需要支持業(yè)務規(guī)則目錄的增加、更新和刪除,支持多層級的業(yè)務規(guī)則目錄,即第1級目錄下可以包含第2級目錄,能夠為不同的業(yè)務目的編制不同的業(yè)務規(guī)則目錄.
業(yè)務規(guī)則配置管理需要支持業(yè)務規(guī)則的增加、刪除和修改,支持業(yè)務規(guī)則關聯(lián)條件的增加、刪除和修改,支持根據(jù)各種條件查詢業(yè)務規(guī)則.業(yè)務規(guī)則配置必須包含規(guī)則標識、規(guī)則名稱、規(guī)則描述、規(guī)則類型、狀態(tài)、創(chuàng)建時間、創(chuàng)建人等基本信息.
2.2.2 規(guī)則執(zhí)行管理器
規(guī)則執(zhí)行管理器在架構(gòu)中的作用主要是實現(xiàn)在CRM 應用和規(guī)則處理器之間進行通信,當業(yè)務流程中的某一環(huán)節(jié)需要進行規(guī)則判斷時,應用程序調(diào)用規(guī)則執(zhí)行管理模塊提供的接口,傳入當前環(huán)節(jié)相應的信息及業(yè)務數(shù)據(jù)信息,然后規(guī)則執(zhí)行管理器根據(jù)當前事件及相關條件對應查詢出需要判斷的規(guī)則列表,將規(guī)則列表及業(yè)務事實傳給規(guī)則處理器,由規(guī)則處理器進行規(guī)則判斷,最后將規(guī)則處理器的處理結(jié)果返回給應用系統(tǒng),由應用系統(tǒng)根據(jù)處理結(jié)果作進一步的處理.
2.2.3 規(guī)則處理器
規(guī)則處理器是CRM 業(yè)務規(guī)則引擎的核心,主要實現(xiàn)根據(jù)業(yè)務事實對規(guī)則進行推理,選出可執(zhí)行的規(guī)則,根據(jù)優(yōu)先級按順序執(zhí)行.對于此功能的實現(xiàn),一種是自行從頭開發(fā),但自行開發(fā)不但耗費時間,而且系統(tǒng)性能不一定比目前已有的、商用的或開源的規(guī)則引擎產(chǎn)品來的高,因此本文考慮基于已有的規(guī)則引擎產(chǎn)品來實現(xiàn)規(guī)則處理器功能,所以如何選擇一個合適的規(guī)則引擎產(chǎn)品既能夠能根據(jù)CRM 系統(tǒng)特點進行二次改造,又能夠滿足CRM 系統(tǒng)性能要求是首要考慮的問題.經(jīng)過綜合考慮分析,對規(guī)則引擎選型,本系統(tǒng)選擇Drools規(guī)則引擎來實現(xiàn)規(guī)則處理器功能,處理流程如圖2所示.
圖2 規(guī)則處理器處理流程Fig. 2 Treatment Procedure of Rule Processor
規(guī)則處理器的執(zhí)行入口為工作內(nèi)存,以事實為出發(fā)點,通過模式匹配算法在規(guī)則庫中尋找出相對于事實條件為真的規(guī)則來執(zhí)行,如果有多條規(guī)則滿足條件,則將這些規(guī)則放入沖突集,運用沖突解決機制加以處理.
為了能與CRM 系統(tǒng)的系統(tǒng)流程以及界面操作銜接,規(guī)則處理器在進行規(guī)則處理時,除了支持修改業(yè)務對象信息外,處理結(jié)果還需要支持以下幾種方式:
(1)要求界面彈出錯誤信息,限制受理;
(2)要求界面彈出提示信息,可繼續(xù)受理;
(3)對頁面上的控件進行置灰、隱藏、替換名稱;
(4)彈出問答信息,由管理員選擇選項之后再進行下一步處理.支持的下一步處理需要有:限制受理、繼續(xù)受理和調(diào)用另一個規(guī)則進行處理.
當事實對象進入工作內(nèi)存時,可能會匹配到很多規(guī)則,如果這些規(guī)則之間存在沖突,則需要按順序執(zhí)行,因為規(guī)則不同的執(zhí)行順序可能會產(chǎn)生不同的執(zhí)行結(jié)果.
本系統(tǒng)采用Drools所帶的優(yōu)先級策略來解決此問題,在Drools Rules中可以給每條規(guī)則定義一個salience屬性,取值為整數(shù)值,正負均可,默認值為0,取值越大,表示這條規(guī)則的優(yōu)先級越高.優(yōu)先級策略就是根據(jù)每條規(guī)則的salience屬性取值來決定沖突規(guī)則集中每一條規(guī)則的執(zhí)行順序,即當多條規(guī)則同時符合要求時,salience設定的值越高,表示規(guī)則優(yōu)先級越高,此規(guī)則就優(yōu)先被觸發(fā)執(zhí)行.
對于數(shù)字化校園管理CRM 系統(tǒng)來說,由于數(shù)字化校園管理業(yè)務相當復雜,需要運行的業(yè)務規(guī)則相當多,而且系統(tǒng)實時性要求高,因此引入業(yè)務規(guī)則引擎后,系統(tǒng)的性能情況相當重要,不能因為提高了開發(fā)速度而減少了維護代價,卻使系統(tǒng)的性能大幅度下降,這是數(shù)字化校園管理系統(tǒng)所不允許的.
本文除了通過業(yè)務規(guī)則模型的設計,使得在調(diào)用規(guī)則引擎時能夠方便快速的查詢出與當前規(guī)則事件及相應條件有關聯(lián)的規(guī)則,從而只將需要判斷的規(guī)則送到規(guī)則引擎判斷,而不是將系統(tǒng)所有的規(guī)則都給規(guī)則引擎去過濾和判斷,以此來提高規(guī)則引擎的工作效率,同時本文還考慮采用一些機制來輔助提高CRM業(yè)務規(guī)則引擎的性能.
(1)采用緩存機制以提高規(guī)則處理速度.由于數(shù)字化校園管理業(yè)務規(guī)則眾多,因此在每個規(guī)則判斷時,規(guī)則執(zhí)行管理模塊都需要從數(shù)據(jù)庫中提取規(guī)則文件包,然后再送給規(guī)則引擎進行預編譯,然后再執(zhí)行,其效率就會低很多.因此本系統(tǒng)考慮在CRM 系統(tǒng)加載時就將規(guī)則庫中的規(guī)則文件先進行預編譯,然后將預編譯的規(guī)則信息存儲到系統(tǒng)緩存中,在規(guī)則判斷時,規(guī)則處理器先從緩存中讀取規(guī)則集,如果緩存中讀取不到,則再從數(shù)據(jù)庫中讀取.
(2)通過構(gòu)建外部參考數(shù)據(jù)操作框架以減少規(guī)則判斷時的內(nèi)存損耗.Drools所使用的Rete算法是以空間代價換取執(zhí)行效率的,事實將在工作內(nèi)存中存儲起來,如果有的在規(guī)則判斷時依據(jù)的事實非常多,比如有一個學生選課業(yè)務規(guī)則:“某個學生要求加入某個教師開設的課程時,要判斷此課程已選學生數(shù)據(jù)是否已經(jīng)超過該課程最大選課人數(shù),如果超過,則不能加入”.此時規(guī)則判斷的事實依據(jù)是選這門課的所有學生對象,如果將所有的事實都加載到工作內(nèi)存中進行規(guī)則判斷,則此時應用服務器的內(nèi)存消耗將非常大,系統(tǒng)性能將直接下降.圖3是規(guī)則引擎引用外部參考數(shù)據(jù)進行規(guī)則處理的原理圖.
圖3 規(guī)則引擎引用外部參考數(shù)據(jù)進行規(guī)則處理的原理圖Fig. 3 Principle Diagram of Engine’s Rule Processing with external referential data
因此規(guī)則引擎需要支持既可以處理來自于應用程序的普通Java對象,也可以在規(guī)則推理時提取外部的數(shù)據(jù)加入到工作事實中,以提高規(guī)則處理性能.如上述例子,在系統(tǒng)調(diào)用規(guī)則引擎判斷時,只要傳入當前該課程所選課學生信息以及該課程的最大學生數(shù),而在規(guī)則推理時提取此課程目前已經(jīng)加入的學生總數(shù),這樣加載到內(nèi)存的事實就不會很多,同時規(guī)則判斷時的內(nèi)存消耗量也就不會很大.
[1]方芳,劉大有,王新華,等.電信CRM 技術(shù)發(fā)展研究[J].計算機工程,2010,36(5):277-281.
[2]李靜.業(yè)務規(guī)則管理技術(shù)的研究與應用[D].上海:華東師范大學,2007.
[3]郭曉峰.規(guī)則引擎在新型農(nóng)村合作醫(yī)療系統(tǒng)中的應用研究[D].上海:東華大學,2008.
[4]郭芳,白建軍.基于Rete算法的規(guī)則引擎JBoss Rules[J].計算機時代,2008(1):8-10.