郭 慶,朱一凡,謝瑩瑩,張 榆,陳小兵
1(北京理工大學(xué)計(jì)算機(jī)學(xué)院,北京100081)
2(中科曙光大數(shù)據(jù)事業(yè)部,北京100193)
隨著互聯(lián)網(wǎng)的不斷發(fā)展及移動互聯(lián)網(wǎng)的出現(xiàn),網(wǎng)民數(shù)量及網(wǎng)絡(luò)流量快速的增長.此外,各種新的互聯(lián)網(wǎng)應(yīng)用,如微博、互聯(lián)網(wǎng)金融、共享交通系列APP、微信、支付寶、在線短視頻等等層出不窮,同時(shí)智能終端、人工智能、物聯(lián)網(wǎng)、云計(jì)算等信息技術(shù)的快速發(fā)展和廣泛應(yīng)用,促使數(shù)據(jù)呈現(xiàn)爆炸式增長的態(tài)勢,推動人類社會邁入大數(shù)據(jù)時(shí)代[1-3].與之相伴,大量的數(shù)據(jù)需要通過網(wǎng)絡(luò)傳輸,進(jìn)而產(chǎn)生了大規(guī)模的網(wǎng)絡(luò)流量數(shù)據(jù),企業(yè)級用戶已有Gbps 級的數(shù)據(jù)規(guī)模,而在運(yùn)營商骨干網(wǎng)、城域網(wǎng)等環(huán)境下更是已高達(dá)Tbps 級的超大規(guī)模[4].網(wǎng)絡(luò)流量數(shù)據(jù)中包含了豐富的信息,包括時(shí)間戳、協(xié)議類型、源IP、目的IP、源端口、目的端口、數(shù)據(jù)報(bào)文等多維數(shù)據(jù),可反映網(wǎng)絡(luò)狀態(tài),發(fā)現(xiàn)網(wǎng)絡(luò)事件,已廣泛用于入侵檢測、異常流量檢測、溯源分析、態(tài)勢感知、網(wǎng)絡(luò)安全監(jiān)控等多種場景[5].
隨著大規(guī)模網(wǎng)絡(luò)流量數(shù)據(jù)的發(fā)展,其在數(shù)據(jù)量、數(shù)據(jù)規(guī)模、處理速度、響應(yīng)時(shí)間等方面的要求越來越高,因此大規(guī)模數(shù)據(jù)的實(shí)時(shí)匯聚處理等技術(shù)成為現(xiàn)在重要的研究熱點(diǎn)之一[6].為此,業(yè)界相繼出現(xiàn)了一系列分布式流處理系統(tǒng),如Yahoo 推出的S4,Twitter 推出的Storm,有力的推動了流計(jì)算的廣泛應(yīng)用[7].而面向海量數(shù)據(jù)的實(shí)時(shí)分析,也取得了一定成果,以MapReduce、Spark 等為代表的離線計(jì)算、內(nèi)存計(jì)算系統(tǒng),在實(shí)踐中獲得了大量應(yīng)用[8,9].Palacio 等針對企業(yè)網(wǎng)絡(luò)流量監(jiān)控的應(yīng)用場景,提出了一個(gè)基于Spark 的系統(tǒng)框架,通過流處理和批處理的使用,監(jiān)視網(wǎng)絡(luò)活動,分析離線歷史數(shù)據(jù),實(shí)現(xiàn)對異常行為的識別檢測[10].Qiao 等針對運(yùn)營商的應(yīng)用場景,提供了一套移動大數(shù)據(jù)框架,可用于對海量數(shù)據(jù)流量的采集存儲和分析監(jiān)控[11].
但是在面向大規(guī)模網(wǎng)絡(luò)流量數(shù)據(jù)時(shí),這些系統(tǒng)在數(shù)據(jù)吞吐量、分析查詢性能、負(fù)載均衡、系統(tǒng)容錯(cuò)等諸多方面仍然存在著不足:在大規(guī)模Tbps 量級下,這些系統(tǒng)很難有效采集接收大規(guī)模的網(wǎng)絡(luò)流量數(shù)據(jù);在數(shù)據(jù)量累積到PB 量級時(shí),有效組織數(shù)據(jù)存儲并從中快速的查詢檢索數(shù)據(jù)仍很難直接支持;同時(shí)這些系統(tǒng)通常關(guān)注于某個(gè)環(huán)節(jié)的處理,沒有可直接用于網(wǎng)絡(luò)流量數(shù)據(jù)處理的整體系統(tǒng).因此構(gòu)建低延遲、高吞吐、高性能且持續(xù)可靠可擴(kuò)展的網(wǎng)絡(luò)流量大數(shù)據(jù)一體化系統(tǒng),滿足大規(guī)模、實(shí)時(shí)性的需求,仍是當(dāng)前亟待解決的問題.
本文針對上述問題,基于業(yè)界已有的研究基礎(chǔ),提出一種面向大規(guī)模網(wǎng)絡(luò)流量數(shù)據(jù)的實(shí)時(shí)匯聚查詢平臺,實(shí)現(xiàn)對大規(guī)模數(shù)據(jù)的匯聚采集、實(shí)時(shí)處理、存儲組織以及快速查詢分析.對平臺中半同步半異步模式的分級數(shù)據(jù)采集、多分區(qū)隊(duì)列的并行分布式數(shù)據(jù)流處理和基于屬性劃分的數(shù)據(jù)加載、基于抽象數(shù)據(jù)訪問驅(qū)動的虛分區(qū)式數(shù)據(jù)存儲、基于異步構(gòu)建分級索引的數(shù)據(jù)檢索查詢等關(guān)鍵技術(shù)進(jìn)行了深入研究并給出了實(shí)現(xiàn)方案.平臺具有良好的數(shù)據(jù)讀寫并發(fā)度、計(jì)算并發(fā)度,以及良好的可擴(kuò)展性和可維護(hù)性,能有效應(yīng)對網(wǎng)絡(luò)流量數(shù)據(jù)規(guī)模大和時(shí)效性高的需求.平臺已在實(shí)際項(xiàng)目中應(yīng)用實(shí)施,本文給出了用例測試以表明該平臺的有效性和可用性.
面向大規(guī)模網(wǎng)絡(luò)流量數(shù)據(jù)的實(shí)時(shí)匯聚查詢平臺,是針對海量異構(gòu)數(shù)據(jù)的匯聚采集、存儲管理、查詢分析的一體化實(shí)時(shí)處理平臺,可對高速網(wǎng)絡(luò)流量數(shù)據(jù)進(jìn)行采集和預(yù)處理,并對流量數(shù)據(jù)的五元組信息(源IP 地址、目的IP 地址、協(xié)議、源端口、目的端口)進(jìn)行提取,可對接入的網(wǎng)絡(luò)流量數(shù)據(jù)進(jìn)行合理存儲,并對數(shù)據(jù)報(bào)文五元組信息構(gòu)建索引,可對數(shù)據(jù)報(bào)文進(jìn)行快速查詢與檢索,實(shí)現(xiàn)網(wǎng)絡(luò)全流量的回溯.
圖1 是平臺的系統(tǒng)整體架構(gòu),從左往右主要包括數(shù)據(jù)采集、實(shí)時(shí)處理、存儲計(jì)算、數(shù)據(jù)服務(wù)等模塊,數(shù)據(jù)源中的數(shù)據(jù)通過各模塊的協(xié)同處理,最終供用戶使用.
圖1 系統(tǒng)整體架構(gòu)Fig.1 System overview architecture
1)數(shù)據(jù)采集:平臺支持對實(shí)時(shí)的網(wǎng)絡(luò)原始流量數(shù)據(jù)的匯聚,也支持對日志類的安全數(shù)據(jù)采集.對于網(wǎng)絡(luò)流量數(shù)據(jù),通過分級專用的采集設(shè)備匯聚網(wǎng)絡(luò)分流過來的流量,對于日志類的文本數(shù)據(jù),通過日志采集軟件增量匯聚.同時(shí)平臺提供分布式消息中間件,可對接匯聚采集的流量數(shù)據(jù)和日志數(shù)據(jù).
2)實(shí)時(shí)處理:平臺提供分布式流式處理系統(tǒng),可對消息系統(tǒng)中的實(shí)時(shí)數(shù)據(jù)進(jìn)行預(yù)處理,并實(shí)時(shí)的持久化到存儲平臺.對于流量數(shù)據(jù)將進(jìn)行基于安全規(guī)則的監(jiān)測,同時(shí)為提升整個(gè)系統(tǒng)對大規(guī)模流量數(shù)據(jù)的存儲量和查詢分析性能,可通過會話合并、清洗去重等預(yù)處理技術(shù)手段壓縮原始數(shù)據(jù)量;對于日志類安全數(shù)據(jù),支持根據(jù)業(yè)務(wù)需求實(shí)現(xiàn)對數(shù)據(jù)去重清洗轉(zhuǎn)換等各類預(yù)處理功能.
3)存儲計(jì)算:提供對網(wǎng)絡(luò)流量數(shù)據(jù)和日志類安全數(shù)據(jù)的存儲和分析計(jì)算功能.結(jié)構(gòu)化、半結(jié)構(gòu)化數(shù)據(jù)由分布式數(shù)據(jù)庫存儲,非結(jié)構(gòu)化數(shù)據(jù)由分布式文件系統(tǒng)存儲,能夠根據(jù)業(yè)務(wù)需求對數(shù)據(jù)進(jìn)行劃分,使得數(shù)據(jù)合理地寫入到平臺的各個(gè)節(jié)點(diǎn)上.并提供數(shù)據(jù)處理的計(jì)算和分析挖掘功能,包括離線計(jì)算、內(nèi)存計(jì)算等,支持聚類分析、特征提取、關(guān)聯(lián)分析、異常檢測、深度神經(jīng)網(wǎng)絡(luò)等數(shù)據(jù)挖掘算法.具體應(yīng)用包括為存儲到分布式數(shù)據(jù)庫中的流量數(shù)據(jù)根據(jù)查詢需求建立索引;對存儲在分布式文件系統(tǒng)中的非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析等離線處理.
4)數(shù)據(jù)服務(wù):提供數(shù)據(jù)接口服務(wù)和圖形化的交互服務(wù),對于數(shù)據(jù)報(bào)文提供圖形化的數(shù)據(jù)檢索和下載界面,對于挖掘分析提供圖形化的分析統(tǒng)計(jì)、挖掘建模的交互分析界面.
平臺通過軟硬設(shè)備一體化集成,采用分布式可擴(kuò)展服務(wù)架構(gòu),利用增加節(jié)點(diǎn)擴(kuò)大系統(tǒng)規(guī)模,可實(shí)現(xiàn)整體處理能力的增長,通過數(shù)據(jù)處理主要環(huán)節(jié)的技術(shù)優(yōu)化,可達(dá)到對大規(guī)模網(wǎng)絡(luò)流量數(shù)據(jù)的匯聚接入和實(shí)時(shí)處理的效果.為實(shí)現(xiàn)對大規(guī)模網(wǎng)絡(luò)流量數(shù)據(jù)處理的實(shí)時(shí)性,平臺采用了基于半同步半異步模式的分級數(shù)據(jù)采集、基于多分區(qū)隊(duì)列的數(shù)據(jù)緩存和流處理、基于抽象數(shù)據(jù)訪問驅(qū)動的數(shù)據(jù)虛分區(qū)式存儲組織、基于批量構(gòu)建模式的分級索引數(shù)據(jù)查詢等關(guān)鍵技術(shù)方案,有效提升了整體處理能力.
網(wǎng)絡(luò)流量數(shù)據(jù)的采集,目前通用的服務(wù)器設(shè)備可以滿足百兆到準(zhǔn)萬兆的環(huán)境.而在幾十Gbps 以上數(shù)量級的網(wǎng)絡(luò)流量數(shù)據(jù)下,因?yàn)橥ㄟ^網(wǎng)卡收進(jìn)來的數(shù)據(jù)包,經(jīng)過協(xié)議棧處理,緩存在內(nèi)核態(tài)空間中,應(yīng)用程序調(diào)用數(shù)據(jù)的時(shí)候,需要將內(nèi)核態(tài)空間的數(shù)據(jù)拷貝到用戶態(tài)中再使用,這樣帶來了CPU 的開銷,而隨著CPU 核數(shù)的增多,多個(gè)核之間交互協(xié)同的開銷會成指數(shù)增長(如跨NUMA 內(nèi)存訪問),所以對于數(shù)據(jù)量規(guī)模較大的情況下,通過高端的設(shè)備(如四路、八路服務(wù)器)來增加CPU 數(shù)量,并不能帶來流量數(shù)據(jù)收發(fā)解析等處理的整體性能的過多提升.因此針對大規(guī)模流量數(shù)據(jù),需要采用分布式的軟硬件架構(gòu)[12].本平臺采用了半同步半異步模式,利用Scaleout 方式設(shè)計(jì)了分級處理的可擴(kuò)展技術(shù)架構(gòu),性能彈性靈活擴(kuò)展,可支持幾十Gbps 以上的大規(guī)模網(wǎng)絡(luò)流量數(shù)據(jù)的實(shí)時(shí)接入.
半同步半異步模式的分級架構(gòu)中前一級以異步模式向后一級分發(fā)數(shù)據(jù),后一級以同步模式進(jìn)行數(shù)據(jù)的任務(wù)處理,兩者通過隊(duì)列進(jìn)行相關(guān)信息交互.異步模式可提升執(zhí)行效率,同步模式可簡化并行難度,半同步半異步整體提升了系統(tǒng)的并行度,可應(yīng)對大規(guī)模數(shù)據(jù)處理并行的要求.
圖2 是分級采集流量數(shù)據(jù)的架構(gòu)圖,首先一級處理主要通過專用的高性能匯聚分流設(shè)備,將多條雙向鏈路流量接入,對數(shù)據(jù)包進(jìn)行過濾,丟棄不需要分析的報(bào)文,并根據(jù)規(guī)則對流量進(jìn)行負(fù)載均衡分流,保持會話.二級處理通過流量采集設(shè)備,利用協(xié)處理卡釋放服務(wù)器計(jì)算資源,加速網(wǎng)絡(luò)流量處理,實(shí)現(xiàn)零拷貝、無中斷線速收發(fā)包.三級處理采用分布式消息系統(tǒng),通過采集軟件從二級處理設(shè)備中獲取流量數(shù)據(jù),將五元組數(shù)據(jù)和報(bào)文數(shù)據(jù)組成網(wǎng)絡(luò)包結(jié)構(gòu)體,序列化到消息系統(tǒng)中,以供后續(xù)流處理環(huán)節(jié)對數(shù)據(jù)進(jìn)一步進(jìn)行分析處理.
圖2 分級數(shù)據(jù)采集架構(gòu)Fig.2 Hierarchical data collect architecture
一級處理通常應(yīng)對上百Gbps 的數(shù)據(jù)規(guī)模,一般存在于骨干網(wǎng)或核心網(wǎng)出口.目前主要使用大型的高端匯聚分流設(shè)備,將通過分光方式獲取的多條鏈路的雙向流量全部匯聚下來,可采用設(shè)備堆疊或者集群的方式來支持超大規(guī)模的網(wǎng)絡(luò)環(huán)境.在對流量匯聚后,將根據(jù)五元組信息,通過Hash 運(yùn)算把數(shù)據(jù)轉(zhuǎn)發(fā)到后端的二級處理集群,并使得同一個(gè)流的數(shù)據(jù)轉(zhuǎn)到同一個(gè)節(jié)點(diǎn)之上[13].
二級處理接收一級匯聚分流設(shè)備轉(zhuǎn)發(fā)過來的流量數(shù)據(jù),通常在幾十Gbps 的數(shù)據(jù)規(guī)模.目前單個(gè)節(jié)點(diǎn)的處理能力遠(yuǎn)不能支持,因此面對規(guī)模較大的流量數(shù)據(jù),平臺采用了Scale-out和Scale-up 結(jié)合的方式,通過可擴(kuò)展的分布式集群來支持大流量處理.在集群的節(jié)點(diǎn)分布上,根據(jù)流量數(shù)據(jù)的不同類型,用不同的節(jié)點(diǎn)處理不同類型的流量,比如根據(jù)協(xié)議類型,有HTTP、DNS、FTP 等協(xié)議的流量數(shù)據(jù);根據(jù)后期分析的業(yè)務(wù)類型,有DDoS 攻擊檢測、入侵檢測、郵件監(jiān)測等不同業(yè)務(wù)的流量數(shù)據(jù),因此在一級分流時(shí)就將根據(jù)數(shù)據(jù)內(nèi)容,過濾出對應(yīng)的數(shù)據(jù)并分發(fā)到相應(yīng)二級節(jié)點(diǎn)進(jìn)行處理,可通過增加節(jié)點(diǎn)來支持不同內(nèi)容的流量數(shù)據(jù),并擴(kuò)大系統(tǒng)支持的數(shù)據(jù)規(guī)模[13].同時(shí)平臺設(shè)計(jì)中也考慮到集群規(guī)模大帶來的能耗和成本,可通過增強(qiáng)單節(jié)點(diǎn)能力降低節(jié)點(diǎn)數(shù)量,來提升整個(gè)系統(tǒng)的投資回報(bào)率.鑒于現(xiàn)在的CPU 計(jì)算能力已經(jīng)較強(qiáng),所以對于網(wǎng)絡(luò)流量數(shù)據(jù)處理的主要瓶頸是在數(shù)據(jù)收發(fā)包環(huán)節(jié).通用網(wǎng)卡在數(shù)據(jù)處理時(shí)需發(fā)起CPU 中斷,數(shù)據(jù)包需在內(nèi)核空間和用戶空間之間轉(zhuǎn)換,此過程會占用大量的系統(tǒng)資源.平臺為了優(yōu)化性能,設(shè)計(jì)支持了零拷貝和專用網(wǎng)卡兩種方式.零拷貝通過Intel的DPDK 技術(shù),網(wǎng)卡在收到數(shù)據(jù)包時(shí),直接把數(shù)據(jù)存入到用戶態(tài)空間中,以供應(yīng)用程序調(diào)用,從而減少從內(nèi)核態(tài)空間拷貝的開銷;DPDK 提供指定NUMA 號來申請內(nèi)存接口,用戶可以通過指定NUMA 號申請內(nèi)存來保證CPU 使用就近內(nèi)存,以降低訪存的消耗;同時(shí)DPDK 可利用CPU 的親和性將線程與CPU 綁定,避免運(yùn)行過程中被隨意調(diào)度而帶來的頻繁切換開銷,綜上整體可有數(shù)倍性能的提升[14].專用網(wǎng)卡通過專用芯片(如FPGA、ASIC)來加速數(shù)據(jù)包的處理,首先與零拷貝一樣,其避免了內(nèi)核態(tài)到用戶態(tài)的拷貝,降低了開銷,同時(shí)作為專用協(xié)處理卡,可根據(jù)分析需求對高負(fù)載應(yīng)用進(jìn)行負(fù)載卸載.包括數(shù)據(jù)過濾,通過五元組、特征碼規(guī)則等過濾不需分析的流量,以減少CPU 處理的數(shù)據(jù)量;數(shù)據(jù)匹配,對于報(bào)文內(nèi)容的關(guān)鍵字/正則表達(dá)式匹配等高消耗CPU 的任務(wù),將其卸載到專用網(wǎng)卡上實(shí)現(xiàn),可有效降低CPU 的資源消耗;同時(shí)專用網(wǎng)卡可與CPU 配合,CPU 在對一條流內(nèi)前部數(shù)據(jù)包分析得出結(jié)論后,即可下發(fā)規(guī)則,讓專用網(wǎng)卡對該流后續(xù)數(shù)據(jù)包直接轉(zhuǎn)發(fā)或丟棄,無需再經(jīng)CPU 處理,綜上專用網(wǎng)卡可對高負(fù)載應(yīng)用卸載,過濾或降低需CPU 處理的數(shù)據(jù),進(jìn)而帶來處理能力的提升.
三級處理支持接入二級流量采集設(shè)備中的實(shí)時(shí)流量,也支持批量的日志類數(shù)據(jù),并通過分布式消息系統(tǒng)緩存數(shù)據(jù).此級處理主要包括原始網(wǎng)絡(luò)流量數(shù)據(jù)、批量數(shù)據(jù)的采集和序列化數(shù)據(jù)到消息系統(tǒng)兩個(gè)過程.原始網(wǎng)絡(luò)流量數(shù)據(jù)的采集與專用設(shè)備對接,可以多個(gè)節(jié)點(diǎn)并行以提高傳輸速度.獲取流量數(shù)據(jù)過程中,可通過基于協(xié)議的單獨(dú)和組合規(guī)則對流量數(shù)據(jù)進(jìn)行過濾以減少吞吐數(shù)據(jù)量,并打上精確到納秒級別的時(shí)間戳,為后續(xù)分析提供精確的時(shí)間索引.采集到的網(wǎng)絡(luò)報(bào)文解析后,對IP 報(bào)文獲得IP 地址,對TCP 或者UDP 數(shù)據(jù)包則進(jìn)一步獲取通信端口,進(jìn)而將五元組數(shù)據(jù)和實(shí)際報(bào)文數(shù)據(jù)組成一個(gè)含時(shí)間戳的網(wǎng)絡(luò)包結(jié)構(gòu)體,并將該結(jié)構(gòu)體序列化到消息系統(tǒng)中.
面對網(wǎng)絡(luò)流量數(shù)據(jù)的大規(guī)模,在采集接入后,還需要解決數(shù)據(jù)實(shí)時(shí)處理的可靠性、時(shí)效性和數(shù)據(jù)加載持久化的可擴(kuò)展性,從而實(shí)現(xiàn)對數(shù)據(jù)的及時(shí)處理和合理存儲,并為后續(xù)的挖掘分析和檢索查詢墊定基礎(chǔ).
3.2.1 基于多分區(qū)隊(duì)列的數(shù)據(jù)緩存
為了保障數(shù)據(jù)采集后的可靠性和吞吐量,平臺在架構(gòu)設(shè)計(jì)中引入了分布式消息系統(tǒng)對數(shù)據(jù)緩存,實(shí)現(xiàn)多點(diǎn)采集的統(tǒng)一維護(hù)與管理.緩存系統(tǒng)使用本地磁盤對收到的消息進(jìn)行持久化,克服傳統(tǒng)內(nèi)存瓶頸實(shí)現(xiàn)數(shù)據(jù)的高可靠性,并設(shè)置消息的副本數(shù)大于1,從而有效保障緩存數(shù)據(jù)的可靠.為了提高吞吐量,將消息隊(duì)列拆分為多個(gè)分區(qū),并將每個(gè)分區(qū)位于不同的機(jī)器或者不同的磁盤上,以保證磁盤讀寫的連續(xù)性.在大數(shù)據(jù)量的情況下,可通過加大緩存系統(tǒng)主題的分區(qū)數(shù),使得采集數(shù)據(jù)分散到消息系統(tǒng)的各個(gè)節(jié)點(diǎn)的各個(gè)磁盤上,增加處理的數(shù)據(jù)量,也提升后續(xù)消息訂閱處理時(shí)的并行度.
3.2.2 并行分布式的數(shù)據(jù)流處理
采集的數(shù)據(jù)進(jìn)入緩存系統(tǒng)后,通常需根據(jù)業(yè)務(wù)需求進(jìn)行預(yù)處理并進(jìn)行數(shù)據(jù)持久化操作,此過程中因節(jié)點(diǎn)宕機(jī)或存儲系統(tǒng)響應(yīng)慢,就會出現(xiàn)大面積的數(shù)據(jù)丟失.因此,平臺設(shè)計(jì)采用了并行的分布式流式處理技術(shù),統(tǒng)一從緩存系統(tǒng)中獲取數(shù)據(jù),根據(jù)預(yù)處理的規(guī)則和不同的持久化目標(biāo),構(gòu)建作業(yè)級容錯(cuò)的實(shí)時(shí)處理拓?fù)洌?5].通過配置每個(gè)拓?fù)涔?jié)點(diǎn)的并行數(shù),充分利用集群計(jì)算資源達(dá)到較高的并行度,大幅度提高數(shù)據(jù)預(yù)處理和持久化的時(shí)效性;同時(shí)通過捕獲錯(cuò)誤信息,對數(shù)據(jù)進(jìn)行回滾,可以保證有節(jié)點(diǎn)故障時(shí)不會出現(xiàn)數(shù)據(jù)未被執(zhí)行的情況.圖3 展示了流式處理的過程.
圖3 流式處理過程Fig.3 Streaming process
3.2.3 基于屬性劃分的數(shù)據(jù)加載
針對網(wǎng)絡(luò)流量數(shù)據(jù),有五元組等結(jié)構(gòu)化數(shù)據(jù),也有原始報(bào)文等非結(jié)構(gòu)化數(shù)據(jù),平臺支持分布式數(shù)據(jù)庫和分布式文件系統(tǒng)來滿足不同類型的數(shù)據(jù)存儲,在流式處理環(huán)節(jié)會根據(jù)數(shù)據(jù)的特性加載到相應(yīng)的存儲系統(tǒng)中.為了適應(yīng)數(shù)據(jù)規(guī)模的擴(kuò)展,數(shù)據(jù)存儲分布策略按照各個(gè)數(shù)據(jù)對象的屬性值進(jìn)行劃分[16].在數(shù)據(jù)加載時(shí),需按照數(shù)據(jù)的關(guān)鍵字,即劃分屬性,將數(shù)據(jù)寫入到相應(yīng)的存儲節(jié)點(diǎn)中.而在分布式文件系統(tǒng)中,由于文件是按照塊的方式分布在多個(gè)節(jié)點(diǎn)上,因此采用文件夾的方式,對分區(qū)進(jìn)行管理,每個(gè)分區(qū)可以表示一個(gè)文件夾.
網(wǎng)絡(luò)流量數(shù)據(jù)涉及結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),因此平臺設(shè)計(jì)提供不同類型的存儲,采用基于抽象數(shù)據(jù)訪問驅(qū)動的虛分區(qū)進(jìn)行數(shù)據(jù)組織,用于支持不同場景的存儲需求,底層存儲包括關(guān)系型數(shù)據(jù)庫、分布式NoSQL 數(shù)據(jù)庫、分布式文件系統(tǒng)和文本檢索系統(tǒng)等以及這些數(shù)據(jù)存儲和處理系統(tǒng)的復(fù)合[17].平臺采用軟件中間件的架構(gòu)方式,將底層的存儲系統(tǒng)組織管理起來,對外提供統(tǒng)一的數(shù)據(jù)存儲服務(wù),并實(shí)現(xiàn)對各種類型數(shù)據(jù)的統(tǒng)一處理[18].架構(gòu)如圖4 所示.
圖4 數(shù)據(jù)統(tǒng)一存儲處理架構(gòu)Fig.4 Architecture of unified data storage and process
架構(gòu)中的抽象數(shù)據(jù)訪問驅(qū)動,是對底層各種類型數(shù)據(jù)訪問的統(tǒng)一接口,采用Portable 的設(shè)計(jì),針對不同的數(shù)據(jù)類型,可添加或者裝載新的驅(qū)動.目前支持?jǐn)?shù)據(jù)庫訪問接口、文件系統(tǒng)接口、文本檢索接口,并可通過添加新的驅(qū)動庫來擴(kuò)展其它數(shù)據(jù)訪問接口.通過抽象的數(shù)據(jù)訪問驅(qū)動層,可以屏蔽數(shù)據(jù)訪問的差異細(xì)節(jié),將對不同類型存儲數(shù)據(jù)的訪問統(tǒng)一起來,簡化了系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),同時(shí)也對不同數(shù)據(jù)的聯(lián)合查詢分析提供了支撐基礎(chǔ),可實(shí)現(xiàn)不同類型數(shù)據(jù)的通用處理[19].比如將文本檢索和數(shù)據(jù)庫查詢相結(jié)合進(jìn)行數(shù)據(jù)分析,在網(wǎng)絡(luò)流量數(shù)據(jù)基于五元組查詢數(shù)據(jù)報(bào)文的場景中,就可以先通過關(guān)鍵字檢索到五元組信息,再根據(jù)五元組進(jìn)行數(shù)據(jù)庫查詢得到所需數(shù)據(jù)報(bào)文.
平臺對數(shù)據(jù)的統(tǒng)一存儲組織,提供對數(shù)據(jù)的邏輯劃分功能,支持按照數(shù)據(jù)語義的 hash、range、list 和 round-robin 的數(shù)據(jù)劃分策略[20].針對結(jié)構(gòu)化數(shù)據(jù)處理的數(shù)據(jù)庫系統(tǒng),每個(gè)數(shù)據(jù)節(jié)點(diǎn)保存整個(gè)數(shù)據(jù)集的一部分.針對非結(jié)構(gòu)化數(shù)據(jù)處理的分布式文件系統(tǒng)或者文本檢索系統(tǒng),則可以劃分到不同的文件或者文件夾,每個(gè)文件或文件夾保存數(shù)據(jù)集的一部分.
為了適應(yīng)節(jié)點(diǎn)數(shù)的動態(tài)擴(kuò)展,平臺設(shè)計(jì)了一種虛分區(qū)的技術(shù),即分區(qū)和節(jié)點(diǎn)是多對一的關(guān)系,每個(gè)節(jié)點(diǎn)包含多個(gè)虛分區(qū).每個(gè)表定義時(shí)需要指定一個(gè)節(jié)點(diǎn)組,包含若干數(shù)據(jù)節(jié)點(diǎn).分區(qū)表進(jìn)行存儲劃分時(shí),每個(gè)節(jié)點(diǎn)包含若干分區(qū)(也叫虛分區(qū)),因此采用數(shù)據(jù)劃分的數(shù)據(jù)表的存儲可以分為分區(qū)、節(jié)點(diǎn)和節(jié)點(diǎn)組的三層包含關(guān)系.為了充分利用系統(tǒng)的計(jì)算資源,在多分區(qū)時(shí)對讀寫等負(fù)載進(jìn)行有效調(diào)度,分區(qū)數(shù)量可以設(shè)定為CPU 的核數(shù)×2,或者更多,這樣使得CPU 的每個(gè)核能對應(yīng)一個(gè)以上分區(qū),避免分區(qū)過少造成的計(jì)算資源空閑,從而可以在運(yùn)行過程中根據(jù)不同的負(fù)載模式做相應(yīng)的調(diào)度策略,使得每個(gè)CPU核都能分配到對應(yīng)任務(wù),從而充分發(fā)揮出節(jié)點(diǎn)的計(jì)算能力.
當(dāng)系統(tǒng)規(guī)模擴(kuò)大時(shí),比如往節(jié)點(diǎn)組中增加新節(jié)點(diǎn)時(shí),需要對在線數(shù)據(jù)進(jìn)行遷移,以保證節(jié)點(diǎn)組內(nèi)各節(jié)點(diǎn)間的數(shù)據(jù)均衡.采用虛分區(qū)技術(shù),數(shù)據(jù)遷移時(shí)只需將一定數(shù)量的分區(qū)整體遷移到新增節(jié)點(diǎn),避免了重新分區(qū)的開銷,同時(shí)也保證節(jié)點(diǎn)間的最小數(shù)據(jù)遷移量.
在網(wǎng)絡(luò)流量數(shù)據(jù)分析的需求中,其中典型的應(yīng)用場景是根據(jù)需求檢索查詢出原始數(shù)據(jù)報(bào)文,以進(jìn)行溯源和深入的內(nèi)容分析,在大規(guī)模數(shù)據(jù)存儲量的環(huán)境下,需要提供從中快速檢索查詢的技術(shù)方案.為此平臺設(shè)計(jì)了以分布式列式數(shù)據(jù)庫為存儲載體,利用全文搜索引擎為數(shù)據(jù)建立二級索引,通過異步批處理進(jìn)行數(shù)據(jù)的會話合并和索引構(gòu)建的整體方案,來應(yīng)對網(wǎng)絡(luò)流量大數(shù)據(jù)量的查詢挑戰(zhàn).
數(shù)據(jù)存儲使用典型的NoSQL 非關(guān)系數(shù)據(jù)庫系統(tǒng),采用key-value 模式的數(shù)據(jù)模型,在主鍵上建立索引,可以高效地支持基于主鍵的數(shù)據(jù)查詢[21].為了支持流量數(shù)據(jù)的快速查詢,平臺設(shè)計(jì)了以源 IP 地址+目的 IP 地址+協(xié)議+源端口+目的端口+時(shí)間戳為組合的rowkey.根據(jù)實(shí)際數(shù)據(jù)量,對表進(jìn)行周期性切分,如按天、周進(jìn)行分表;對表進(jìn)行預(yù)分區(qū),確保數(shù)據(jù)能夠均勻的寫入每個(gè)節(jié)點(diǎn),提高系統(tǒng)的吞吐量,降低熱點(diǎn)節(jié)點(diǎn)出現(xiàn)的概率.并通過啟用數(shù)據(jù)壓縮、增加處理線程數(shù)、調(diào)整塊緩存大小、增加阻塞時(shí)存儲文件數(shù)目等多種手段進(jìn)行整體優(yōu)化.
為實(shí)現(xiàn)對報(bào)文數(shù)據(jù)的快速檢索,利用分布式搜索引擎對五元組等關(guān)鍵字段構(gòu)建二級索引.數(shù)據(jù)報(bào)文的ID 為唯一字段,可與rowkey 一致,源IP 地址、目的IP 地址、協(xié)議、源端口、目的端口、時(shí)間為索引字段,查詢時(shí)可根據(jù)任意條件組合的索引字段查詢到ID,再根據(jù)ID 從數(shù)據(jù)庫中獲取報(bào)文內(nèi)容.考慮網(wǎng)絡(luò)流量的數(shù)據(jù)規(guī)模,容易形成數(shù)據(jù)積壓,平臺采用了異步批處理模式來創(chuàng)建索引.批處理主要實(shí)現(xiàn)將文件系統(tǒng)中數(shù)據(jù)包結(jié)構(gòu)的rcfile 文件合并為會話結(jié)構(gòu)的avro 文件,并根據(jù)索引字段對avro 文件生成搜索引擎的索引文件,直接導(dǎo)入搜索引擎,從而繞過原生的導(dǎo)數(shù)據(jù)建索引同步接口,性能可大幅提升.在對數(shù)據(jù)報(bào)文建立索引的過程中,基于時(shí)間窗口將五元組相同的報(bào)文合并成一條會話,會話記錄報(bào)文的五元組信息、起始時(shí)間、結(jié)束時(shí)間、報(bào)文數(shù)量,也可以有效減少數(shù)據(jù)量,提升檢索效率.
本文所設(shè)計(jì)提出的面向大規(guī)模網(wǎng)絡(luò)流量數(shù)據(jù)的實(shí)時(shí)匯聚查詢平臺,可應(yīng)對網(wǎng)絡(luò)流量數(shù)據(jù)的采集、實(shí)時(shí)處理、存儲組織和檢索查詢的需求,為了檢驗(yàn)本文中關(guān)鍵技術(shù)和整體系統(tǒng)的實(shí)際性能,我們選取了主要環(huán)節(jié)進(jìn)行性能驗(yàn)證.
表1 節(jié)點(diǎn)配置信息和角色Table 1 Node config information and role
測試環(huán)境中接入20Gbps 網(wǎng)絡(luò)流量數(shù)據(jù),測試服務(wù)器集群共有30 個(gè)節(jié)點(diǎn),節(jié)點(diǎn)硬件配置和角色分布參見表1.
實(shí)驗(yàn)采用發(fā)包儀構(gòu)造網(wǎng)絡(luò)流量包,持續(xù)發(fā)送20Gbps 的流量數(shù)據(jù)進(jìn)行采集性能、數(shù)據(jù)寫入性能、數(shù)據(jù)查詢性能、構(gòu)建索引性能和可擴(kuò)展性的測試.
1)采集性能
針對采集性能實(shí)驗(yàn),分別通過發(fā)包儀構(gòu)造64b/512b/1024b 的小包,經(jīng)分流設(shè)備向每路采集節(jié)點(diǎn)發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包,最終我們測試的單節(jié)點(diǎn)采集性能大于4200Mbps,峰值可達(dá)到4900Mbps,且數(shù)據(jù)包越大,單節(jié)點(diǎn)采集性能越高,具體實(shí)驗(yàn)結(jié)果詳見圖5.由于各個(gè)采集節(jié)點(diǎn)是獨(dú)立處理分流的數(shù)據(jù),相互可并行工作,因此整體采集能力可隨節(jié)點(diǎn)線性擴(kuò)展,5 個(gè)節(jié)點(diǎn)即可處理20Gbps 的流量數(shù)據(jù),通過增加節(jié)點(diǎn)數(shù)量可以處理更大規(guī)模的流量數(shù)據(jù).
圖5 單節(jié)點(diǎn)采集性能對比Fig.5 Single node collect performance comparison
2)數(shù)據(jù)寫入性能
采集的數(shù)據(jù)經(jīng)過實(shí)時(shí)處理并入庫存儲,以大小為1024b的包為例,如圖6 所示,整體數(shù)據(jù)解析及入庫能力不低于350萬條/s,穩(wěn)定在370 萬條/s,峰值可達(dá)390 萬條/s.實(shí)驗(yàn)表明通過多分區(qū)隊(duì)列的數(shù)據(jù)緩存、并行分布式的數(shù)據(jù)流處理和基于屬性劃分的數(shù)據(jù)加載等構(gòu)建的整體流程,可以快速的處理解析流量數(shù)據(jù),并根據(jù)數(shù)據(jù)特征有效的完成數(shù)據(jù)入庫加載,具備對大數(shù)據(jù)量的實(shí)時(shí)處理能力.
圖6 數(shù)據(jù)解析入庫性能Fig.6 Data parsing and writing performance
3)數(shù)據(jù)查詢性能
為了提高數(shù)據(jù)查詢性能,在本系統(tǒng)中,我們通過對分布式數(shù)據(jù)庫中存儲的原始數(shù)據(jù)建立二級索引實(shí)現(xiàn)數(shù)據(jù)的快速查詢響應(yīng).在1PB 數(shù)據(jù)量下,分別對本系統(tǒng)查詢響應(yīng)時(shí)間和直接查詢原生分布式數(shù)據(jù)庫HBase 的響應(yīng)時(shí)間進(jìn)行了多種場景的測試,包括雙向源IP 精確查詢、單向源IP模糊查詢、雙向源IP 模糊查詢源、雙向雙端口精確查詢和雙向源IP 模糊+雙端口精確查詢.在本系統(tǒng)下精確查詢響應(yīng)時(shí)間<1s,復(fù)雜查詢時(shí)間秒級返回,比直接從分布式數(shù)據(jù)庫查詢性能提升30 倍以上,部分場景可達(dá)80 倍的效果,具體測試數(shù)據(jù)參見表2.結(jié)果表明通過二級索引的構(gòu)建,可以大幅提升查詢數(shù)據(jù)的尋址時(shí)間,同時(shí)結(jié)合五元組數(shù)據(jù)特征構(gòu)建合理的鍵值結(jié)構(gòu),整體可實(shí)現(xiàn)對流量數(shù)據(jù)查詢場景的快速響應(yīng).
表2 數(shù)據(jù)查詢性能對比Table 2 Data querying performance comparison
4)構(gòu)建索引性能
為了提高建索引的速度和存儲空間利用率,平臺采用了異步模式來批量建立索引并進(jìn)行數(shù)據(jù)的會話合并,規(guī)避同步模式構(gòu)建索引的時(shí)間消耗,并利用會話合并來減少處理的數(shù)據(jù)量.實(shí)驗(yàn)過程中我們以小時(shí)的數(shù)據(jù)為單位周期建立索引,索引數(shù)18 億條左右,實(shí)測每次建立索引10 分鐘內(nèi)完成,系統(tǒng)整體構(gòu)建索引速度平均329 萬條/s.如圖7 所示對比,檢索系統(tǒng)Elasticsearch 的原生索引構(gòu)建速度平均91 萬條/s,性能優(yōu)化提升 3.5 倍以上.
圖7 構(gòu)建索引速度Fig.7 Build index speed
5)擴(kuò)展性測試
為了支持大規(guī)模,系統(tǒng)需要具有良好的擴(kuò)展性,我們選擇了數(shù)據(jù)采集和數(shù)據(jù)寫入,通過對不同集群規(guī)模的壓力測試來驗(yàn)證系統(tǒng)的可擴(kuò)展性.
數(shù)據(jù)采集性能如圖8 所示,以1024b 大小的包為例,由于各個(gè)采集節(jié)點(diǎn)的并行工作,可以看到隨著采集節(jié)點(diǎn)數(shù)的增加,采集性能保持線性增長,驗(yàn)證了數(shù)據(jù)采集的架構(gòu)在可擴(kuò)展性方面有著良好的表現(xiàn).
圖8 數(shù)據(jù)采集性能Fig.8 Data collect performance
數(shù)據(jù)寫入性能如圖9 所示,以1024b 大小的包為例,由于系統(tǒng)整體采用分布式的服務(wù)架構(gòu),當(dāng)節(jié)點(diǎn)從5 個(gè)擴(kuò)展到25個(gè),數(shù)據(jù)寫入性能從80 萬條/s 提升到370 萬條/s,基本保持近線性增長,驗(yàn)證了存儲計(jì)算節(jié)點(diǎn)在擴(kuò)展性方面同樣具備良好表現(xiàn).
受限于硬件條件的限制,測試沒有針對更大規(guī)模的數(shù)據(jù)進(jìn)行驗(yàn)證,但通過實(shí)驗(yàn)可以表明,系統(tǒng)整體具備高吞吐量高性能的處理能力,系統(tǒng)中的模塊采用分布式可擴(kuò)展服務(wù)架構(gòu),通過擴(kuò)大集群規(guī)模即可實(shí)現(xiàn)系統(tǒng)處理能力的增長,從而支持更大規(guī)模流量數(shù)據(jù)處理的需求.
圖9 數(shù)據(jù)寫入性能Fig.9 Data write performance
目前系統(tǒng)已在用戶項(xiàng)目中使用,實(shí)時(shí)處理20Gbps 的網(wǎng)絡(luò)流量,數(shù)據(jù)存儲量5PB,持續(xù)穩(wěn)定運(yùn)行一年以上,具有很好的應(yīng)用價(jià)值.
本文闡述了面向超大規(guī)模網(wǎng)絡(luò)流量數(shù)據(jù)的實(shí)時(shí)匯聚查詢平臺的系統(tǒng)架構(gòu)、關(guān)鍵技術(shù)以及相關(guān)測試.結(jié)果表明平臺通過半同步半異步模式的分級架構(gòu),能夠接入采集大規(guī)模的網(wǎng)絡(luò)實(shí)時(shí)流量;通過多分區(qū)隊(duì)列的消息緩存、并行分布式流處理和基于屬性劃分的數(shù)據(jù)加載等手段的優(yōu)化組合能夠?qū)α髁繑?shù)據(jù)進(jìn)行可靠高效的實(shí)時(shí)處理;采用基于抽象數(shù)據(jù)訪問驅(qū)動的虛分區(qū)式數(shù)據(jù)存儲可對異構(gòu)數(shù)據(jù)進(jìn)行統(tǒng)一的管理,并具備良好的擴(kuò)展性;通過異步構(gòu)建的分級索引架構(gòu),實(shí)現(xiàn)對海量數(shù)據(jù)報(bào)文的快速查詢檢索,最終為用戶提供數(shù)據(jù)匯聚查詢的一體化平臺,并達(dá)到支撐超大規(guī)模和高實(shí)時(shí)性的目標(biāo),可廣泛應(yīng)用于網(wǎng)絡(luò)流量數(shù)據(jù)的各類使用場景.下一步,我們會針對五元組信息外的條件檢索查詢場景進(jìn)行研究并提出更高效的數(shù)據(jù)存儲、索引和查詢優(yōu)化方法,并針對更為復(fù)雜的流量數(shù)據(jù)分析挖掘需求提供解決方案.