一種流量動(dòng)態(tài)可控的系統(tǒng)監(jiān)控?cái)?shù)據(jù)采集方法
【專利摘要】本發(fā)明涉及數(shù)據(jù)采集和流量控制領(lǐng)域,具體是一種流量動(dòng)態(tài)可控的系統(tǒng)監(jiān)控?cái)?shù)據(jù)采集方法,所述的流量動(dòng)態(tài)可控的監(jiān)控?cái)?shù)據(jù)采集方法主要分為三個(gè)部分,分別是監(jiān)控?cái)?shù)據(jù)異步采集處理,流量控制開啟檢測(cè)和流控?cái)?shù)據(jù)合并機(jī)制;所述的監(jiān)控?cái)?shù)據(jù)異步采集處理方法如下:通過調(diào)用系統(tǒng)線程接口,監(jiān)控模塊在初始化后啟動(dòng)一個(gè)單獨(dú)的監(jiān)控?cái)?shù)據(jù)處理線程負(fù)責(zé)系統(tǒng)數(shù)據(jù)的多目標(biāo)處理輸出;動(dòng)態(tài)流控的一個(gè)總周期可以劃分為兩個(gè)階段:流控檢測(cè)階段Td和流控執(zhí)行階段Te。本發(fā)明同現(xiàn)有技術(shù)相比,其優(yōu)點(diǎn)在于:通過流速權(quán)控制算法,保證關(guān)鍵實(shí)時(shí)系統(tǒng)的平穩(wěn)運(yùn)行,能夠有效地滿足不同監(jiān)控目標(biāo)的監(jiān)控?cái)?shù)據(jù)采集需求,并通過特征數(shù)據(jù)的合并方法,保證了落地?cái)?shù)據(jù)的質(zhì)量。
【專利說明】一種流量動(dòng)態(tài)可控的系統(tǒng)監(jiān)控?cái)?shù)據(jù)采集方法
[【技術(shù)領(lǐng)域】]
[0001]本發(fā)明涉及數(shù)據(jù)采集和流量控制領(lǐng)域,具體是一種流量動(dòng)態(tài)可控的系統(tǒng)監(jiān)控?cái)?shù)據(jù)采集方法。
[【背景技術(shù)】]
[0002]系統(tǒng)狀態(tài)數(shù)據(jù)采集模塊可以實(shí)時(shí)記錄程序的運(yùn)行情況、錯(cuò)誤的發(fā)生現(xiàn)場(chǎng)等數(shù)據(jù),并輸出采集的數(shù)據(jù)到多個(gè)目標(biāo)如屏幕,文件和數(shù)據(jù)庫(kù),從而幫助開發(fā)人員和運(yùn)維人員了解系統(tǒng)狀態(tài)、審計(jì)操作流程、排查錯(cuò)誤原因、存檔系統(tǒng)數(shù)據(jù)等。因此,在關(guān)鍵實(shí)時(shí)系統(tǒng)的開發(fā)和運(yùn)行中,特別是對(duì)于具有高可用性目標(biāo)的交易系統(tǒng)來說,數(shù)據(jù)采集模塊的良好設(shè)計(jì)與實(shí)現(xiàn)不僅有利于代碼重用,而且對(duì)于系統(tǒng)的穩(wěn)定高效運(yùn)行具有重要的意義。
[0003]當(dāng)今主流的監(jiān)控?cái)?shù)據(jù)采集框架或多或少都借鑒了Log4j庫(kù)的設(shè)計(jì)理念。Log4j實(shí)現(xiàn)了一個(gè)基于Java的數(shù)據(jù)記錄工具框架,在Log4j中定義了 3個(gè)重要概念,分別是Logger、Appender和Layout:Logger用于定義不同的數(shù)據(jù)采集對(duì)象;Appender描述輸出流,如屏幕、文件、⑶I組件、Socket服務(wù)器、NT事件記錄器、syslog進(jìn)程服務(wù)等,通過為L(zhǎng)ogger指定一個(gè)Appender,可以區(qū)分不同對(duì)象的輸出目標(biāo);Layout用于指定監(jiān)控信息的輸出格式,通過為Appender來指定一個(gè)Layout,可以決定監(jiān)控信息以何種格式輸出,比如是否有帶有時(shí)間戳,是否包含文件位置信息等,通過這三個(gè)組件協(xié)同的工作,Log4j為監(jiān)控?cái)?shù)據(jù)采集行為控制提供了極大的靈活性,此外,基于預(yù)定義的等級(jí)和過濾器,可以自由地選擇需要記錄的數(shù)據(jù)。
[0004]Log4j雖然功能強(qiáng)大,但是該庫(kù)只是面向Java語(yǔ)言的,因此基于Log4j機(jī)制的其他語(yǔ)言替代庫(kù)相繼應(yīng)運(yùn)而生,Log4c便是模仿Log4j原理的C語(yǔ)言實(shí)現(xiàn)。類似地,它通過定義Category, Appender和Layout三個(gè)屬性唯一確定一個(gè)數(shù)據(jù)采集對(duì)象,Log4c不支持異步數(shù)據(jù)米集。
[0005]Log4g同樣是C語(yǔ)言的一個(gè)實(shí)現(xiàn),它基于glib的GObject開發(fā),支持異步數(shù)據(jù)輸出,此外Log4g還支持面向CouchDB的數(shù)據(jù)記錄,便于日后利用基于NoSQL環(huán)境的大數(shù)據(jù)分析。Log4cplus和Log4cxx是C++的Log4j實(shí)現(xiàn),它們具有線程安全、靈活輸出、以及多粒度控制的特點(diǎn),但Log4cplus的移植性不高,而Log4cxx雖然通過使用APR增強(qiáng)了移植性,但是APR本身增加了系統(tǒng)的依賴性。此外,Hog作為一款比較新的數(shù)據(jù)采集庫(kù),通過定義不同的fsync閾值來實(shí)現(xiàn)記錄監(jiān)控?cái)?shù)據(jù)落地請(qǐng)求和磁盤10工作的異步處理。
[0006]可以看到,現(xiàn)有的各種數(shù)據(jù)采集模塊雖然能夠?qū)崿F(xiàn)監(jiān)控信息的輸出,但是在設(shè)計(jì)上都比較簡(jiǎn)單,缺乏針對(duì)系統(tǒng)狀態(tài)變化時(shí)的動(dòng)態(tài)流量調(diào)整,因此在應(yīng)用系統(tǒng)的實(shí)時(shí)運(yùn)行中,如果突然出現(xiàn)大量錯(cuò)誤信息需要寫文件等情況,會(huì)在一段時(shí)間內(nèi)集中產(chǎn)生主機(jī)磁盤沖擊,此時(shí)文件10讀寫便會(huì)成為系統(tǒng)瓶頸,顯著降低系統(tǒng)的整體性能。此外,部分?jǐn)?shù)據(jù)采集模塊(如log4c)為了實(shí)現(xiàn)數(shù)據(jù)的及時(shí)輸出,采用同步落地機(jī)制,那么在進(jìn)行數(shù)據(jù)落地時(shí)會(huì)阻塞主邏輯的運(yùn)行,應(yīng)用進(jìn)程需要等待10輸出完成才能繼續(xù)后續(xù)代碼的執(zhí)行,于是在監(jiān)控事件大量突發(fā)時(shí),可能會(huì)因?yàn)榇疟P10吊住主程序的邏輯,從而對(duì)生產(chǎn)環(huán)境中實(shí)時(shí)程序的請(qǐng)求響應(yīng)產(chǎn)生災(zāi)難性的影響。
[0007]綜上,雖然目前有很多監(jiān)控?cái)?shù)據(jù)采集框架可供選擇,但是關(guān)鍵實(shí)時(shí)系統(tǒng)的高穩(wěn)定性和低延遲是重要的運(yùn)行指標(biāo),如果由于監(jiān)控邏輯的負(fù)載影響實(shí)時(shí)業(yè)務(wù)程序的運(yùn)行和業(yè)務(wù)處理的及時(shí)響應(yīng),那么在設(shè)計(jì)上是有顯著缺陷的。系統(tǒng)狀態(tài)數(shù)據(jù)的采集可以幫助管理人員快速了解系統(tǒng)的運(yùn)行情況、審計(jì)操作流程和排查錯(cuò)誤原因,但是對(duì)于某些關(guān)鍵實(shí)時(shí)系統(tǒng),如證券交易系統(tǒng)的穩(wěn)定性和高可用性是衡量其設(shè)計(jì)運(yùn)行水平的首要指標(biāo),那么在監(jiān)控的事件(如系統(tǒng)錯(cuò)誤等)頻繁發(fā)生的情況下,大規(guī)模的數(shù)據(jù)采集和落地反而會(huì)對(duì)系統(tǒng)的整體性能和穩(wěn)定性產(chǎn)生顯著影響,嚴(yán)重時(shí)甚至?xí)枞鲬?yīng)用程序的邏輯。
[
【發(fā)明內(nèi)容】
]
[0008]本發(fā)明的目的就是為了解決交易實(shí)時(shí)系統(tǒng)的系統(tǒng)狀態(tài)數(shù)據(jù)的采集過程中,大規(guī)模的數(shù)據(jù)采集和落地會(huì)對(duì)系統(tǒng)的整體性能和穩(wěn)定性產(chǎn)生顯著影響的技術(shù)問題,實(shí)現(xiàn)在大規(guī)模數(shù)據(jù)采集和落地時(shí)既保證實(shí)時(shí)系統(tǒng)的平穩(wěn)運(yùn)行,又可以有效地滿足特征數(shù)據(jù)的采集和分發(fā)工作的一種流量動(dòng)態(tài)可控的系統(tǒng)監(jiān)控?cái)?shù)據(jù)采集方法。
[0009]為了實(shí)現(xiàn)上述目的,發(fā)明一種流量動(dòng)態(tài)可控的系統(tǒng)監(jiān)控?cái)?shù)據(jù)采集方法,所述的流量動(dòng)態(tài)可控的監(jiān)控?cái)?shù)據(jù)采集方法主要分為三個(gè)部分,分別是監(jiān)控?cái)?shù)據(jù)異步采集處理,流量控制開啟檢測(cè)和流控?cái)?shù)據(jù)合并機(jī)制;
[0010]所述的監(jiān)控?cái)?shù)據(jù)異步采集處理方法如下:通過調(diào)用系統(tǒng)線程接口,監(jiān)控模塊在初始化后啟動(dòng)一個(gè)單獨(dú)的監(jiān)控?cái)?shù)據(jù)處理線程負(fù)責(zé)系統(tǒng)數(shù)據(jù)的多目標(biāo)處理輸出;單獨(dú)的監(jiān)控?cái)?shù)據(jù)處理線程不停輪詢數(shù)據(jù)輸出請(qǐng)求隊(duì)列,一旦發(fā)現(xiàn)有新的請(qǐng)求時(shí),就從隊(duì)頭彈出數(shù)據(jù)記錄并執(zhí)行真正的輸出請(qǐng)求,一直到將隊(duì)列中的記錄處理完畢;
[0011]所述的流量控制開啟檢測(cè)方法如下:監(jiān)控?cái)?shù)`采集庫(kù)的采集接口在進(jìn)行數(shù)據(jù)入隊(duì)操作時(shí),會(huì)實(shí)時(shí)檢查系統(tǒng)監(jiān)控事件的發(fā)生頻率,并動(dòng)態(tài)調(diào)整采集數(shù)據(jù)的流量,從而避免大量數(shù)據(jù)操作對(duì)系統(tǒng)整體性能的沖擊,流控算法首先在流控檢測(cè)周期內(nèi)計(jì)數(shù)到達(dá)隊(duì)列的數(shù)據(jù)請(qǐng)求數(shù)目,一旦該請(qǐng)求數(shù)達(dá)到或超過請(qǐng)求數(shù)閾值,就立即開啟流量控制機(jī)制,并一直持續(xù)到流控執(zhí)行周期的時(shí)間段結(jié)束。因此,動(dòng)態(tài)流控的一個(gè)總周期可以劃分為兩個(gè)階段:流控檢測(cè)階段^和流控執(zhí)行階段!;;
[0012]所述的流控?cái)?shù)據(jù)合并機(jī)制方法如下:在流控執(zhí)行周期,監(jiān)控?cái)?shù)據(jù)采集庫(kù)的采集接口不再將新到的數(shù)據(jù)加入數(shù)據(jù)輸出請(qǐng)求隊(duì)列,而是通過初始化時(shí)的哈希表進(jìn)行相同特征數(shù)據(jù)的合并,從而降低實(shí)際數(shù)據(jù)流量的目標(biāo),數(shù)據(jù)的合并機(jī)制是:對(duì)于未出現(xiàn)過的特征數(shù)據(jù)類型,在哈希表里面增加一條;否則,只增加相同記錄類型的計(jì)數(shù)。
[0013]所述的單獨(dú)的監(jiān)控?cái)?shù)據(jù)處理線程的數(shù)據(jù)輸出工作為屏幕打印或進(jìn)行磁盤文件寫入或通過網(wǎng)絡(luò)傳輸數(shù)據(jù)至遠(yuǎn)程的數(shù)據(jù)庫(kù)服務(wù)器。
[0014]所述的流控檢測(cè)周期設(shè)為0,表示始終不執(zhí)行流控;如果數(shù)據(jù)輸出請(qǐng)求數(shù)閾值設(shè)為0,表示始終執(zhí)行流控機(jī)制。
[0015]所述的監(jiān)控?cái)?shù)據(jù)異步采集處理方法需在采集模塊初始化時(shí)選定異步數(shù)據(jù)輸出請(qǐng)求隊(duì)列長(zhǎng)度,隊(duì)列長(zhǎng)度過小會(huì)導(dǎo)致大量監(jiān)控?cái)?shù)據(jù)無(wú)法入隊(duì)而被丟棄,所述的異步數(shù)據(jù)輸出請(qǐng)求隊(duì)列長(zhǎng)度選定方法如下:
[0016]監(jiān)控事件數(shù)據(jù)的到達(dá)和監(jiān)控事件數(shù)據(jù)的落地之差即為該時(shí)間段的隊(duì)列長(zhǎng)度的變化量△,在上一個(gè)交易日DT_1;$ ei表示第i秒內(nèi)發(fā)生的事件數(shù),對(duì)每條采集的數(shù)據(jù)定義了m個(gè)輸出目標(biāo),每個(gè)輸出目標(biāo)可以通過性能測(cè)試數(shù)據(jù)的平均值獲得其單條數(shù)據(jù)處理時(shí)間的
v = K ,
期望值_那么單位時(shí)間內(nèi)m個(gè)目標(biāo)的總服務(wù)速度(可以處理的數(shù)據(jù))為m /fJjj綜
【權(quán)利要求】
1.一種流量動(dòng)態(tài)可控的系統(tǒng)監(jiān)控?cái)?shù)據(jù)采集方法,其特征在于所述的流量動(dòng)態(tài)可控的監(jiān)控?cái)?shù)據(jù)采集方法主要分為三個(gè)部分,分別是監(jiān)控?cái)?shù)據(jù)異步采集處理,流量控制開啟檢測(cè)和流控?cái)?shù)據(jù)合并機(jī)制;所述的監(jiān)控?cái)?shù)據(jù)異步采集處理方法如下:通過調(diào)用系統(tǒng)線程接口,監(jiān)控模塊在初始化后啟動(dòng)一個(gè)單獨(dú)的監(jiān)控?cái)?shù)據(jù)處理線程負(fù)責(zé)系統(tǒng)數(shù)據(jù)的多目標(biāo)處理輸出;單獨(dú)的監(jiān)控?cái)?shù)據(jù)處理線程不停輪詢數(shù)據(jù)輸出請(qǐng)求隊(duì)列,一旦發(fā)現(xiàn)有新的請(qǐng)求時(shí),就從隊(duì)頭彈出數(shù)據(jù)記錄并執(zhí)行真正的輸出請(qǐng)求,一直到將隊(duì)列中的記錄處理完畢;所述的流量控制開啟檢測(cè)方法如下:監(jiān)控?cái)?shù)據(jù)采集庫(kù)的采集接口在進(jìn)行數(shù)據(jù)入隊(duì)操作時(shí),會(huì)實(shí)時(shí)檢查系統(tǒng)監(jiān)控事件的發(fā)生頻率,并動(dòng)態(tài)調(diào)整采集數(shù)據(jù)的流量,從而避免大量數(shù)據(jù)操作對(duì)系統(tǒng)整體性能的沖擊,流控算法首先在流控檢測(cè)周期內(nèi)計(jì)數(shù)到達(dá)隊(duì)列的數(shù)據(jù)請(qǐng)求數(shù)目,一旦該請(qǐng)求數(shù)達(dá)到或超過請(qǐng)求數(shù)閾值,就立即開啟流量控制機(jī)制,并一直持續(xù)到流控執(zhí)行周期的時(shí)間段結(jié)束。因此,動(dòng)態(tài)流控的一個(gè)總周期可以劃分為兩個(gè)階段:流控檢測(cè)階段Td和流控執(zhí)行階段?;;所述的流控?cái)?shù)據(jù)合并機(jī)制方法如下:在流控執(zhí)行周期,監(jiān)控?cái)?shù)據(jù)采集庫(kù)的采集接口不再將新到的數(shù)據(jù)加入數(shù)據(jù)輸出請(qǐng)求隊(duì)列,而是通過初始化時(shí)的哈希表進(jìn)行相同特征數(shù)據(jù)的合并,從而降低實(shí)際數(shù)據(jù)流量的目標(biāo),數(shù)據(jù)的合并機(jī)制是:對(duì)于未出現(xiàn)過的特征數(shù)據(jù)類型,在哈希表里面增加一條;否則,只增加相同記錄類型的計(jì)數(shù)。
2.如權(quán)利要求1所述的一種流量動(dòng)態(tài)可控的系統(tǒng)監(jiān)控?cái)?shù)據(jù)采集方法,其特征在于所述的單獨(dú)的監(jiān)控?cái)?shù)據(jù)處理線程的數(shù)據(jù)輸出工作為屏幕打印或進(jìn)行磁盤文件寫入或通過網(wǎng)絡(luò)傳輸數(shù)據(jù)至遠(yuǎn)程的數(shù)據(jù)庫(kù)服務(wù)器。
3.如權(quán)利要求1所述的一種流量動(dòng)態(tài)可控的系統(tǒng)監(jiān)控?cái)?shù)據(jù)采集方法,其特征在于所述的流控檢測(cè)周期設(shè)為0,表示始終不執(zhí)行流控;如果數(shù)據(jù)輸出請(qǐng)求數(shù)閾值設(shè)為0,表示始終執(zhí)行流控機(jī)制。
4.如權(quán)利要求1所述的一種流量動(dòng)態(tài)可控的系統(tǒng)監(jiān)控?cái)?shù)據(jù)采集方法,其特征在于所述的監(jiān)控?cái)?shù)據(jù)異步采集處理方法需在采集模塊初始化時(shí)選定異步數(shù)據(jù)輸出請(qǐng)求隊(duì)列長(zhǎng)度,隊(duì)列長(zhǎng)度過小會(huì)導(dǎo)致大量監(jiān)控?cái)?shù)據(jù)無(wú)法入隊(duì)而被丟棄,所述的異步數(shù)據(jù)輸出請(qǐng)求隊(duì)列長(zhǎng)度選定方法如下:監(jiān)控事件數(shù)據(jù)的到達(dá)和監(jiān)控事件數(shù)據(jù)的落地之差即為該時(shí)間段的隊(duì)列長(zhǎng)度的變化量Λ,在上一個(gè)交易日DT_i,令ei表示第i秒內(nèi)發(fā)生的事件數(shù),對(duì)每條采集的數(shù)據(jù)定義了 m個(gè)輸出目標(biāo),每個(gè)輸出目標(biāo)可以通過性能測(cè)試數(shù)據(jù)的平均值獲得其單條數(shù)據(jù)處理時(shí)間的期望值那么單位時(shí)間內(nèi)m個(gè)目標(biāo)的總服務(wù)速度(可以處理的數(shù)據(jù))為
5.如權(quán)利要求1所述的一種流量動(dòng)態(tài)可控的系統(tǒng)監(jiān)控?cái)?shù)據(jù)采集方法,其特征在于所述的流量控制具體方法如下:將一個(gè)流控周期Tw劃分為流控檢測(cè)階段^和流控執(zhí)行階段?;,定義λ =m/Td,其中,λ為數(shù)據(jù)到達(dá)速度的上限閾值,m為數(shù)據(jù)輸出請(qǐng)求數(shù)閾值,數(shù)據(jù)到達(dá)速度超過該閾值時(shí),認(rèn)為磁盤讀寫會(huì)對(duì)系統(tǒng)性能產(chǎn)生不良影響,對(duì)于相同的λ值,m設(shè)置的越低,Td就越低,即在一個(gè)周期內(nèi)會(huì)越早進(jìn)入流控執(zhí)行階段,系統(tǒng)總體性能的損耗會(huì)越少;另一方面,越早進(jìn)入流控執(zhí)行階段,就有越多的監(jiān)控信息被壓縮合并,對(duì)輸出結(jié)果的質(zhì)量產(chǎn)生削弱。
【文檔編號(hào)】G06F11/30GK103678085SQ201310688931
【公開日】2014年3月26日 申請(qǐng)日期:2013年12月16日 優(yōu)先權(quán)日:2013年12月16日
【發(fā)明者】金鑫, 武劍鋒, 王泊, 劉凱, 陳雷, 王程程, 惠敏順, 黃寅飛, 白碩 申請(qǐng)人:上海證券交易所