本發(fā)明涉及一種互聯(lián)網(wǎng)數(shù)據(jù)審計(jì)方法,尤其是一種針對(duì)實(shí)時(shí)數(shù)據(jù)流的、基于Redis內(nèi)存數(shù)據(jù)庫且支持復(fù)雜邏輯與、或、非的規(guī)則匹配方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)審計(jì)顯得的尤為重要了,國家需要對(duì)互聯(lián)網(wǎng)數(shù)據(jù)進(jìn)行審計(jì),查找數(shù)據(jù)中的特殊或者特定行為,并針對(duì)進(jìn)行相應(yīng)的業(yè)務(wù)處理。
傳統(tǒng)的規(guī)則匹配大致為:
采用AB內(nèi)存隊(duì)列的方式存儲(chǔ)規(guī)則,在實(shí)時(shí)數(shù)據(jù)中進(jìn)行規(guī)則匹配。此種方式能滿足時(shí)效性的要求,但是當(dāng)面對(duì)種類繁多、邏輯運(yùn)算復(fù)雜、類型多變且大規(guī)模的業(yè)務(wù)規(guī)則時(shí),開發(fā)人員很難對(duì)此作出及時(shí)響應(yīng),業(yè)務(wù)人員也無法單獨(dú)進(jìn)行業(yè)務(wù)布署。
綜上所述,互聯(lián)網(wǎng)數(shù)據(jù)審計(jì)實(shí)時(shí)規(guī)則匹配系統(tǒng)需要:
1)實(shí)時(shí)性:面向?qū)崟r(shí)數(shù)據(jù)流;規(guī)則實(shí)時(shí)生效;
2)可擴(kuò)展:能夠由業(yè)務(wù)人員單獨(dú)進(jìn)行規(guī)則的編寫管理;
3)可定制:可支持多個(gè)業(yè)務(wù)系統(tǒng);
4)可靠性:大規(guī)模的數(shù)據(jù)和大規(guī)模的規(guī)則就決定了系統(tǒng)必須要有足夠的穩(wěn)定性和健壯性。
本發(fā)明基于Redis內(nèi)存數(shù)據(jù)庫進(jìn)行處理,所述Redis是一個(gè)開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value 數(shù)據(jù)庫,并提供多種語言的API。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的就在于提供一種滿足上述實(shí)時(shí)互聯(lián)網(wǎng)數(shù)據(jù)審計(jì)系統(tǒng)要求的設(shè)計(jì),保證數(shù)據(jù)的實(shí)時(shí)性,保證規(guī)則可擴(kuò)展、可定制、并且能夠?qū)崟r(shí)更新,保證系統(tǒng)的穩(wěn)定健壯。其技術(shù)方案如下所述:
一種基于Redis內(nèi)存數(shù)據(jù)庫的復(fù)雜規(guī)則匹配方法,包括規(guī)則解析系統(tǒng)、Redis內(nèi)存數(shù)據(jù)庫、規(guī)則匹配系統(tǒng),包括下列步驟:
1)業(yè)務(wù)中心根據(jù)用戶相關(guān)具體業(yè)務(wù)生成業(yè)務(wù)規(guī)則,并將業(yè)務(wù)規(guī)則下發(fā)給規(guī)則中心;
2)所述規(guī)則中心將業(yè)務(wù)中心下發(fā)的業(yè)務(wù)規(guī)則下發(fā)到規(guī)則解析系統(tǒng),并同時(shí)將業(yè)務(wù)規(guī)則存儲(chǔ)到規(guī)則數(shù)據(jù)庫中;
3)所述規(guī)則解析系統(tǒng)接收到規(guī)則中心下發(fā)的業(yè)務(wù)規(guī)則,對(duì)業(yè)務(wù)規(guī)則進(jìn)行解析,形成結(jié)構(gòu)化規(guī)則,并將對(duì)應(yīng)的信息分別存儲(chǔ)到Redis內(nèi)存數(shù)據(jù)庫主庫的規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例中;
4)通過Redis內(nèi)存數(shù)據(jù)庫的主從模式,將主庫更新信息同步到所有規(guī)則匹配系統(tǒng)中;
5)規(guī)則匹配系統(tǒng)集群對(duì)互聯(lián)網(wǎng)審計(jì)數(shù)據(jù)進(jìn)行規(guī)則匹配,并根據(jù)匹配的規(guī)則進(jìn)行相對(duì)應(yīng)操作,同時(shí)輸出對(duì)應(yīng)的業(yè)務(wù)數(shù)據(jù)。
進(jìn)一步的,步驟3)中,所述規(guī)則解析系統(tǒng)解析規(guī)則用可擴(kuò)展xml語言描述,所述規(guī)則的內(nèi)容包括規(guī)則類型,規(guī)則系統(tǒng),規(guī)則ID,規(guī)則邏輯,規(guī)則過濾條件,規(guī)則動(dòng)作,所述解析方法包括新增規(guī)則、修改規(guī)則和刪除規(guī)則,所述新增規(guī)則是直接對(duì)規(guī)則解析,將解析后的規(guī)則關(guān)聯(lián)信息分別插入到Redis內(nèi)存數(shù)據(jù)庫主庫的規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例中;所述修改規(guī)則是根據(jù)解析獲取的規(guī)則ID,在規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例中查找對(duì)應(yīng)的信息進(jìn)行刪除,再將解析后的規(guī)則關(guān)聯(lián)信息分別插入到Redis內(nèi)存數(shù)據(jù)庫主庫的規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí) 例中;所述刪除規(guī)則是根據(jù)解析獲取的規(guī)則ID,在規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例中查找對(duì)應(yīng)的信息進(jìn)行刪除。
進(jìn)一步的,所述Redis內(nèi)存數(shù)據(jù)庫包括規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例,步驟4)中,所述Redis內(nèi)存數(shù)據(jù)庫主庫接收到規(guī)則解析系統(tǒng)解析后的結(jié)構(gòu)化規(guī)則,將規(guī)則信息分別存入Redis內(nèi)存數(shù)據(jù)庫主庫的規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例中;通過Redis的主從模式,自動(dòng)將信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例變化數(shù)據(jù)同步到規(guī)則匹配系統(tǒng)集群中所有Redis從庫中。
進(jìn)一步的,所述規(guī)則信息實(shí)例是以規(guī)則編號(hào)為表名,規(guī)則信息成員變量為索引,規(guī)則信息成員變量值為內(nèi)容;所述索引實(shí)例是以簡單合取式中的單個(gè)條件為表名,以簡單合取式編號(hào)為表中的內(nèi)容;所述規(guī)則ID映射實(shí)例是以拆分出的簡單合取式和需要命中次數(shù)的組合為表名,規(guī)則編碼為表中內(nèi)容。
進(jìn)一步的,步驟5)中的規(guī)則匹配的方法步驟如下所述:
(1)所述規(guī)則匹配系統(tǒng)提取數(shù)據(jù)流中需要進(jìn)行匹配的字段拼接成表名到索引實(shí)例中查詢,取得對(duì)應(yīng)的簡單合取式編號(hào),歸并簡單合取式編號(hào)并記錄命中次數(shù);
(2)拼接簡單合取式編號(hào)和需要命中次數(shù)查詢規(guī)則編號(hào)映射實(shí)例,得到規(guī)則編號(hào);
(3)使用以規(guī)則編號(hào)表名到規(guī)則信息實(shí)例中,取得對(duì)應(yīng)的規(guī)則信息;
(4)從規(guī)則信息成員中取得規(guī)則過濾條件,對(duì)數(shù)據(jù)命中的規(guī)則進(jìn)行過濾,過濾后的規(guī)則即為數(shù)據(jù)命中的最終規(guī)則;
(5)從規(guī)則信息成員中取出規(guī)則動(dòng)作,對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的操作;
(6)通過業(yè)務(wù)系統(tǒng)編號(hào)輸出到對(duì)應(yīng)的業(yè)務(wù)系統(tǒng);
(7)業(yè)務(wù)系統(tǒng)根據(jù)規(guī)則匹配系統(tǒng)輸出過來的數(shù)據(jù)進(jìn)行實(shí)時(shí)告警業(yè)務(wù)操作。
其中,所述Redis內(nèi)存數(shù)據(jù)庫設(shè)置為主從模式,主庫負(fù)責(zé)讀寫操作,從 庫只負(fù)責(zé)讀操作;所述主庫部署在規(guī)則解析系統(tǒng)的服務(wù)器上,從庫部署到規(guī)則匹配系統(tǒng)的服務(wù)器上,以此保證除了Redis內(nèi)存數(shù)據(jù)庫的主從同步外,單個(gè)節(jié)點(diǎn)的Redis內(nèi)存庫操作都為本機(jī)操作,降低Redis內(nèi)存數(shù)據(jù)庫操作的網(wǎng)絡(luò)延時(shí)。
并且,在規(guī)則內(nèi)容中,所述規(guī)則類型是定義規(guī)則執(zhí)行動(dòng)作,包括規(guī)則增加、刪除、更新操作;所述業(yè)務(wù)系統(tǒng)編號(hào)是為了標(biāo)明下發(fā)規(guī)則的業(yè)務(wù)系統(tǒng),本系統(tǒng)支持多個(gè)業(yè)務(wù)系統(tǒng)同時(shí)進(jìn)行規(guī)則匹配;所述規(guī)則編號(hào)是規(guī)則唯一標(biāo)識(shí);所述規(guī)則邏輯是業(yè)務(wù)要處理的邏輯規(guī)則表達(dá)式,支持由與、或、括號(hào)組成的復(fù)雜邏輯表達(dá)式;所述協(xié)議類型編號(hào)是規(guī)則命中數(shù)據(jù)的協(xié)議過濾條件;所述規(guī)則動(dòng)作是描述規(guī)則命中數(shù)據(jù)所要執(zhí)行的操作。
進(jìn)一步的,步驟3)中,所述規(guī)則解析系統(tǒng)收到業(yè)務(wù)中心下發(fā)的業(yè)務(wù)規(guī)則后,對(duì)業(yè)務(wù)規(guī)則進(jìn)行解析,將業(yè)務(wù)規(guī)則拆成析取范式的形式,并給析取范式中拆分出來的每一個(gè)簡單合取式一個(gè)新的編號(hào),同時(shí)記錄每個(gè)簡單合取式的條件個(gè)數(shù)。
本發(fā)明能夠做到1)實(shí)時(shí)性:面向?qū)崟r(shí)數(shù)據(jù)流,規(guī)則實(shí)時(shí)生效;2)可擴(kuò)展:能夠由業(yè)務(wù)人員單獨(dú)進(jìn)行規(guī)則的編寫管理;3)可定制:可支持多個(gè)業(yè)務(wù)系統(tǒng);4)可靠性。能夠滿足需求。
附圖說明
圖1是所述規(guī)則信息實(shí)例的示意圖;
圖2是所述索引實(shí)例的示意圖;
圖3是所述規(guī)則ID映射實(shí)例的示意圖;
圖4是所述Redis內(nèi)存數(shù)據(jù)庫模式的示意圖;
圖5是所述規(guī)則匹配系統(tǒng)設(shè)計(jì)的示意圖;
圖6是本發(fā)明的系統(tǒng)總體結(jié)構(gòu)流程示意圖;
圖7是所述規(guī)則解析的流程示意圖;
圖8是所述Redis內(nèi)存數(shù)據(jù)庫的工作示意圖;
圖9是所述規(guī)則匹配的流程圖。
具體實(shí)施方式
本發(fā)明中主要包含規(guī)則解析系統(tǒng)、Redis內(nèi)存數(shù)據(jù)庫、規(guī)則匹配系統(tǒng)。
所述規(guī)則解析系統(tǒng):對(duì)規(guī)則中心下發(fā)的規(guī)則xml文件進(jìn)行解析;
Redis內(nèi)存數(shù)據(jù)庫:存儲(chǔ)規(guī)則解析系統(tǒng)解析每一個(gè)條規(guī)則的對(duì)應(yīng)關(guān)聯(lián)關(guān)系信息;
規(guī)則匹配系統(tǒng):實(shí)時(shí)數(shù)據(jù)流中的數(shù)據(jù)與規(guī)則進(jìn)行匹配
其中,規(guī)則用可擴(kuò)展xml語言描述,內(nèi)容由規(guī)則類型,規(guī)則系統(tǒng),規(guī)則ID,規(guī)則邏輯,規(guī)則過濾條件,規(guī)則動(dòng)作等部分組成:
1)規(guī)則類型(rule_type):定義規(guī)則執(zhí)行動(dòng)作,包括規(guī)則增加、刪除、更新操作;
2)業(yè)務(wù)系統(tǒng)編號(hào)(rule_systemid):主要為了標(biāo)明下發(fā)規(guī)則的業(yè)務(wù)系統(tǒng),本系統(tǒng)支持多個(gè)業(yè)務(wù)系統(tǒng)同時(shí)進(jìn)行規(guī)則匹配;
3)規(guī)則編號(hào)(ruleid):規(guī)則唯一標(biāo)識(shí);
4)規(guī)則邏輯(rule):業(yè)務(wù)要處理的邏輯規(guī)則表達(dá)式,支持由與、或、括號(hào)組成的復(fù)雜邏輯表達(dá)式;
5)協(xié)議類型編號(hào)(protocol_id):規(guī)則命中數(shù)據(jù)的協(xié)議過濾條件;
6)規(guī)則動(dòng)作(rule_action):描述規(guī)則命中數(shù)據(jù)所要執(zhí)行的操作。
7)規(guī)則解析系統(tǒng)收到業(yè)務(wù)系統(tǒng)下發(fā)的規(guī)則后,對(duì)規(guī)則進(jìn)行解析。將規(guī)則拆成析取范式的形式,并給析取范式中拆分出來的每一個(gè)簡單合取式(subrule)一個(gè)新的編號(hào)(subrule_id),同時(shí)記錄每個(gè)簡單合取式的條件個(gè)數(shù)(hitnum)。
例如:
業(yè)務(wù)系統(tǒng)100,需要在10.11.12.13的IP上,搜索賬號(hào)為“example@163.com”,或者手機(jī)號(hào)碼為“18012345678”的即時(shí)通信協(xié)議,然后單獨(dú)入庫告警。形成的規(guī)則結(jié)構(gòu)應(yīng)為:
rule_type:add
rule_systemid:100
ruleid:10000123(此id由業(yè)務(wù)系統(tǒng)生成的規(guī)則ID,并保證唯一性)
rule:(IP=10.11.12.13)&((username=aa@163.com)|(mobile=18012345678))
protocol_id:協(xié)議類型=即時(shí)通信
rule_action:告警標(biāo)識(shí)=true
析取范式形式:
(IP=10.11.12.13)&((username=aa@163.com)|(mobile=18012345678))
subrule:
subruleA:(IP=10.11.12.13)&(username=aa@163.com)
subrule_idA:11
hitnumA:2
subruleB:(IP=10.11.12.13)&(mobile=18012345678)
subrule_idB:12
hitnumB:2
簡單合取式(sub_subrule):
sub_subrule1:(IP=10.11.12.13)
sub_subrule2:(username=aa@163.com)
sub_subrule3:(mobile=18012345678)
Redis內(nèi)存數(shù)據(jù)庫實(shí)例設(shè)計(jì)如下所述:
本設(shè)計(jì)的Redis單節(jié)點(diǎn)內(nèi)存數(shù)據(jù)庫包括規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例。
規(guī)則信息實(shí)例如圖1所示:
以規(guī)則編號(hào)(ruleid)為表名,規(guī)則信息(ruleinfo)成員變量為key,規(guī)則信息(ruleinfo)成員變量值為內(nèi)容。
索引實(shí)例如圖2所示:
以簡單合取式(sub-subrule)中的單個(gè)條件為表名,以簡單合取式編號(hào)(subrule_id)為表中的內(nèi)容。
規(guī)則ID映射實(shí)例如圖3所示:
以拆分出的簡單合取式(sub-subrule)和需要命中次數(shù)(hitnum)的組合為表名,規(guī)則編碼(ruleid)為表中內(nèi)容。
Redis內(nèi)存數(shù)據(jù)庫模式設(shè)計(jì)是采用Redis的主從模式,如圖4所示,主庫負(fù)責(zé)讀寫操作,從庫只負(fù)責(zé)讀操作。Redis的主從模塊能夠保證主庫的更新能夠快速準(zhǔn)確的同步到從庫上,并且它的增量更新機(jī)制也保證了網(wǎng)絡(luò)資源的不擁堵。
主庫部署在規(guī)則解析系統(tǒng)的服務(wù)器上,從庫部署到規(guī)則匹配系統(tǒng)的服務(wù)器上,以此保證除了Redis內(nèi)存庫的主從同步外,單個(gè)節(jié)點(diǎn)的Redis內(nèi)存庫操作(主庫的更新操作,從庫的查詢操作)都為本機(jī)操作,大大降低Redis庫操作的網(wǎng)絡(luò)延時(shí)。
規(guī)則匹配系統(tǒng)設(shè)計(jì)如圖5所示:
規(guī)則匹配系統(tǒng)接入互聯(lián)網(wǎng)審計(jì)數(shù)據(jù),經(jīng)過解析還原、格轉(zhuǎn)、標(biāo)準(zhǔn)化等處理后形成的結(jié)構(gòu)化數(shù)據(jù)流。
規(guī)則匹配系統(tǒng)提取數(shù)據(jù)流中需要進(jìn)行匹配的字段拼接成表名到索引實(shí)例中查詢,取得對(duì)應(yīng)的簡單合取式編號(hào)(subrule_id),歸并簡單合取式編號(hào)(subrule_id)并記錄命中次數(shù)。
拼接簡單合取式編號(hào)(subrule_id)和需要命中次數(shù)(hitnum)查詢規(guī)則編號(hào)映射實(shí)例,得到規(guī)則編號(hào)(ruleid)。
使用以規(guī)則編號(hào)(ruleid)表名到規(guī)則信息實(shí)例中,取得對(duì)應(yīng)的規(guī)則信息(ruleinfo)。
從規(guī)則信息(ruleinfo)成員中取得規(guī)則過濾條件,對(duì)數(shù)據(jù)命中的規(guī)則進(jìn)行過濾,過濾后的規(guī)則即為數(shù)據(jù)命中的最終規(guī)則。
從規(guī)則信息(ruleinfo)成員中取出規(guī)則動(dòng)作,對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的操作。
通過業(yè)務(wù)系統(tǒng)編號(hào)(rule_systemid)輸出到對(duì)應(yīng)的業(yè)務(wù)系統(tǒng)。
業(yè)務(wù)系統(tǒng)根據(jù)規(guī)則匹配系統(tǒng)輸出過來的數(shù)據(jù)進(jìn)行實(shí)時(shí)告警等其他業(yè)務(wù)操作。
本發(fā)明的流程如圖6所示:
1)由業(yè)務(wù)中心,根據(jù)用戶相關(guān)具體業(yè)務(wù),生成規(guī)則,并下發(fā)給規(guī)則中心;
2)規(guī)則中心,將業(yè)務(wù)中心下發(fā)的業(yè)務(wù)規(guī)則,下發(fā)到規(guī)則解析系統(tǒng),并同時(shí)將業(yè)務(wù)規(guī)則存儲(chǔ)到規(guī)則數(shù)據(jù)庫中;
3)規(guī)則解析系統(tǒng)接收到規(guī)則中的下發(fā)的規(guī)則,對(duì)規(guī)則進(jìn)行解析,形成結(jié)構(gòu)化規(guī)則,并將對(duì)應(yīng)的信息分別存儲(chǔ)到Redis主庫的規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例中;
4)通過Redis內(nèi)存數(shù)據(jù)庫的主從模式,將主庫更新信息同步到所有規(guī)則匹配系統(tǒng)中;
5)規(guī)則匹配系統(tǒng)集群,對(duì)互聯(lián)網(wǎng)審計(jì)數(shù)據(jù)進(jìn)行規(guī)則匹配,并根據(jù)匹配的規(guī)則進(jìn)行相對(duì)應(yīng)操作,同時(shí)輸出對(duì)應(yīng)的業(yè)務(wù)數(shù)據(jù)。
其中,規(guī)則解析如圖7所示:
1)新增規(guī)則(add):
直接對(duì)規(guī)則解析,將解析后的規(guī)則關(guān)聯(lián)信息分別插入到Redis主庫的規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例中。
2)修改規(guī)則(mod):
根據(jù)解析獲取的規(guī)則ID,在規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例中查找對(duì)應(yīng)的信息進(jìn)行刪除;
再將解析后的規(guī)則關(guān)聯(lián)信息分別插入到Redis主庫的規(guī)則信息實(shí)例、索 引實(shí)例、規(guī)則ID映射實(shí)例中。
3)刪除規(guī)則(del):
根據(jù)解析獲取的規(guī)則ID,在規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例中查找對(duì)應(yīng)的信息進(jìn)行刪除。
如圖8所示,所述Redis內(nèi)存數(shù)據(jù)庫包括主庫和從庫:
Redis主庫接收到規(guī)則解析系統(tǒng)解析后的結(jié)構(gòu)化規(guī)則,將規(guī)則信息分別存入Redis主庫的規(guī)則信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例中;
通過Redis的主從模式,自動(dòng)將信息實(shí)例、索引實(shí)例、規(guī)則ID映射實(shí)例變化數(shù)據(jù)同步到規(guī)則匹配系統(tǒng)集群中所有Redis從庫中。
規(guī)則匹配如圖9所示:
1)對(duì)結(jié)構(gòu)化字段進(jìn)行提取,將字段編碼和字段內(nèi)容進(jìn)行拼接,已拼接后的內(nèi)容為表名,在索引實(shí)例查詢,獲取subrule_id;
2)歸并subrule_id,并記錄每一個(gè)subrule_id的需要命中次數(shù);
3)以subrule_id#hitnum為表名,在規(guī)則ID映射實(shí)例中查詢,獲取ruleid;
4)以ruleid為表名,在規(guī)則信息實(shí)例中查詢,獲取ruleinfo信息;
5)根據(jù)ruleinfo信息,對(duì)數(shù)據(jù)進(jìn)行相對(duì)應(yīng)的處理操作。
本發(fā)明中,對(duì)于相關(guān)的涉及參數(shù),描述如下:
本發(fā)明能夠做到1)實(shí)時(shí)性:面向?qū)崟r(shí)數(shù)據(jù)流,規(guī)則實(shí)時(shí)生效;2)可擴(kuò)展:能夠由業(yè)務(wù)人員單獨(dú)進(jìn)行規(guī)則的編寫管理;3)可定制:可支持多個(gè)業(yè)務(wù)系統(tǒng);4)可靠性。能夠滿足需求。