?
撥測系統(tǒng)探針端的設(shè)計與實現(xiàn)*
王東1,2, 李煒1,2, 沈奇威1,2
(1 北京郵電大學網(wǎng)絡(luò)與交換技術(shù)國家重點實驗室,北京 100876; 2 東信北郵信息技術(shù)有限公司,北京 100191)
摘 要互聯(lián)網(wǎng)撥測系統(tǒng)是一套分布式的網(wǎng)絡(luò)性能監(jiān)控系統(tǒng),通過對用戶的業(yè)務(wù)感知,來獲取用戶“真實體驗”信息,為網(wǎng)絡(luò)維護人員提供最直接最科學的維護依據(jù),本文介紹的探針系統(tǒng)即是模擬用戶請求以進行數(shù)據(jù)采集的系統(tǒng)[1]。
關(guān)鍵詞用戶體驗; 監(jiān)控系統(tǒng); 數(shù)據(jù)采集
隨著網(wǎng)絡(luò)經(jīng)濟飛速發(fā)展,網(wǎng)站已經(jīng)成為企業(yè)實現(xiàn)經(jīng)濟效益的重要手段,因此保證企業(yè)網(wǎng)站健康、高速的運轉(zhuǎn),已成為企業(yè)首當其沖的重要課題。作為網(wǎng)站服務(wù)運營者,不可避免的會遇到網(wǎng)站服務(wù)無法訪問、打開速度緩慢、服務(wù)異常等等的問題。網(wǎng)站即使能夠提供豐富多樣的服務(wù)內(nèi)容,但是用戶體驗不佳的話,也會造成大量用戶的流失,直接影響網(wǎng)站的 PV (頁面瀏覽量,通常是衡量一個網(wǎng)絡(luò)新聞頻道或網(wǎng)站甚至一條網(wǎng)絡(luò)新聞的主要指標)和 UV(指訪問某個站點或點擊某條新聞的不同),以及網(wǎng)站的內(nèi)容覆蓋和傳播。
互聯(lián)網(wǎng)撥測系統(tǒng)是一套分布式的網(wǎng)絡(luò)性能監(jiān)控系統(tǒng),通過對用戶的業(yè)務(wù)感知,來獲取用戶“真實體驗”信息,為網(wǎng)絡(luò)維護人員提供最直接最科學的維護依據(jù)。
為了提高系統(tǒng)的成熟度,多采用體系成熟、使用廣泛、充分得到驗證的技術(shù)和框架,主要有如下幾個。
2.1 Java序列化
Java中,一切都是對象,對象在需要時被創(chuàng)建,如果不對對象進行回收,對象就一直存在于內(nèi)存中;但是在程序終止時,內(nèi)存中的對象都不會繼續(xù)存在。在分布式環(huán)境中經(jīng)常需要將對象從一個設(shè)備傳遞到另一設(shè)備,這就需要將內(nèi)存中的對象信息保存之后發(fā)送到遠端,Java對象的序列化機制解決了這個問題[2]。
2.2 MINA
MINA是一Apache的一個開源框架,是一個網(wǎng)絡(luò)應(yīng)用框架,使用MINA可以用于開發(fā)高性能的網(wǎng)絡(luò)應(yīng)用程序的傳輸模塊。MINA給開發(fā)人員提供了一系列的通過Java NIO的異步API,屏蔽了處理底層I/O和線程并發(fā)的細節(jié),開發(fā)人員只需關(guān)心系統(tǒng)的業(yè)務(wù)設(shè)計和開發(fā)。
MINA分為3個層次:I/O服務(wù)、I/O過濾器、I/O處理器。I/O服務(wù)用來執(zhí)行實際的I/O操作,MINA提供了支持不同協(xié)議的I/O服務(wù),開發(fā)人員也可以實現(xiàn)自己的I/O服務(wù)。I/O過濾器是完成Java對象和字節(jié)流的轉(zhuǎn)換,因為系統(tǒng)中存儲的是Java對象,而傳輸時要使用字節(jié)流。I/O過濾器的另一個作用是對數(shù)據(jù)進行處理,滿足用戶需求。I/O處理器用來執(zhí)行具體的業(yè)務(wù)邏輯。
互聯(lián)網(wǎng)撥測系統(tǒng)是基于C/S的分布式網(wǎng)絡(luò)監(jiān)測系統(tǒng)。本系統(tǒng)由三部分組成:前端、中心服務(wù)器以及探針。
前端負責所有的用戶交互過程以及各類數(shù)據(jù)呈現(xiàn),是整個系統(tǒng)與各種類型的用戶打交道的窗口。前端服務(wù)器主要由負責用戶界面的Web服務(wù)器和負責客戶端接口的API服務(wù)器構(gòu)成。用戶界面:以Web形式向用戶提供監(jiān)控分析平臺的各種功能的使用界面,包括對平臺的管理,提供數(shù)據(jù)的可視化展現(xiàn)。不同的用戶角色對應(yīng)不同的用戶界面。API接口:提供開發(fā)的API接入服務(wù),為各類客戶端提供便捷、高效、一致、安全的接入方式。也為后續(xù)可能的第三方接入提供必要條件。
中心服務(wù)器是整個系統(tǒng)的核心,幾乎所有的業(yè)務(wù)邏輯的控制和執(zhí)行都是由它完成。中心服務(wù)器作為核心的3個模塊分別是:任務(wù)管理、模型管理、資源管理,這3個模塊負責中心服務(wù)器的三大核心功能。任務(wù)管理:對測試任務(wù)運行中的各個過程進行跟蹤和管理。包括測試任務(wù)的分發(fā)、啟動、監(jiān)控、告警等等。模型管理:測試模型定義了測試過程中的各個細節(jié),模型管理模塊負責測試模型的定義、條件檢測、以及模型的存儲。資源管理:該模塊負責管理整個系統(tǒng)的各類資源,包括各個探針和探針能夠提供各項服務(wù),以及其他可用資源。
探針作為客戶端,通過模擬用戶對目標服務(wù)器的訪問,獲取目標服務(wù)器的連接狀態(tài)信息,并將信息發(fā)送到中心服務(wù)器;中心服務(wù)器根據(jù)用戶的需求對探針收集到的原始數(shù)據(jù)進行分析和統(tǒng)計,從而實現(xiàn)對目標服務(wù)器的監(jiān)測。中心服務(wù)器和探針的關(guān)系可以通過系統(tǒng)總體架構(gòu)圖得知,如圖1所示。
如圖1所示,監(jiān)測任務(wù)的指令從前端發(fā)起,前端通過Thrift接口與中心服務(wù)器進行通信;中心服務(wù)器將接收到的指令通過MINA發(fā)送到探針。中心服務(wù)器有任務(wù)管理、用戶管理、探針管理、告警、生成報表等功能,探針端負責具體監(jiān)控任務(wù)的調(diào)度、執(zhí)行,監(jiān)測數(shù)據(jù)的獲取等功能。
探針采用模塊化開發(fā),各模塊職責明確,相互獨立,通過內(nèi)部接口交互信息,各模塊的改變不會影響其他模塊的結(jié)構(gòu)。該架構(gòu)在解決當前業(yè)務(wù)需求和管理需求的前提下,充分考慮將來會出現(xiàn)的需求變化,為后序系統(tǒng)升級、擴展以及與其他應(yīng)用系統(tǒng)的互通接口提供了快速響應(yīng)和良好的擴展能力。
圖1 系統(tǒng)總體架構(gòu)圖
探針端的主要工作包括:(1)連接服務(wù)器,接受服務(wù)器的命令,完成命令解析,并根據(jù)不同類型的命令執(zhí)行相應(yīng)的操作,例如啟動監(jiān)控任務(wù)、停止監(jiān)控任務(wù);(2)完成對監(jiān)控任務(wù)列表的數(shù)據(jù)采集工作;(3)將監(jiān)測到的結(jié)果數(shù)據(jù)發(fā)送回服務(wù)器。針對探針端的上述需求,其總體設(shè)計如圖2所示。
其中通信模塊是探針和服務(wù)器交互的接口。通信模塊接收服務(wù)器的命令,并將命令發(fā)送到控制模塊,控制模塊解析命令。如果是啟動任務(wù),就重新創(chuàng)建一個監(jiān)控任務(wù),并將監(jiān)控任務(wù)存儲到任務(wù)隊列中;如果是停止任務(wù),就將該任務(wù)從任務(wù)隊列里移除。當隊列中的監(jiān)控任務(wù)被調(diào)度后,就會調(diào)用數(shù)據(jù)收集模塊對應(yīng)子模塊的API接口,完成一次數(shù)據(jù)收集動作,同時將該監(jiān)控任務(wù)重新放入隊列中(因為任務(wù)是每隔固定時間執(zhí)行一次)。下面對各個模塊進行詳細介紹。
4.1 通信模塊
通信模塊是服務(wù)器和探針之間信息交換的接口,負責將服務(wù)器的命令發(fā)送到探針,并且把探針的監(jiān)測結(jié)果數(shù)據(jù)發(fā)送回服務(wù)器。通信模塊基于Java序列化,實現(xiàn)服務(wù)器和探針端全雙工的傳輸數(shù)據(jù)。
系統(tǒng)中采用了通過MINA網(wǎng)絡(luò)通信應(yīng)用框架,實現(xiàn)了開放API的方式,將真正的網(wǎng)絡(luò)通信與應(yīng)用程序隔離開來,服務(wù)器和探針只需要關(guān)心要發(fā)送、接受的數(shù)據(jù)以及業(yè)務(wù)邏輯即可,服務(wù)器可以通過調(diào)用對方的API接口將命令發(fā)送給探針,探針也可以講監(jiān)測結(jié)果數(shù)據(jù)以同樣的方式發(fā)送給服務(wù)器。
4.2 控制模塊
控制模塊又分為監(jiān)聽組件和操作組件。監(jiān)聽組件負責監(jiān)聽由服務(wù)端發(fā)送的命令,接收到服務(wù)端命令后,監(jiān)聽組件對命令解析并發(fā)送到操作組件,操作組件接受命令,對命令進行響應(yīng),完成啟動、停止任務(wù)等操作。服務(wù)器向探針端發(fā)送的命令分為啟動命令和停止命令兩種,啟動命令即給探針分配一個新的監(jiān)控任務(wù),停止命令即刪除一個監(jiān)控任務(wù)。控制模塊同時也監(jiān)視探針和服務(wù)器之間連接的狀態(tài)。如果監(jiān)聽模塊監(jiān)測到連接狀態(tài)異常,如連接斷開,監(jiān)聽組件就會將異常信息發(fā)送到報告模塊,報告模塊向服務(wù)器發(fā)送探針的注冊請求,服務(wù)器接收到請求后選擇是否將連接恢復??刂颇K就是探針端的中央處理器,它完成了對命令的接收、解析和操作,并且負責保證服務(wù)器和探針之間連接的穩(wěn)定[3]。
4.3 任務(wù)存儲與調(diào)度模塊
任務(wù)存儲與調(diào)度模塊實現(xiàn)對監(jiān)控任務(wù)的存儲和調(diào)度。該模塊把監(jiān)控任務(wù)實例存儲在一個優(yōu)先級隊列中,并在適當?shù)臅r間調(diào)度監(jiān)控任務(wù)。對任務(wù)的存儲采用基于優(yōu)先級堆的極大優(yōu)先隊列實現(xiàn),每次從隊列中取出的都是具有最高優(yōu)先級的任務(wù),往隊列添加任務(wù)的時候也會根據(jù)優(yōu)先級自動排序,系統(tǒng)中使用的優(yōu)先級既是監(jiān)控任務(wù)離下一次調(diào)度剩余的時間,剩余的時間越少優(yōu)先級越高。對監(jiān)控任務(wù)完成一次調(diào)度之后,將任務(wù)下次執(zhí)行的時間重置為任務(wù)的監(jiān)控頻率[4],并且將監(jiān)控任務(wù)放到任務(wù)隊列中,以待下次調(diào)度,所以監(jiān)控任務(wù)在停止之前會以用戶指定的監(jiān)控頻率循環(huán)調(diào)度執(zhí)行。
4.4 數(shù)據(jù)收集模塊
數(shù)據(jù)收集模塊是系統(tǒng)的核心模塊,是實際進行信息獲取的模塊。該模塊給任務(wù)調(diào)度模塊提供接口,當有任務(wù)啟動時,啟動的監(jiān)控任務(wù)會調(diào)用該模塊的接口,模擬對目標服務(wù)器的訪問,從而獲取監(jiān)測結(jié)果,并將結(jié)果數(shù)據(jù)發(fā)送到緩存模塊[5]。該模塊針對不同的監(jiān)測類型有不同的子模塊,每個子模塊可以完成一種類型的監(jiān)測。目前系統(tǒng)支持的有HTTP類型、TCP/UDP類型、SMTP/POP3類型、PING類型。
圖2 探針端架構(gòu)圖
HTTP類型使用HTTP Client模擬HTTP訪問,從而獲取訪問過程中的響應(yīng)時間。TCP/UDP類型通過iperf網(wǎng)絡(luò)測試工具獲取最大TCP/UDP帶寬性能,同時可以獲取延時、抖動、分組丟失率等。對于SMTP/POP3類型監(jiān)使用Java實現(xiàn)郵件發(fā)送和接收的功能,獲取這兩個過程的響應(yīng)時間。PING類型使用Linux的fping命令獲取延時和分組丟失率。
4.5 數(shù)據(jù)緩存模塊
數(shù)據(jù)緩存模塊實現(xiàn)是監(jiān)測結(jié)果數(shù)據(jù)的緩存區(qū)。如果每完成一次數(shù)據(jù)收集就把收集到的數(shù)據(jù)發(fā)送到服務(wù)器,探針就會和服務(wù)器頻繁的進行數(shù)據(jù)交換,但是由于每次發(fā)送的數(shù)據(jù)量很小,所以數(shù)據(jù)發(fā)送的效率整體不高。數(shù)據(jù)緩存模塊對監(jiān)測結(jié)果進行暫時存放,積累到一定數(shù)據(jù)量時才向服務(wù)器發(fā)送一次數(shù)據(jù),發(fā)送完成之后清空緩存數(shù)據(jù),以便下次使用;這樣可以大大減少探針和服務(wù)器數(shù)據(jù)發(fā)送的次數(shù),增加每次發(fā)送的數(shù)據(jù)量,從而提高數(shù)據(jù)發(fā)送的效率[5]。
4.6 報告模塊
報告模塊負責將探針端的信息通過通信模塊發(fā)送到服務(wù)器。探針端發(fā)送到服務(wù)器的信息分為3種:(1)探針注冊信息,注冊信息既是探針端向服務(wù)器發(fā)送的連接請求,其中包括探針的狀態(tài)信息,服務(wù)器會根據(jù)這些信息決定是否與該探針建立連接。(2)監(jiān)測結(jié)果數(shù)據(jù),報告模塊會定時的從緩存模塊讀取數(shù)據(jù),并將數(shù)據(jù)發(fā)送給通信模塊,由通信模塊將數(shù)據(jù)發(fā)送到中心服務(wù)器。(3)異常信息,當監(jiān)測結(jié)果出現(xiàn)異常數(shù)據(jù)時,異常數(shù)據(jù)也是通過報告模塊發(fā)送到服務(wù)器。
本文概述了撥測系統(tǒng)探針端的整體設(shè)計,系統(tǒng)基于MINA框架進行通信,模擬郵件發(fā)送的過程從而獲取SMTP類型監(jiān)控的相應(yīng)時間,從而實現(xiàn)了數(shù)據(jù)收集的功能。
參考文獻
[1]Xuesong Qiu, Likun Yu, Songqing Guo. An efficient network detection approach based on correlation relationship[C]. Advanced Intelligence and Awarenss Internet (AIAI 2010), 2010 International Conference on.
[2]Rao, N.S.V. , Comput. Sci. & Math. Div., Oak Ridge Nat. Lab., et al.On performance of individual, collective and network detection of propagative sources.Information Fusion (FUSION)[C]. 2012 15th International Conference on
[3]張瑋. 基于協(xié)議分析的網(wǎng)絡(luò)流量監(jiān)測系統(tǒng)研究與開發(fā)[D]. 湖南:中南大學. 2008:20-36.
[4]高豐,杜德慧. 基于蜜網(wǎng)的網(wǎng)絡(luò)監(jiān)測系統(tǒng)的設(shè)計與實現(xiàn)[D].江蘇:江南計算技術(shù)研究所.2011.9:42-56.
[5]張興忠,喬敏. 提高網(wǎng)頁瀏覽速度的探討[J].電腦開發(fā)與應(yīng)用,2012,25(1):55-57.
Design and implement of probe client in test system
WANG Dong1,2, LI Wei1,2, SHEN Qi-wei1,2
(1 State Key Lab of Networking and Switching Technology, Beijing Universi2ty of Posts and Telecommunications, Beijing 100876, China; 2 EBUPT Information Technology Co. Ltd, Beijing 100191, China)
AbstractInternet testing system is a distributed network performance monitoring system, through the perception of users to obtain the user's "real experience" information, to provide the most direct and scientifi c basis for the maintenance of the network maintenance personnel, probe system which is introduced in this paper is to simulate user's requests to gather data.
Keywordsuser experience; monitoring system; data collection
* 基金項目:國家973計劃項目(編號:2013CB329102);國家自然科學基金資助項目(No. 61471064,61372120, 61271019, 61101119, 61121001);長江學者和創(chuàng)新團隊發(fā)展計劃資助(編號:IRT1049);教育部科學技術(shù)研究重點(重大)項目資助(編號:MCM20130310);北京高等學校青年英才計劃項目(編號:YETP0473)。
收稿日期:2014-12-22
文章編號1008-5599(2015)01-0042-04
文獻標識碼A
中圖分類號TN929.5