趙 勛,周成勝,靳文京,劉曉曼,王桂溫
(中國(guó)信息通信研究院 安全研究所,北京 100191)
隨著計(jì)算機(jī)信息技術(shù)、互聯(lián)網(wǎng)與物聯(lián)網(wǎng)技術(shù)的快速發(fā)展,各類數(shù)據(jù)資源呈現(xiàn)爆發(fā)式增長(zhǎng),海量數(shù)據(jù)的產(chǎn)生和積累已成為一種不可避免的趨勢(shì)。這些數(shù)據(jù)往往具有多源異構(gòu)、分布廣泛、動(dòng)態(tài)增長(zhǎng)等特點(diǎn)[1],如傳感器數(shù)據(jù)、社交網(wǎng)絡(luò)數(shù)據(jù)、視頻數(shù)據(jù)等,稱其為海量異構(gòu)數(shù)據(jù)。在眾多領(lǐng)域,海量異構(gòu)數(shù)據(jù)并發(fā)接入已成為一個(gè)重要且具有挑戰(zhàn)性的問題[2-4]。為了更好地管理和處理這些數(shù)據(jù),需要研究和設(shè)計(jì)高效的數(shù)據(jù)并發(fā)接入技術(shù)和策略,以實(shí)現(xiàn)數(shù)據(jù)的快速處理、分析和應(yīng)用。
在數(shù)據(jù)接入系統(tǒng)設(shè)計(jì)方面,已有研究人員在物聯(lián)網(wǎng)、車輛交通、電網(wǎng)調(diào)度等領(lǐng)域分別對(duì)于物聯(lián)網(wǎng)設(shè)備數(shù)據(jù)采集[5]、列車網(wǎng)絡(luò)設(shè)備實(shí)時(shí)數(shù)據(jù)采集[6]、電網(wǎng)智能調(diào)度數(shù)據(jù)采集[7]進(jìn)行了系統(tǒng)設(shè)計(jì),用來解決海量數(shù)據(jù)接入處理問題,但是這些系統(tǒng)設(shè)計(jì)均是針對(duì)特定的業(yè)務(wù)場(chǎng)景提出,缺少一定的通用性。
在海量異構(gòu)數(shù)據(jù)接入過程中,如何在高并發(fā)接入的場(chǎng)景下依然能夠確保接入系統(tǒng)穩(wěn)定可靠運(yùn)行是數(shù)據(jù)接入系統(tǒng)設(shè)計(jì)面臨的主要挑戰(zhàn)。在有限的集群資源前提下,當(dāng)海量異構(gòu)高并發(fā)數(shù)據(jù)產(chǎn)生接入任務(wù)時(shí),只有將接入任務(wù)合理分配并且快速執(zhí)行,才能保證數(shù)據(jù)的順利接入。相對(duì)于傳統(tǒng)主從任務(wù)分配機(jī)制[8],去中心化的任務(wù)分配機(jī)制具有更好的健壯性;由于集群的計(jì)算節(jié)點(diǎn)和通信網(wǎng)絡(luò)的異構(gòu)性或共享性,使得難以事先進(jìn)行計(jì)算負(fù)載和通信負(fù)載的估算,所以動(dòng)態(tài)負(fù)載均衡策略更適合用來調(diào)整集群節(jié)點(diǎn)負(fù)載[9],最終確保集群節(jié)點(diǎn)資源能夠得到高效的利用,達(dá)到海量數(shù)據(jù)的高并發(fā)可靠接入。
針對(duì)以上海量異構(gòu)數(shù)據(jù)并發(fā)接入的問題,本文提出一種基于動(dòng)態(tài)均衡技術(shù)的高并發(fā)海量異構(gòu)數(shù)據(jù)接入方法。該方法采用去中心化的任務(wù)分配機(jī)制,并結(jié)合動(dòng)態(tài)負(fù)載均衡技術(shù),基于三層系統(tǒng)邏輯架構(gòu),實(shí)現(xiàn)了海量異構(gòu)數(shù)據(jù)的高效采集接入。
基于動(dòng)態(tài)均衡技術(shù)的海量異構(gòu)數(shù)據(jù)高并發(fā)可靠接入系統(tǒng)架構(gòu)邏輯上分為三層,底部為異構(gòu)數(shù)據(jù)源,其與數(shù)據(jù)采集層對(duì)接,數(shù)據(jù)采集層從數(shù)據(jù)源采集到相關(guān)數(shù)據(jù)后寫入數(shù)據(jù)中心層,處理后供應(yīng)用系統(tǒng)使用。邏輯架構(gòu)如圖1所示,各部分詳細(xì)描述如下。
圖1 系統(tǒng)邏輯架構(gòu)圖
異構(gòu)數(shù)據(jù)源:海量數(shù)據(jù)的提供者,根據(jù)上層應(yīng)用需求提供各類型數(shù)據(jù),包括結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化等類型的數(shù)據(jù),是數(shù)據(jù)采集層采集海量數(shù)據(jù)的源頭。
數(shù)據(jù)采集層:根據(jù)所采集的數(shù)據(jù)特點(diǎn)和上層應(yīng)用不同的需求場(chǎng)景,提供SFTP、HTTPS、Kafka等采集接口與數(shù)據(jù)源對(duì)接,數(shù)據(jù)接口方式由相應(yīng)的采集節(jié)點(diǎn)集群完成,將海量數(shù)據(jù)從異構(gòu)數(shù)據(jù)源采集成功后提供到數(shù)據(jù)中心層。
數(shù)據(jù)中心層:實(shí)現(xiàn)大數(shù)據(jù)的存儲(chǔ)處理,采集來的各類異構(gòu)數(shù)據(jù)根據(jù)結(jié)構(gòu)化、半結(jié)構(gòu)化及非結(jié)構(gòu)化特點(diǎn)輸入相應(yīng)數(shù)據(jù)集群系統(tǒng),供上層應(yīng)用系統(tǒng)使用。
上述系統(tǒng)邏輯架構(gòu)并非基于某種特定的場(chǎng)景設(shè)計(jì),對(duì)于一般海量異構(gòu)數(shù)據(jù)高并發(fā)接入場(chǎng)景具有一定的通用性。
海量異構(gòu)數(shù)據(jù)接入方法主要包括節(jié)點(diǎn)負(fù)載計(jì)算方式、去中心化的任務(wù)分配機(jī)制、節(jié)點(diǎn)分配及回收策略、動(dòng)態(tài)負(fù)載均衡策略四部分內(nèi)容。節(jié)點(diǎn)負(fù)載計(jì)算方式明確了每個(gè)節(jié)點(diǎn)負(fù)載程度的量化表達(dá),是實(shí)現(xiàn)后續(xù)均衡調(diào)度的基礎(chǔ);去中心化的任務(wù)分配機(jī)制最大限度保障了集群執(zhí)行任務(wù)的高可靠性;節(jié)點(diǎn)分配及回收策略使得計(jì)算資源得到最大限度的利用,能夠有效應(yīng)對(duì)高并發(fā)場(chǎng)景;動(dòng)態(tài)負(fù)載均衡策略的設(shè)計(jì)從整體上對(duì)海量異構(gòu)數(shù)據(jù)接入進(jìn)行靈活調(diào)整。
數(shù)據(jù)采集層包括大量的采集節(jié)點(diǎn),所有節(jié)點(diǎn)組成采集節(jié)點(diǎn)總池,所有節(jié)點(diǎn)邏輯上均等,均可執(zhí)行不同類型采集接口任務(wù),系統(tǒng)根據(jù)相關(guān)策略動(dòng)態(tài)地將節(jié)點(diǎn)分配到SFTP、HTTPS、Kafka等節(jié)點(diǎn)集群中,并在運(yùn)行中根據(jù)任務(wù)及負(fù)載變化對(duì)節(jié)點(diǎn)進(jìn)行靈活調(diào)度。
當(dāng)采集節(jié)點(diǎn)投入使用時(shí),要根據(jù)節(jié)點(diǎn)負(fù)載進(jìn)行任務(wù)分配及節(jié)點(diǎn)調(diào)度。一般選擇CPU資源、內(nèi)存資源、當(dāng)前進(jìn)程數(shù)、響應(yīng)時(shí)間等作為評(píng)價(jià)參數(shù),全面衡量節(jié)點(diǎn)負(fù)載情況。
為了科學(xué)客觀地計(jì)算節(jié)點(diǎn)負(fù)載,必須將以上參數(shù)組合成一個(gè)綜合負(fù)載計(jì)算函數(shù)。常見的多指標(biāo)組合方式有加權(quán)乘法及加權(quán)和法[10],前者適用于各指標(biāo)不能互換,指標(biāo)相互間強(qiáng)關(guān)聯(lián)且具有同等重要性場(chǎng)景;后者適用于各指標(biāo)相互獨(dú)立,各指標(biāo)對(duì)于整體的影響能夠線性疊加,且指標(biāo)間具備一定互補(bǔ)性的場(chǎng)景。
根據(jù)以上特點(diǎn),本文采用了加權(quán)和法方式進(jìn)行負(fù)載指標(biāo)計(jì)算,將CPU資源、內(nèi)存資源、磁盤資源、當(dāng)前進(jìn)程數(shù)、響應(yīng)時(shí)間等重要信息作為計(jì)算公式的因子,每個(gè)因子對(duì)應(yīng)一個(gè)可變系數(shù)Ri,其中∑Ri=1。
具體負(fù)載計(jì)算公式如下:
Loadnode=R1×Loadcpu+R2×Loadmem+R3×LoadI/O+R4×Loadpid+R5×Loadresp
(1)
其中,Load***依次表示為:節(jié)點(diǎn)總負(fù)載(Loadnode)、CPU使用率(Loadcpu)、內(nèi)存使用率(Loadmem)、磁盤I/O訪問率(LoadI/O)、進(jìn)程總數(shù)(Loadpid)以及響應(yīng)時(shí)間(Loadresp)。進(jìn)程總數(shù)以及響應(yīng)時(shí)間根據(jù)硬件條件百分比化處理,數(shù)值在[0,1]區(qū)間。Ri系數(shù)根據(jù)具體節(jié)點(diǎn)集群類型進(jìn)行設(shè)置,比如SFTP集群中磁盤I/O訪問率更加重要,故可以將對(duì)應(yīng)的R3系數(shù)提高,而Kafka集群中CPU使用率和內(nèi)存使用率更加重要,故可將R1與R2系數(shù)設(shè)置較高。
傳統(tǒng)數(shù)據(jù)接入任務(wù)分配一般采用主從方式的任務(wù)分配機(jī)制,此機(jī)制存在一個(gè)專門負(fù)責(zé)分配任務(wù)的主節(jié)點(diǎn),該節(jié)點(diǎn)掌控全局資源,負(fù)責(zé)分配任務(wù)并向執(zhí)行節(jié)點(diǎn)下達(dá)相關(guān)指令[11]。當(dāng)主節(jié)點(diǎn)失效時(shí)則啟用備用節(jié)點(diǎn)進(jìn)行任務(wù)分配。此種機(jī)制最大的缺陷是隨著執(zhí)行節(jié)點(diǎn)數(shù)量的增加,任務(wù)分配節(jié)點(diǎn)的負(fù)載會(huì)越來越高,在海量任務(wù)情況下可能達(dá)到自身性能極限,此時(shí)會(huì)嚴(yán)重影響到任務(wù)分配機(jī)制正常運(yùn)轉(zhuǎn),而去中心化的任務(wù)分配方法比中心化方法具有更好的可擴(kuò)展性。在本文方法中使用如下分布式任務(wù)分配框架,如圖2所示。
圖2 分布式任務(wù)分配框架
管理者:通過狀態(tài)共享機(jī)下達(dá)節(jié)點(diǎn)指令和任務(wù)指令,節(jié)點(diǎn)指令包括激活和停止節(jié)點(diǎn),任務(wù)指令包括添加和刪除任務(wù)。
狀態(tài)共享機(jī):提供共享機(jī)制,讓各節(jié)點(diǎn)都掌握任務(wù)狀態(tài)和集群情況。包括:狀態(tài)管理模塊,負(fù)責(zé)狀態(tài)數(shù)據(jù)共享,維護(hù)狀態(tài)視圖;集群管理模塊,對(duì)各集群進(jìn)行管理,對(duì)節(jié)點(diǎn)進(jìn)行調(diào)度;事件管理模塊,負(fù)責(zé)處理對(duì)狀態(tài)視圖的監(jiān)聽請(qǐng)求以及狀態(tài)視圖變化時(shí)的事件流程;高可用模塊,負(fù)責(zé)保障維護(hù)狀態(tài)共享機(jī)的可用性;通信模塊,負(fù)責(zé)底層通信。
節(jié)點(diǎn):任務(wù)執(zhí)行者,分屬于空閑節(jié)點(diǎn)池、SFTP集群、HTTPS集群、Kafka集群。包括:任務(wù)模塊,負(fù)責(zé)執(zhí)行具體任務(wù);狀態(tài)檢測(cè)模塊,主要負(fù)責(zé)向狀態(tài)共享機(jī)進(jìn)行狀態(tài)同步,更新本地任務(wù)視圖;任務(wù)分配模塊,按照一定算法對(duì)新進(jìn)入任務(wù)進(jìn)行計(jì)算,將任務(wù)分配到具體節(jié)點(diǎn),同一集群內(nèi)算法一致,同一任務(wù)無論在哪個(gè)節(jié)點(diǎn)上計(jì)算后得出的結(jié)果相同;通信模塊,負(fù)責(zé)底層通信,進(jìn)行數(shù)據(jù)同步。
具體任務(wù)分配機(jī)制描述如下:
(1)注冊(cè):節(jié)點(diǎn)有兩種狀態(tài),即空閑(idle)和活動(dòng)(active),新節(jié)點(diǎn)開始時(shí)皆屬于空閑狀態(tài),在空閑節(jié)點(diǎn)池中,需要向狀態(tài)共享機(jī)進(jìn)行注冊(cè)后方可承接任務(wù)。
(2)激活:節(jié)點(diǎn)注冊(cè)后管理者可通過狀態(tài)共享機(jī)下達(dá)激活指令,節(jié)點(diǎn)進(jìn)入活動(dòng)狀態(tài)。狀態(tài)共享機(jī)中集群管理模塊按節(jié)點(diǎn)分配策略通知活動(dòng)節(jié)點(diǎn)進(jìn)入相關(guān)集群。
(3)請(qǐng)求最新狀態(tài)視圖:節(jié)點(diǎn)進(jìn)入相關(guān)集群后,將向共享狀態(tài)機(jī)進(jìn)行狀態(tài)視圖同步請(qǐng)求。
(4)同步最新狀態(tài)視圖:狀態(tài)共享機(jī)將最新狀態(tài)視圖發(fā)送給節(jié)點(diǎn)。
(5)狀態(tài)視圖監(jiān)聽:節(jié)點(diǎn)進(jìn)入活動(dòng)狀態(tài)后將向狀態(tài)共享機(jī)進(jìn)行申請(qǐng),對(duì)狀態(tài)視圖進(jìn)行持續(xù)監(jiān)聽,狀態(tài)共享機(jī)通過步驟(4)返回最新狀態(tài)視圖。
(6)任務(wù)分配計(jì)算與狀態(tài)更新:節(jié)點(diǎn)獲取最新狀態(tài)視圖后將任務(wù)分配模塊根據(jù)統(tǒng)一算法進(jìn)行任務(wù)分配計(jì)算(同一集群內(nèi)分配算法與策略一致),若本節(jié)點(diǎn)為下一任務(wù)接收節(jié)點(diǎn)則主動(dòng)進(jìn)行標(biāo)識(shí),完成承接任務(wù)準(zhǔn)備工作并向狀態(tài)共享機(jī)更新狀態(tài)視圖。
采集節(jié)點(diǎn)總池中節(jié)點(diǎn)個(gè)數(shù)為Ctotal,設(shè)置高負(fù)載閾值為L(zhǎng)oadmax,低負(fù)載閾值為L(zhǎng)oadmin。
節(jié)點(diǎn)分配及回收策略如下:
(2)新增數(shù)據(jù)源接口采集任務(wù)時(shí),根據(jù)采集類型將任務(wù)分配到相應(yīng)節(jié)點(diǎn)集群,并根據(jù)動(dòng)態(tài)負(fù)載均衡策略(見2.4節(jié))確定承接任務(wù)的運(yùn)行節(jié)點(diǎn)。當(dāng)一個(gè)判斷周期中某個(gè)節(jié)點(diǎn)集群中出現(xiàn)節(jié)點(diǎn)負(fù)載超過負(fù)載閾值Loadmax并持續(xù)超過TimeD時(shí),則分配一個(gè)新節(jié)點(diǎn)進(jìn)入相應(yīng)集群中。
(3)當(dāng)集群節(jié)點(diǎn)數(shù)量到達(dá)控制值(Sctrl、Hctrl、Kctrl,為相應(yīng)初始值的200%)后,則只有當(dāng)集群中50%的節(jié)點(diǎn)負(fù)載超過負(fù)載閾值Loadmax后才分配新節(jié)點(diǎn)。
(4)當(dāng)集群節(jié)點(diǎn)數(shù)量超過控制值(Sctrl、Hctrl、Kctrl),且一個(gè)判斷周期中集群內(nèi)所有節(jié)點(diǎn)負(fù)載都不超過負(fù)載閾值Loadmax,同時(shí)最小負(fù)載節(jié)點(diǎn)負(fù)載小于80%Loadmax時(shí),則對(duì)最小負(fù)載節(jié)點(diǎn)打上退出標(biāo)識(shí),不再對(duì)其分配任務(wù),等已有的任務(wù)執(zhí)行完畢后退出集群。
(5)當(dāng)集群節(jié)點(diǎn)數(shù)量小于等于控制值(Sctrl、Hctrl、Kctrl),且一個(gè)判斷周期中集群內(nèi)所有節(jié)點(diǎn)負(fù)載都不超過負(fù)載閾值Loadmax,同時(shí)最小負(fù)載節(jié)點(diǎn)負(fù)載小于50%Loadmax時(shí),則對(duì)最小負(fù)載節(jié)點(diǎn)打上退出標(biāo)識(shí),不再分配任務(wù),等已有的任務(wù)執(zhí)行完畢后退出集群。
(6)為避免節(jié)點(diǎn)回收速度過快,一個(gè)判斷周期內(nèi)同一集群只會(huì)有一個(gè)輕載節(jié)點(diǎn)退出,集群節(jié)點(diǎn)數(shù)量不會(huì)小于初始值(Smin、Hmin、Kmin)。
現(xiàn)有的負(fù)載均衡算法主要分為靜態(tài)和動(dòng)態(tài)兩類。靜態(tài)負(fù)載均衡算法以固定的概率分配任務(wù),不考慮服務(wù)器的狀態(tài)信息。動(dòng)態(tài)負(fù)載均衡算法以服務(wù)器的實(shí)時(shí)負(fù)載狀態(tài)信息來決定任務(wù)的分配。
靜態(tài)算法實(shí)現(xiàn)較為簡(jiǎn)單且資源消耗較小,但不能根據(jù)系統(tǒng)的實(shí)際運(yùn)行情況進(jìn)行調(diào)整,為了更大程度地保證系統(tǒng)運(yùn)行的靈活性與平穩(wěn)性,本文采用了一種動(dòng)態(tài)負(fù)載均衡算法,結(jié)合權(quán)重及負(fù)載計(jì)算的最小活躍數(shù)算法[12]。
最小活躍數(shù)算法會(huì)根據(jù)系統(tǒng)的實(shí)際情況進(jìn)行分發(fā),能夠靈活檢測(cè)出集群中各個(gè)節(jié)點(diǎn)的狀態(tài),自動(dòng)尋找并調(diào)用活躍度最低的節(jié)點(diǎn)處理請(qǐng)求。每個(gè)服務(wù)都有對(duì)應(yīng)的活躍數(shù),初始情況下,所有服務(wù)的活躍數(shù)均為0。每進(jìn)來一個(gè)請(qǐng)求,都把它分發(fā)給活躍數(shù)最低的服務(wù),服務(wù)每收到一個(gè)請(qǐng)求,活躍數(shù)加1,完成請(qǐng)求后則將活躍數(shù)減1。在服務(wù)運(yùn)行一段時(shí)間后,性能好的服務(wù)處理請(qǐng)求的速度更快,因此活躍數(shù)下降得也越快,此時(shí)這樣的服務(wù)能夠優(yōu)先獲取到新的請(qǐng)求,這就是最小活躍數(shù)負(fù)載均衡算法的基本思想。
但是在典型的最小活躍數(shù)算法中,如果一臺(tái)節(jié)點(diǎn)存在故障,導(dǎo)致它自身處理的請(qǐng)求數(shù)比較少,那么它會(huì)遭受最大的訪問壓力,這顯然是并不合理的。因此本文對(duì)其進(jìn)行了改進(jìn),加入了權(quán)重值和負(fù)載值兩個(gè)參數(shù),能夠更好地選擇合適節(jié)點(diǎn)。
設(shè)節(jié)點(diǎn)i的權(quán)重為Wi,當(dāng)前判斷周期內(nèi)的負(fù)載為L(zhǎng)oadi,當(dāng)前真實(shí)活躍數(shù)為Ni。則改進(jìn)后的活躍數(shù)N′i如式(2)所示:
N′i=(e[Loadi/K]+Ni)/Wi
(2)
其中K為負(fù)載檔位系數(shù),其與具體節(jié)點(diǎn)性能和平均任務(wù)消耗有關(guān),本文取K=0.1。
具體策略的執(zhí)行步驟如下:
(1)先從狀態(tài)共享機(jī)中獲取該集群所有的節(jié)點(diǎn)實(shí)例狀態(tài),計(jì)算改進(jìn)后的活躍數(shù)N′i,然后找出活躍數(shù)最小的節(jié)點(diǎn)。
(2)如果只有一個(gè),那么則直接選中對(duì)應(yīng)的實(shí)例節(jié)點(diǎn)處理本次請(qǐng)求。
(3)如果存在多個(gè),則根據(jù)當(dāng)前判斷周期內(nèi)的負(fù)載為L(zhǎng)oadi進(jìn)行比較,選中負(fù)載較小的節(jié)點(diǎn)。
(4)如果Loadi也相同,那么則選擇i較小的節(jié)點(diǎn)提供服務(wù)。
出于方便性考慮,本文采用云環(huán)境來進(jìn)行模擬實(shí)驗(yàn)。共準(zhǔn)備130臺(tái)云主機(jī),所有節(jié)點(diǎn)都是2核8 GB內(nèi)存,100 GB SSD,2 Gb/s內(nèi)網(wǎng)帶寬。其中30臺(tái)作為采集集群,100臺(tái)作為數(shù)據(jù)源集群。
數(shù)據(jù)源集群中僅提供單一SFTP、HTTPS、Kafka數(shù)據(jù)的節(jié)點(diǎn)各15臺(tái),同時(shí)提供兩類數(shù)據(jù)的節(jié)點(diǎn)各10臺(tái),同時(shí)提供三類數(shù)據(jù)的節(jié)點(diǎn)25臺(tái),以模擬復(fù)雜的數(shù)據(jù)采集條件。
采集集群則分兩次分別模擬使用本文方法的正常環(huán)境和使用傳統(tǒng)方法的對(duì)照環(huán)境。由于使用云主機(jī),必要時(shí)兩套環(huán)境可以使用快照方式進(jìn)行快速切換部署。
對(duì)照環(huán)境中SFTP、HTTPS、Kafka采集集群均衡分布,分別為10:10:10,其中任選兩臺(tái)同時(shí)作為主備任務(wù)分配節(jié)點(diǎn)。
正常環(huán)境中SFTP、HTTPS、Kafka集群的初始節(jié)點(diǎn)分別為3臺(tái)、4臺(tái)、3臺(tái)。剩下節(jié)點(diǎn)放入空閑節(jié)點(diǎn)池。
本實(shí)驗(yàn)正常環(huán)境中各集群負(fù)載計(jì)算的可變系數(shù)R1~R5設(shè)置如表1所示。
表1 可變系數(shù)初始化
負(fù)載閾值設(shè)置:Loadmax=95%,Loadmin=50%;節(jié)點(diǎn)數(shù)量設(shè)置:Smin=3,Hmin=4,Kmin=3,Sctrl=6,Hctrl=8,Kctrl=6;高負(fù)載持續(xù)時(shí)間TimeD=10 min。
測(cè)試時(shí)不斷增加采集并發(fā)連接數(shù),但三類數(shù)據(jù)源并發(fā)連接數(shù)增長(zhǎng)速度不同,分析使用本文接入方法的系統(tǒng)運(yùn)行情況與傳統(tǒng)采用最小連接數(shù)算法、加權(quán)輪詢算法的系統(tǒng)運(yùn)行情況,對(duì)比平均響應(yīng)時(shí)間及單位時(shí)間所接受的有效數(shù)據(jù)總量。
為了模擬真實(shí)采集情況,測(cè)試場(chǎng)景中數(shù)據(jù)并發(fā)連接數(shù)不是純線性增長(zhǎng),單個(gè)連接可能在完成了設(shè)定隨機(jī)傳輸總數(shù)據(jù)量后結(jié)束,也可能是達(dá)到某個(gè)傳輸時(shí)間后結(jié)束。但整體增長(zhǎng)比例事先約定,最終達(dá)到10 000并發(fā)連接總數(shù)。每個(gè)場(chǎng)景有3輪測(cè)試,每輪測(cè)試持續(xù)時(shí)間12 h,SFTP、HTTPS、Kafka數(shù)據(jù)源并發(fā)連接數(shù)增長(zhǎng)比例分別為1∶1∶1,3∶1∶1,1∶2∶4。為了避免單個(gè)數(shù)據(jù)連接占用大量帶寬,在發(fā)送端采用了一些限速手段,使單數(shù)據(jù)連接速度最大不超過10 Mb/s。
圖3~圖5分別是以上不同增長(zhǎng)比例條件下三種場(chǎng)景的平均響應(yīng)時(shí)間。平均響應(yīng)時(shí)間越短說明了負(fù)載均衡越有效。
圖3 數(shù)據(jù)源連接增長(zhǎng)比例1:1:1下三種場(chǎng)景平均響應(yīng)時(shí)間
圖4 數(shù)據(jù)源連接增長(zhǎng)比例3:1:1下三種場(chǎng)景平均響應(yīng)時(shí)間
圖5 數(shù)據(jù)源連接增長(zhǎng)比例1:2:4下三種場(chǎng)景平均響應(yīng)時(shí)間
圖6~圖8分別是以上不同增長(zhǎng)比例條件下三種場(chǎng)景的單位時(shí)間接收的有效數(shù)據(jù)總量。數(shù)據(jù)總量為整個(gè)采集集群1 min內(nèi)接收的3類不同數(shù)據(jù)累加所得。
圖6 數(shù)據(jù)源連接增長(zhǎng)比例1:1:1下三種場(chǎng)景接收有效數(shù)據(jù)總量
由圖7、圖8可見,在連接數(shù)超過4 000之后,本文方法逐漸占優(yōu);但超過8 000后,傳統(tǒng)方法有效接收數(shù)據(jù)總量曲線又向本文方法曲線靠攏,這是因?yàn)楸緶y(cè)試環(huán)境中在大連接數(shù)條件下所有采集節(jié)點(diǎn)網(wǎng)絡(luò)吞吐量基本已趨近物理接口上限。
圖7 數(shù)據(jù)源連接增長(zhǎng)比例3:1:1下三種場(chǎng)景接收有效數(shù)據(jù)總量
圖8 數(shù)據(jù)源連接增長(zhǎng)比例1:2:4下三種場(chǎng)景接收有效數(shù)據(jù)總量
從以上結(jié)果可以看出,輕載時(shí)本文方法與傳統(tǒng)方法性能接近。重載時(shí),若傳統(tǒng)方法中預(yù)分配的節(jié)點(diǎn)池比例和數(shù)據(jù)源實(shí)際情況比較接近,則本文方法與傳統(tǒng)方法差距很小;若傳統(tǒng)方法中預(yù)分配的節(jié)點(diǎn)池比例和數(shù)據(jù)源相差較大,則本文方法具備明顯優(yōu)勢(shì),平均響應(yīng)時(shí)間較小,而單位時(shí)間接收數(shù)據(jù)量更大。
最終可以得出如下結(jié)論:除非能正確預(yù)判各類數(shù)據(jù)源比例并根據(jù)此比例來設(shè)定采集節(jié)點(diǎn),否則在海量異構(gòu)數(shù)據(jù)源采集中本文方法比傳統(tǒng)方法具有更大優(yōu)勢(shì)。
本文方法根據(jù)實(shí)際場(chǎng)景設(shè)計(jì)相關(guān)策略、算法及機(jī)制,相對(duì)于業(yè)界常用方法具有較大優(yōu)勢(shì)。
節(jié)點(diǎn)負(fù)載計(jì)算的目的是準(zhǔn)確判斷節(jié)點(diǎn)負(fù)荷,是節(jié)點(diǎn)精確調(diào)度的基礎(chǔ)。業(yè)內(nèi)常用的方式有直接使用單一指標(biāo)的做法,比如直接調(diào)用CPU負(fù)載值,這樣雖然比較簡(jiǎn)單直觀,但不能完全反映節(jié)點(diǎn)負(fù)荷情況,因?yàn)楹芏嗲闆r下雖然CPU負(fù)載低但可能網(wǎng)絡(luò)負(fù)載、硬盤負(fù)載較高,實(shí)際上節(jié)點(diǎn)無力承受更多任務(wù)。業(yè)內(nèi)也存在使用加權(quán)乘法組合多指標(biāo)的做法,但是這種方式適用于多個(gè)指標(biāo)間互相關(guān)聯(lián)度高的場(chǎng)景,本文中采用CPU資源、內(nèi)存資源、當(dāng)前進(jìn)程數(shù)、響應(yīng)時(shí)間等評(píng)價(jià)參數(shù),各參數(shù)相互獨(dú)立,具備互補(bǔ)性,故采用加權(quán)和法公式,并根據(jù)節(jié)點(diǎn)具體用途設(shè)置權(quán)重,從而精確判斷負(fù)載情況。
傳統(tǒng)方法中的任務(wù)分配機(jī)制一般采用主從分配節(jié)點(diǎn)方式,正常情況下由主用節(jié)點(diǎn)負(fù)責(zé)任務(wù)分配,主用節(jié)點(diǎn)失效后轉(zhuǎn)由備用節(jié)點(diǎn)負(fù)責(zé)。此方式缺陷,一是主用節(jié)點(diǎn)在任務(wù)繁重時(shí)會(huì)比較重載,可能超過設(shè)備極限;二是主備節(jié)點(diǎn)切換時(shí)存在切換失效的可能,從而造成主備雙活情況,這時(shí)主備節(jié)點(diǎn)中的任務(wù)狀態(tài)不同步可能導(dǎo)致整個(gè)機(jī)制崩潰。本文中采用去中心化的任務(wù)分配方式,任意節(jié)點(diǎn)都可進(jìn)行任務(wù)分配,通過狀態(tài)共享機(jī)進(jìn)行同步,整個(gè)系統(tǒng)具備良好的擴(kuò)展性和健壯性。
傳統(tǒng)方法中的節(jié)點(diǎn)池很多采用預(yù)分配方式,此時(shí)節(jié)點(diǎn)不能在各池中調(diào)度,無法高效率對(duì)硬件資源進(jìn)行利用,可能存在相當(dāng)大比例的資源浪費(fèi)情況。本文中根據(jù)閾值動(dòng)態(tài)分配及回收節(jié)點(diǎn)到不同集群中,運(yùn)行效率更高也更靈活。
業(yè)界方法很多采用靜態(tài)負(fù)載均衡策略,如輪詢及根據(jù)硬件配置采用加權(quán)輪詢方式,此種方式雖然實(shí)現(xiàn)較為簡(jiǎn)單,但由于未考慮節(jié)點(diǎn)的狀態(tài)信息,可能導(dǎo)致將任務(wù)分配給重載或失效節(jié)點(diǎn)的情況。業(yè)界方法中也有根據(jù)單一指標(biāo)反饋進(jìn)行動(dòng)態(tài)負(fù)載均衡的策略,如最少連接數(shù)、最快響應(yīng)速度、最小活躍數(shù)等策略,但單一指標(biāo)并不能完整反映節(jié)點(diǎn)實(shí)際情況,存在分配錯(cuò)誤的可能。本文中采用了結(jié)合權(quán)重及負(fù)載計(jì)算的最小活躍數(shù)算法,通過多個(gè)維度全方面考察節(jié)點(diǎn)實(shí)時(shí)負(fù)載,最大程度地保證了負(fù)載均衡的準(zhǔn)確性。
本文針對(duì)海量異構(gòu)數(shù)據(jù)接入的挑戰(zhàn)和現(xiàn)有解決方法的缺陷,提出了一種基于動(dòng)態(tài)均衡技術(shù)的海量異構(gòu)數(shù)據(jù)高并發(fā)可靠接入方法。文中詳細(xì)介紹了該方法的體系結(jié)構(gòu)和實(shí)現(xiàn)細(xì)節(jié),包括節(jié)點(diǎn)負(fù)載計(jì)算方法、任務(wù)分配機(jī)制、分配與回收策略和動(dòng)態(tài)負(fù)載均衡策略等。該技術(shù)具有重要的實(shí)際應(yīng)用價(jià)值,特別是在大數(shù)據(jù)領(lǐng)域中,能夠更好地應(yīng)對(duì)海量異構(gòu)數(shù)據(jù)的高并發(fā)訪問需求,并提高數(shù)據(jù)接入的可靠性和效率。
網(wǎng)絡(luò)安全與數(shù)據(jù)管理2023年12期