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