一種基于網(wǎng)絡(luò)數(shù)據(jù)的通用查詢系統(tǒng)及查詢方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于網(wǎng)絡(luò)數(shù)據(jù)的通用查詢系統(tǒng)及查詢方法,特別是涉及一種適用于提供海量網(wǎng)絡(luò)數(shù)據(jù)查詢服務(wù)和檢索服務(wù)的,基于網(wǎng)絡(luò)數(shù)據(jù)的通用查詢系統(tǒng)及查詢方法。
【背景技術(shù)】
[0002]網(wǎng)絡(luò)流量分析系統(tǒng)主要針對(duì)的是海量的數(shù)據(jù),其步驟是采集,分析,存儲(chǔ)。能夠準(zhǔn)確,快速的從海量的存儲(chǔ)中檢索數(shù)據(jù),并能夠快速的將數(shù)據(jù)返回給查詢終端,是系統(tǒng)的核心功能。
[0003]傳統(tǒng)的分析方法主要通過(guò)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ),查詢模塊采用結(jié)構(gòu)化語(yǔ)言進(jìn)行查詢。其存儲(chǔ)效率低,查詢速度慢,且系統(tǒng)支持的網(wǎng)絡(luò)流量也十分偏低,系統(tǒng)瓶頸十分明顯。
[0004]傳統(tǒng)的數(shù)據(jù)采集系統(tǒng),采用客戶端+服務(wù)器的模式。數(shù)據(jù)庫(kù)采用單服務(wù)器或集群模式。服務(wù)器采用數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ),查詢采用結(jié)構(gòu)化語(yǔ)言進(jìn)行查詢。查詢模塊通過(guò)在數(shù)據(jù)庫(kù)生成若干個(gè)表和表字段,根據(jù)分析的網(wǎng)絡(luò)流量,將最新的統(tǒng)計(jì)數(shù)據(jù)更新到數(shù)據(jù)庫(kù)中。如果需要保存歷史數(shù)據(jù),隨著分析的時(shí)間越來(lái)越長(zhǎng),數(shù)據(jù)表的記錄會(huì)呈現(xiàn)指數(shù)級(jí)的增長(zhǎng)。
[0005]傳統(tǒng)的數(shù)據(jù)采集系統(tǒng),查詢歷史數(shù)據(jù)需要存儲(chǔ)歷史數(shù)據(jù),存儲(chǔ)歷史數(shù)據(jù)需要保存每秒的統(tǒng)計(jì)數(shù)據(jù),這樣,分析的時(shí)間越久,表的記錄越多。假如系統(tǒng)每秒能夠分析20萬(wàn)條會(huì)話,那么一天的記錄將達(dá)到17.28億條,一周的記錄將達(dá)到120.96億條,時(shí)間越長(zhǎng),記錄越大,且記錄數(shù)更是一個(gè)天文數(shù)字。這對(duì)于無(wú)論是關(guān)系數(shù)據(jù)庫(kù)還是非關(guān)系數(shù)據(jù)庫(kù)都是難以完成的任務(wù)。
[0006]傳統(tǒng)的數(shù)據(jù)采集系統(tǒng),數(shù)據(jù)庫(kù)的成本非常昂貴,抬高了整個(gè)系統(tǒng)的成本,同時(shí),分析服務(wù)器和數(shù)據(jù)庫(kù)之間的帶寬成為系統(tǒng)的主要瓶頸;并且,只能查詢到最新的統(tǒng)計(jì)數(shù)據(jù),不能查看歷史的統(tǒng)計(jì)數(shù)據(jù),即使支持查詢歷史,也會(huì)導(dǎo)致在分析時(shí)間,分析流量的等級(jí)上會(huì)大幅度下降。
【發(fā)明內(nèi)容】
[0007]本發(fā)明要解決的技術(shù)問(wèn)題是提供一種采集,分析,存儲(chǔ)海量數(shù)據(jù),針對(duì)多個(gè)查詢終端的數(shù)據(jù)查詢或檢索請(qǐng)求,系統(tǒng)能夠快速,準(zhǔn)確,均衡的將數(shù)據(jù)返回給查詢終端想要檢索的數(shù)據(jù)的,基于網(wǎng)絡(luò)數(shù)據(jù)的通用查詢系統(tǒng)及查詢方法。
[0008]本發(fā)明采用的技術(shù)方案如下:一種基于網(wǎng)絡(luò)數(shù)據(jù)的通用查詢系統(tǒng),其特征在于:包括分析服務(wù)器;所述分析服務(wù)器包括,
采集網(wǎng)絡(luò)所有出口數(shù)據(jù)的數(shù)據(jù)流采集模塊;
對(duì)數(shù)據(jù)包進(jìn)行分析的分析模塊;
對(duì)分析后的數(shù)據(jù)包進(jìn)行存儲(chǔ)的存儲(chǔ)模塊;
對(duì)存儲(chǔ)的數(shù)據(jù)包進(jìn)行查詢的查詢模塊。
[0009]數(shù)據(jù)流是指滿足某一特征的一組數(shù)據(jù)包(比如數(shù)據(jù)包的源IP地址和目的IP地址分別是A和B,那么所有具有該特征的數(shù)據(jù)包叫做數(shù)據(jù)流,也叫IP會(huì)話流)。
[0010]原始數(shù)據(jù)包是二進(jìn)制數(shù)據(jù),識(shí)別就是按照OSI七層協(xié)議模型來(lái)解釋數(shù)據(jù)包的二進(jìn)制數(shù)據(jù)。比如一個(gè)TCP數(shù)據(jù)包,從物理層,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層到傳輸層,依次識(shí)別其二進(jìn)制數(shù)據(jù)為其對(duì)應(yīng)的協(xié)議和字段,并將協(xié)議和字段保存到識(shí)別結(jié)果中。識(shí)別是分析的基礎(chǔ),識(shí)別后,知道每個(gè)數(shù)據(jù)包屬于什么協(xié)議。分析時(shí),根據(jù)協(xié)議來(lái)進(jìn)行數(shù)據(jù)統(tǒng)計(jì)。
[0011]統(tǒng)計(jì)數(shù)據(jù)是指在某個(gè)時(shí)間范圍內(nèi),針對(duì)數(shù)據(jù)流的一些字段(總數(shù)據(jù)包數(shù),總字節(jié)數(shù))進(jìn)行統(tǒng)計(jì)。
[0012]所述數(shù)據(jù)包分析模塊,包括,
數(shù)據(jù)包識(shí)別模塊,識(shí)別數(shù)據(jù)包二進(jìn)制數(shù)據(jù)所對(duì)應(yīng)的協(xié)議和字段作為識(shí)別結(jié)果;
分析線程池調(diào)度模塊,調(diào)度一個(gè)分析線程對(duì)所述識(shí)別結(jié)果和原始數(shù)據(jù)包進(jìn)行分析; 數(shù)據(jù)分析模塊,將數(shù)據(jù)包按照不同的協(xié)議進(jìn)行數(shù)據(jù)包統(tǒng)計(jì)。
[0013]數(shù)據(jù)分析主要是將數(shù)據(jù)按不同的協(xié)議進(jìn)行數(shù)據(jù)統(tǒng)計(jì),比如:IP協(xié)議統(tǒng)計(jì)總字節(jié)數(shù),TCP協(xié)議統(tǒng)計(jì)重傳次數(shù)。
[0014]所述數(shù)據(jù)包分析模塊還包括數(shù)據(jù)包緩存模塊,用于存放數(shù)據(jù)包識(shí)別后的識(shí)別結(jié)果和原始數(shù)據(jù)包;
跨秒檢測(cè)模塊,檢查數(shù)據(jù)包收集一旦跨秒,則提交當(dāng)前緩存數(shù)據(jù)到分析線程池。
[0015]數(shù)據(jù)包的時(shí)間戳精度為納秒,每收集完I秒的數(shù)據(jù)包,就進(jìn)行后面的分析流程,2015/11/25 23:05:01:999999999 到 2015/11/25 23:05:02:111111111 便是跨秒。
[0016]所述存儲(chǔ)模塊包括,
合并線程模塊,根據(jù)所要查詢的數(shù)據(jù)的時(shí)間范圍,確定所要用的時(shí)間桶和時(shí)間桶的個(gè)數(shù);
時(shí)間桶間隔時(shí)間判斷模塊,計(jì)算當(dāng)前時(shí)間是否滿足各個(gè)時(shí)間桶的時(shí)間間隔;
時(shí)間桶合并模塊,將滿足各個(gè)時(shí)間桶時(shí)間間隔的對(duì)應(yīng)的時(shí)間桶進(jìn)行合并;
數(shù)據(jù)壓縮存儲(chǔ)模塊,合并線程在合并完成后,將合并結(jié)果提交給存儲(chǔ)線程,存儲(chǔ)線程將數(shù)據(jù)壓縮后寫(xiě)入磁盤(pán)。
[0017]所述查詢模塊包括,
查詢監(jiān)聽(tīng)模塊,監(jiān)聽(tīng)客戶端的查詢請(qǐng)求;
查詢線程啟動(dòng)模塊,啟動(dòng)查詢線程開(kāi)始查詢流程;
查詢時(shí)間校正模塊,對(duì)查詢時(shí)間進(jìn)行校正,計(jì)算要查詢的時(shí)間桶和時(shí)間桶的點(diǎn)數(shù); 查詢條件設(shè)置模塊,設(shè)置要用于檢索數(shù)據(jù)的查詢條件;
記錄合并模塊,將查詢到的各個(gè)時(shí)間桶的點(diǎn)多數(shù)據(jù)進(jìn)行合并;
查詢數(shù)據(jù)返回模塊,將查詢到的數(shù)據(jù)返回給客戶端。
[0018]所述查詢模塊還包括壓縮模塊,對(duì)查詢到的數(shù)據(jù)進(jìn)行壓縮后返回給客戶端。
[0019]所述查詢線程啟動(dòng)模塊有兩個(gè)以上的查詢線程與兩個(gè)以上的查詢客戶端一一對(duì)應(yīng)。
[0020]一種基于網(wǎng)絡(luò)數(shù)據(jù)的通用查詢方法,具體方法步驟為:
一、采集網(wǎng)絡(luò)所有出口數(shù)據(jù)的數(shù)據(jù)流(如網(wǎng)絡(luò)中出口交換機(jī)的數(shù)據(jù)流);
二、對(duì)數(shù)據(jù)包進(jìn)行分析;
三、對(duì)分析后的數(shù)據(jù)包進(jìn)行存儲(chǔ);
四、對(duì)存儲(chǔ)的數(shù)據(jù)包進(jìn)行查詢。[0021 ]其中,所述步驟二的具體方法步驟為:
2.1、識(shí)別數(shù)據(jù)包二進(jìn)制數(shù)據(jù)所對(duì)應(yīng)的協(xié)議和字段作為識(shí)別結(jié)果;
2.2、調(diào)度一個(gè)分析線程對(duì)所述識(shí)別結(jié)果和原始數(shù)據(jù)包進(jìn)行分析;
2.3、將數(shù)據(jù)包按照不同的協(xié)議進(jìn)行數(shù)據(jù)包統(tǒng)計(jì)。
[0022]所述步驟2.1和步驟2.2之間的步驟還包括,將數(shù)據(jù)包識(shí)別后的識(shí)別結(jié)果和原始數(shù)據(jù)包存入數(shù)據(jù)包緩存中;檢查數(shù)據(jù)包收集一旦跨秒,則提交當(dāng)前緩存數(shù)據(jù)到分析線程池。
[0023]所述步驟三的具體方法步驟為:
3.1、合并線程,根據(jù)所要查詢的數(shù)據(jù)的時(shí)間范圍,確定所要用的時(shí)間桶和時(shí)間桶的個(gè)數(shù);
3.2、計(jì)算當(dāng)前時(shí)間是否滿足各個(gè)時(shí)間桶的時(shí)間間隔,是則進(jìn)入下一步,否則繼續(xù)等待;
3.3、將滿足各個(gè)時(shí)間桶時(shí)間間隔的對(duì)應(yīng)的時(shí)間桶進(jìn)行合并;
3.4、合并線程在合并完成后,將合并結(jié)果提交給存儲(chǔ)線程,存儲(chǔ)線程將數(shù)據(jù)壓縮后寫(xiě)入磁盤(pán)。
[0024]如果查詢I天的數(shù)據(jù),查詢I秒桶,需要查詢3600*24個(gè)點(diǎn)(I個(gè)點(diǎn)為I秒)的數(shù)據(jù);如果查詢I小時(shí)桶,需要查詢24個(gè)點(diǎn)的數(shù)據(jù)(I個(gè)點(diǎn)I小時(shí)),這就是合并的意義:快速提高查詢效率。合并線程通過(guò)計(jì)算當(dāng)前時(shí)間是否滿足各個(gè)桶的間隔時(shí)間(比如:從2015/11/25 00:00:00開(kāi)始,00:00:10時(shí),合并第一個(gè)10秒點(diǎn),00:00: 20時(shí),合并第二個(gè)10秒點(diǎn),其余類似,00:01:00時(shí),合并第一個(gè)I分鐘點(diǎn),00:10:00時(shí),合并第一個(gè)10分鐘點(diǎn),01:00:00時(shí),合并第一個(gè)I小時(shí)點(diǎn),2015/11/26 00:00:00時(shí),合并第一個(gè)I天點(diǎn)),若滿足,則合并對(duì)應(yīng)桶。一共6個(gè)時(shí)間桶(時(shí)間間隔:I秒,10秒,I分,10分,I小時(shí),I天)。
[0025]所述步驟四的具體方法步驟包括:
4.1、監(jiān)聽(tīng)客戶端的查詢請(qǐng)求,判斷是否有查詢請(qǐng)求,是則進(jìn)入下一步,否則繼續(xù)監(jiān)聽(tīng);
4.2、啟動(dòng)并分配查詢線程開(kāi)始查詢流程;
4.3、結(jié)合服務(wù)器最新分析時(shí)間和最早分析時(shí)間,對(duì)查詢時(shí)間進(jìn)行校正,計(jì)算要查詢的時(shí)間桶和時(shí)間桶的點(diǎn)數(shù);
4.4、根據(jù)檢索數(shù)據(jù)過(guò)濾條件,找出所有請(qǐng)求字段的依賴字段,并將請(qǐng)求字段和依賴字段作為要查詢的字段;
4.5、將校正后的查詢時(shí)間、要查詢的時(shí)間桶、要查詢的時(shí)間桶的點(diǎn)數(shù)和查詢的字段傳給存儲(chǔ)模塊;
4.6、存儲(chǔ)模塊每讀完一個(gè)點(diǎn)的數(shù)據(jù),就回調(diào)給查詢模塊的數(shù)據(jù)解析函數(shù),根據(jù)過(guò)濾條件中的鍵值字段進(jìn)行第一次過(guò)濾;
4.7、將查詢到的時(shí)間桶的多個(gè)點(diǎn)的數(shù)據(jù)進(jìn)行合并;
4.8、根據(jù)過(guò)濾條件中的非鍵值字段進(jìn)行二次過(guò)濾;
4.9、將查詢到的數(shù)據(jù)進(jìn)行壓縮后返回給客戶端。
[0026]回溯分析服務(wù)器監(jiān)聽(tīng)到客戶端的查詢請(qǐng)求,線程池啟動(dòng)新查詢線程開(kāi)始查詢流程;校正查詢時(shí)間,計(jì)算要查詢的桶和查詢的點(diǎn)數(shù)(共6個(gè)時(shí)間桶,I秒,10秒,I分,10分,I小時(shí),I天,表示每個(gè)點(diǎn)的時(shí)間單位);根據(jù)查詢的開(kāi)始時(shí)間和結(jié)束時(shí)間(該開(kāi)始時(shí)間和結(jié)束時(shí)間是查詢請(qǐng)求終端傳給服務(wù)器的參數(shù),然后結(jié)合服務(wù)器分析最新時(shí)間和服務(wù)器最早分析時(shí)間,來(lái)校正查詢時(shí)間:max(開(kāi)始時(shí)間,服務(wù)器最早分析時(shí)間,min(結(jié)束時(shí)間,服務(wù)器最新分析時(shí)間))),計(jì)算需要查詢桶的組合,比如需要查詢70分鐘數(shù)據(jù),需要查詢一個(gè)小時(shí)桶加上一個(gè)10分鐘桶。
[0027]針對(duì)過(guò)濾條件,解析出請(qǐng)求的字段;根據(jù)請(qǐng)求的字段,找出所有字段的依賴字段(在查詢?cè)撟侄螘r(shí),需要先查詢出的字段。比如:每秒字節(jié)數(shù)的依賴字段是總字節(jié)數(shù),因?yàn)槊棵胱止?jié)數(shù)=總字節(jié)數(shù)/查詢時(shí)間段),并將兩者(請(qǐng)求字段,依賴字段)作為要查詢的字段;
過(guò)濾條件(其作用主要用于檢索數(shù)據(jù),比如:我想查詢一個(gè)時(shí)間段總字節(jié)數(shù)大于100字節(jié)的數(shù)據(jù),這時(shí)就需要過(guò)濾器。過(guò)濾器是基于字段的。系統(tǒng)內(nèi)部?jī)?nèi)置了大量字段,過(guò)濾器將字段用&&,I I,and,o