本發(fā)明屬于數(shù)據(jù)傳輸領(lǐng)域,尤其涉及一種分布式文件的下載方法及裝置。
背景技術(shù):
隨著視頻監(jiān)控技術(shù)的發(fā)展,視頻監(jiān)控在各行各業(yè)中使用越來(lái)越廣泛,視頻監(jiān)控系統(tǒng)除了用于對(duì)各個(gè)監(jiān)控場(chǎng)所進(jìn)行實(shí)時(shí)視頻監(jiān)控外,在地鐵、監(jiān)獄、銀行、平安城市等視頻監(jiān)控系統(tǒng)中,還經(jīng)常會(huì)遇到需要將視頻監(jiān)控錄像下載到本地來(lái)進(jìn)行查看的情況。并且隨著科技的發(fā)展,視頻監(jiān)控越來(lái)越智能化,其中在對(duì)視頻監(jiān)控錄像進(jìn)行智能分析時(shí),為了更方便快速地進(jìn)行智能分析,也需要將視頻監(jiān)控錄像下載到本地。
現(xiàn)有技術(shù)下載視頻監(jiān)控錄像的方式,如圖1所示,視頻監(jiān)控錄像以分布式存儲(chǔ)的方式保存在多個(gè)數(shù)據(jù)節(jié)點(diǎn)DN上,每個(gè)視頻監(jiān)控客戶端UI都通過(guò)視頻點(diǎn)播服務(wù)器VOD從數(shù)據(jù)節(jié)點(diǎn)DN下載視頻監(jiān)控錄像。具體地,視頻監(jiān)控客戶端需要下載視頻監(jiān)控錄像時(shí),發(fā)送下載請(qǐng)求給視頻點(diǎn)播服務(wù)器VOD,視頻點(diǎn)播服務(wù)器VOD首先從各個(gè)數(shù)據(jù)節(jié)點(diǎn)DN上下載相應(yīng)的視頻監(jiān)控錄像,然后將下載的視頻監(jiān)控錄像推送給相應(yīng)的視頻監(jiān)控客戶端,從而完成視頻監(jiān)控錄像的下載。
現(xiàn)有技術(shù)雖然能進(jìn)行視頻監(jiān)控錄像的下載,但由于所有監(jiān)控視頻錄像的下載都需要經(jīng)過(guò)視頻點(diǎn)播服務(wù)器VOD,因此視頻點(diǎn)播服務(wù)器VOD成為監(jiān)控視頻錄像下載的瓶頸,特別是在視頻監(jiān)控客戶端較多,監(jiān)控視頻錄像下載需求較大的情況下尤其明顯。另外,如果視頻監(jiān)控客戶端和數(shù)據(jù)節(jié)點(diǎn)DN帶寬都很高,但是視頻點(diǎn)播服務(wù)器VOD帶寬不高的情況下,也會(huì)大大降低視頻監(jiān)控錄像的下載速度。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種分布式文件的下載方法及裝置,以解決現(xiàn)有技術(shù)進(jìn)行視頻監(jiān)控錄像下載時(shí),都要通過(guò)視頻點(diǎn)播服務(wù)器VOD來(lái)進(jìn)行,造成視頻點(diǎn)播服務(wù)器VOD成為監(jiān)控視頻錄像下載的瓶頸,嚴(yán)重影響視頻監(jiān)控錄像下載速度的問(wèn)題。
為了實(shí)現(xiàn)上述目的,本發(fā)明技術(shù)方案如下:
一種分布式文件的下載方法,應(yīng)用于文件下載客戶端,所述分布式文件的下載方法,包括:
發(fā)送數(shù)據(jù)節(jié)點(diǎn)請(qǐng)求消息給元數(shù)據(jù)管理服務(wù)器,獲取存儲(chǔ)下載文件的數(shù)據(jù)節(jié)點(diǎn)的信息;
發(fā)送查詢消息給存儲(chǔ)下載文件的數(shù)據(jù)節(jié)點(diǎn),獲取數(shù)據(jù)節(jié)點(diǎn)中存儲(chǔ)的下載文件的文件名;
根據(jù)獲取到的數(shù)據(jù)節(jié)點(diǎn)的信息,啟動(dòng)多個(gè)并發(fā)線程,每個(gè)并發(fā)線程與其中的一個(gè)數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng),發(fā)送包含下載文件名以及初始帶寬的文件下載請(qǐng)求給相應(yīng)的數(shù)據(jù)節(jié)點(diǎn),并根據(jù)數(shù)據(jù)節(jié)點(diǎn)依據(jù)所述文件下載請(qǐng)求為其分配的下載帶寬進(jìn)行文件下載;
統(tǒng)計(jì)實(shí)際下載帶寬,周期性向數(shù)據(jù)節(jié)點(diǎn)發(fā)送包含實(shí)際下載帶寬的下載帶寬更新請(qǐng)求,并根據(jù)數(shù)據(jù)節(jié)點(diǎn)依據(jù)所述下載帶寬更新請(qǐng)求為其分配的下載帶寬進(jìn)行文件下載。
所述文件下載請(qǐng)求中初始帶寬為設(shè)定的基礎(chǔ)帶寬,所述數(shù)據(jù)節(jié)點(diǎn)依據(jù)所述文件下載請(qǐng)求為其分配的下載帶寬,為數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬的預(yù)定比例。
所述下載帶寬更新請(qǐng)求中還包括預(yù)設(shè)的帶寬步長(zhǎng),所述下載帶寬更新請(qǐng)求中請(qǐng)求的預(yù)計(jì)帶寬為所述實(shí)際下載帶寬與預(yù)設(shè)的帶寬步長(zhǎng)之和,所述數(shù)據(jù)節(jié)點(diǎn)依據(jù)所述下載帶寬更新請(qǐng)求為其分配的下載帶寬,為數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬的預(yù)定比例與所述預(yù)計(jì)帶寬中的較小值。
本發(fā)明還提出了一種分布式文件的下載方法,應(yīng)用數(shù)據(jù)節(jié)點(diǎn),所述分布式文件的下載方法,包括:
接收文件下載客戶端的查詢消息,查詢出本設(shè)備存儲(chǔ)的下載文件的文件名,并發(fā)送給文件下載客戶端;
接收文件下載客戶端發(fā)送的包含下載文件名以及初始帶寬的文件下載請(qǐng)求,依據(jù)所述文件下載請(qǐng)求中的初始帶寬為其分配下載帶寬;
接收文件下載客戶端周期性發(fā)送的包含統(tǒng)計(jì)得到的實(shí)際下載帶寬的下載帶寬更新請(qǐng)求,依據(jù)所述下載帶寬更新請(qǐng)求中的實(shí)際下載帶寬為其分配下載帶寬。
所述依據(jù)所述文件下載請(qǐng)求中的初始帶寬為其分配下載帶寬,包括:
計(jì)算本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬,以本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬的預(yù)定比例作為為文件下載客戶端分配的下載帶寬。
所述下載帶寬更新請(qǐng)求中還包括預(yù)設(shè)的帶寬步長(zhǎng),所述下載帶寬更新請(qǐng)求中請(qǐng)求的預(yù)計(jì)帶寬為所述實(shí)際下載帶寬與預(yù)設(shè)的帶寬步長(zhǎng)之和,所述依據(jù)所述下載帶寬更新請(qǐng)求中的實(shí)際下載帶寬為其分配下載帶寬,包括:
計(jì)算本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬,以本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬的預(yù)定比例與所述預(yù)計(jì)帶寬中的較小值作為為文件下載客戶端分配的下載帶寬。
本發(fā)明還提出了一種分布式文件的下載裝置,應(yīng)用于文件下載客戶端,所述分布式文件的下載裝置,包括:
節(jié)點(diǎn)請(qǐng)求模塊,用于發(fā)送數(shù)據(jù)節(jié)點(diǎn)請(qǐng)求消息給元數(shù)據(jù)管理服務(wù)器,獲取存儲(chǔ)下載文件的數(shù)據(jù)節(jié)點(diǎn)的信息;
文件查詢模塊,用于發(fā)送查詢消息給存儲(chǔ)下載文件的數(shù)據(jù)節(jié)點(diǎn),獲取數(shù)據(jù)節(jié)點(diǎn)中存儲(chǔ)的下載文件的文件名;
下載模塊,用于根據(jù)獲取到的數(shù)據(jù)節(jié)點(diǎn)的信息,啟動(dòng)多個(gè)并發(fā)線程,每個(gè)并發(fā)線程與其中的一個(gè)數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng),發(fā)送包含下載文件名以及初始帶寬的文件下載請(qǐng)求給相應(yīng)的數(shù)據(jù)節(jié)點(diǎn),并根據(jù)數(shù)據(jù)節(jié)點(diǎn)依據(jù)所述文件下載請(qǐng)求為其分配的下載帶寬進(jìn)行文件下載;
更新模塊,用于統(tǒng)計(jì)實(shí)際下載帶寬,周期性向數(shù)據(jù)節(jié)點(diǎn)發(fā)送包含實(shí)際下載帶寬的下載帶寬更新請(qǐng)求,并根據(jù)數(shù)據(jù)節(jié)點(diǎn)依據(jù)所述下載帶寬更新請(qǐng)求為其分配的下載帶寬進(jìn)行文件下載。
本發(fā)明還提出了一種分布式文件的下載裝置,應(yīng)用數(shù)據(jù)節(jié)點(diǎn),所述分布式文件的下載裝置,包括:
查詢模塊,用于接收文件下載客戶端的查詢消息,查詢出本設(shè)備存儲(chǔ)的下載文件的文件名,并發(fā)送給文件下載客戶端;
初始帶寬分配模塊,用于接收文件下載客戶端發(fā)送的包含下載文件名以及初始帶寬的文件下載請(qǐng)求,依據(jù)所述文件下載請(qǐng)求中的初始帶寬為其分配下載帶寬;
帶寬更新模塊,用于接收文件下載客戶端周期性發(fā)送的包含統(tǒng)計(jì)得到的實(shí)際下載帶寬的下載帶寬更新請(qǐng)求,依據(jù)所述下載帶寬更新請(qǐng)求中的實(shí)際下載帶寬為其分配下載帶寬。
所述初始帶寬分配模塊在依據(jù)所述文件下載請(qǐng)求中的初始帶寬為其分配下載帶寬時(shí),執(zhí)行如下操作:
計(jì)算本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬,以本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬的預(yù)定比例作為為文件下載客戶端分配的下載帶寬。
所述下載帶寬更新請(qǐng)求中還包括預(yù)設(shè)的帶寬步長(zhǎng),所述下載帶寬更新請(qǐng)求中請(qǐng)求的預(yù)計(jì)帶寬為所述實(shí)際下載帶寬與預(yù)設(shè)的帶寬步長(zhǎng)之和,所述帶寬更新模塊在依據(jù)所述下載帶寬更新請(qǐng)求中的實(shí)際下載帶寬為其分配下載帶寬時(shí),執(zhí)行如下操作:
計(jì)算本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬,以本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬的預(yù)定比例與所述預(yù)計(jì)帶寬中的較小值作為為文件下載客戶端分配的下載帶寬。
本發(fā)明提出了一種分布式文件的下載方法及裝置,客戶端通過(guò)啟動(dòng)多個(gè)并發(fā)線程,每個(gè)并發(fā)線程與分布式存儲(chǔ)系統(tǒng)中一個(gè)數(shù)據(jù)節(jié)點(diǎn)建立連接并進(jìn)行分布式文件的下載,大大加快了分布式文件的下載速度,并在文件下載過(guò)程中,根據(jù)客戶端的下載能力以及數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬,周期性地更新下載帶寬,從而在使數(shù)據(jù)節(jié)點(diǎn)的下載帶寬得到合理利用的同時(shí),保證客戶端的下載速度最大化,提高了多客戶端同時(shí)下載的速度。解決了現(xiàn)有技術(shù)中客戶端進(jìn)行視頻監(jiān)控錄像下載時(shí),都要通過(guò)視頻點(diǎn)播服務(wù)器VOD來(lái)進(jìn)行,造成視頻點(diǎn)播服務(wù)器VOD成為監(jiān)控視頻錄像下載的瓶頸,嚴(yán)重影響視頻監(jiān)控錄像下載速度的問(wèn)題。本發(fā)明還通過(guò)統(tǒng)計(jì)數(shù)據(jù)節(jié)點(diǎn)中文件存儲(chǔ)的速度,并根據(jù)生成的文件上傳速度曲線,合理分配數(shù)據(jù)節(jié)點(diǎn)中總的存儲(chǔ)帶寬和總的下載帶寬,使數(shù)據(jù)節(jié)點(diǎn)在進(jìn)行文件下載時(shí),不會(huì)影響到文件的存儲(chǔ)。
附圖說(shuō)明
圖1為現(xiàn)有技術(shù)下載視頻監(jiān)控錄像的結(jié)構(gòu)示意圖;
圖2為本發(fā)明分布式文件的下載方法的流程圖;
圖3為本實(shí)施例網(wǎng)絡(luò)連接結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明技術(shù)方案做進(jìn)一步詳細(xì)說(shuō)明,以下實(shí)施例不構(gòu)成對(duì)本發(fā)明的限定。
一種分布式文件的下載方法,應(yīng)用于文件下載客戶端,如圖2所示,包括:
步驟S1、發(fā)送數(shù)據(jù)節(jié)點(diǎn)請(qǐng)求消息給元數(shù)據(jù)管理服務(wù)器,獲取存儲(chǔ)下載文件的數(shù)據(jù)節(jié)點(diǎn)的信息。
本實(shí)施例以視頻監(jiān)控系統(tǒng)中分布式存儲(chǔ)的視頻監(jiān)控錄像的下載為例來(lái)進(jìn)行說(shuō)明。本實(shí)施例視頻監(jiān)控錄像下載的示意圖,如圖3所示,MD為元數(shù)據(jù)管理服務(wù)器,用于對(duì)數(shù)據(jù)節(jié)點(diǎn)進(jìn)行管理;Client為存儲(chǔ)客戶端,部署在攝像機(jī)或者收流服務(wù)器上,用于將攝像機(jī)生成的視頻監(jiān)控錄像存儲(chǔ)在元數(shù)據(jù)管理服務(wù)器分配的數(shù)據(jù)節(jié)點(diǎn)上,實(shí)現(xiàn)視頻監(jiān)控?cái)?shù)據(jù)的分布式存儲(chǔ);DN為數(shù)據(jù)節(jié)點(diǎn),用于存儲(chǔ)視頻監(jiān)控?cái)?shù)據(jù);UI為視頻監(jiān)控客戶端,用于下載視頻監(jiān)控錄像,即文件下載客戶端。
本實(shí)施例視頻監(jiān)控錄像的存儲(chǔ)過(guò)程如下:存儲(chǔ)客戶端在進(jìn)行視頻監(jiān)控?cái)?shù)據(jù)存儲(chǔ)前,向元數(shù)據(jù)管理服務(wù)器發(fā)送請(qǐng)求消息,請(qǐng)求獲取數(shù)據(jù)節(jié)點(diǎn)的信息,元數(shù)據(jù)管理服務(wù)器按分布式存儲(chǔ)的原則分配相應(yīng)的數(shù)據(jù)節(jié)點(diǎn),并將所分配的數(shù)據(jù)節(jié)點(diǎn)的信息反饋給存儲(chǔ)客戶端,存儲(chǔ)客戶端根據(jù)接收到的數(shù)據(jù)節(jié)點(diǎn)的信息,例如IP地址,將視頻監(jiān)控?cái)?shù)據(jù)寫(xiě)入該數(shù)據(jù)節(jié)點(diǎn)。存儲(chǔ)客戶端將視頻監(jiān)控?cái)?shù)據(jù)寫(xiě)入數(shù)據(jù)節(jié)點(diǎn)的具體步驟為:存儲(chǔ)客戶端先在數(shù)據(jù)節(jié)點(diǎn)上創(chuàng)建一個(gè)以攝像機(jī)編碼為目錄名的目錄,然后在以攝像機(jī)編碼為目錄名的目錄下創(chuàng)建一個(gè)以當(dāng)前日期為目錄名的子目錄,然后在以當(dāng)前日期為目錄名的子目錄中創(chuàng)建一個(gè)文件名中包含寫(xiě)入的視頻監(jiān)控錄像的起始時(shí)間及結(jié)束時(shí)間的文件,將視頻監(jiān)控錄像寫(xiě)入該文件中。例如,存儲(chǔ)客戶端在DN1中創(chuàng)建了文件:/cam1/20160819/S0830000E103000B.h3crd,該文件表示視頻監(jiān)控錄像的攝像機(jī)編碼為cam1,視頻監(jiān)控錄像的日期為2016年08月19日,視頻監(jiān)控錄像的時(shí)間為08:30:00到10:30:00。
需要說(shuō)明的是,為了實(shí)現(xiàn)視頻監(jiān)控錄像的分布式存儲(chǔ),本實(shí)施例存儲(chǔ)客戶端根據(jù)預(yù)設(shè)的時(shí)間段將攝像機(jī)的視頻監(jiān)控?cái)?shù)據(jù)存儲(chǔ)在不同的數(shù)據(jù)節(jié)點(diǎn)上。例如,預(yù)設(shè)的時(shí)間段為二個(gè)小時(shí),攝像機(jī)開(kāi)機(jī)后(開(kāi)機(jī)時(shí)間為8:30),存儲(chǔ)客戶端向元數(shù)據(jù)管理服務(wù)器請(qǐng)求分配數(shù)據(jù)節(jié)點(diǎn),元數(shù)據(jù)管理服務(wù)器分配的數(shù)據(jù)節(jié)點(diǎn)為DN1,存儲(chǔ)客戶端將攝像機(jī)8:30~10:30的視頻監(jiān)控?cái)?shù)據(jù)寫(xiě)入數(shù)據(jù)節(jié)點(diǎn)DN1,在早上10:30重新向元數(shù)據(jù)管理服務(wù)器請(qǐng)求分配數(shù)據(jù)節(jié)點(diǎn),元數(shù)據(jù)管理服務(wù)器分配數(shù)據(jù)節(jié)點(diǎn)DN2,存儲(chǔ)客戶端將攝像機(jī)10:30~12:30的視頻監(jiān)控?cái)?shù)據(jù)寫(xiě)入數(shù)據(jù)節(jié)點(diǎn)DN2,如此循環(huán)往復(fù),實(shí)現(xiàn)攝像機(jī)視頻監(jiān)控錄像的分布式存儲(chǔ)。
本實(shí)施例視頻監(jiān)控客戶端需要下載視頻監(jiān)控錄像時(shí),首先發(fā)送數(shù)據(jù)節(jié)點(diǎn)獲取請(qǐng)求消息給元數(shù)據(jù)管理服務(wù)器,該請(qǐng)求消息中攜帶有需要下載的視頻監(jiān)控錄像的攝像機(jī)編碼。元數(shù)據(jù)管理服務(wù)器根據(jù)該請(qǐng)求消息中的攝像機(jī)編碼查詢出所有存儲(chǔ)該攝像機(jī)視頻監(jiān)控錄像的數(shù)據(jù)節(jié)點(diǎn),并將查詢出的數(shù)據(jù)節(jié)點(diǎn)的信息(例如數(shù)據(jù)節(jié)點(diǎn)的IP地址)發(fā)送給視頻監(jiān)控客戶端。
通過(guò)上述方法,本實(shí)施例獲取到存儲(chǔ)下載文件的數(shù)據(jù)節(jié)點(diǎn)的信息。
步驟S2、發(fā)送查詢消息給存儲(chǔ)下載文件的數(shù)據(jù)節(jié)點(diǎn),獲取數(shù)據(jù)節(jié)點(diǎn)中存儲(chǔ)的下載文件的文件名。
本實(shí)施例獲取存儲(chǔ)下載文件的數(shù)據(jù)節(jié)點(diǎn)的信息后,將所需下載的視頻監(jiān)控錄像的攝像機(jī)編碼和時(shí)間段發(fā)送給上述每個(gè)數(shù)據(jù)節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn)查找本設(shè)備的文件系統(tǒng)中是否保存有所述攝像機(jī)在該時(shí)間段內(nèi)的視頻監(jiān)控錄像,如果有所述攝像機(jī)在該時(shí)間段內(nèi)的視頻監(jiān)控錄像,則將視頻監(jiān)控錄像的文件名發(fā)送給視頻監(jiān)控客戶端,如果沒(méi)有所述攝像機(jī)在該時(shí)間段內(nèi)的視頻監(jiān)控錄像,則發(fā)送文件不存在的消息給視頻監(jiān)控客戶端。
例如,本實(shí)施例視頻監(jiān)控客戶端需要下載攝像機(jī)編碼為cam1,時(shí)間為2016年08月19日9:00~12:30的視頻監(jiān)控錄像;DN1上存儲(chǔ)有攝像機(jī)編碼為cam1,時(shí)間為2016年08月19日8:30~10:30的視頻監(jiān)控錄像,且存儲(chǔ)的目錄和文件名為:/cam1/20160819/S0830000E103000B.h3crd;DN2上存儲(chǔ)有攝像機(jī)編碼為cam1,時(shí)間為2016年08月19日10:30~12:30的視頻監(jiān)控錄像,且存儲(chǔ)的目錄和文件名為:/cam1/20160819/S1030000E123000B.h3crd;DN3上存儲(chǔ)有攝像機(jī)編碼為cam1,時(shí)間為2016年08月19日12:30~14:30的視頻監(jiān)控錄像,且存儲(chǔ)的目錄和文件名為:/cam1/20160819/S1230000E143000B.h3crd。視頻客戶端將需要下載的視頻監(jiān)控錄像的攝像機(jī)編碼cam1、時(shí)間段2016年08月19日10:30~12:30分別發(fā)送給DN1、DN2、DN3;DN1查詢本設(shè)備中的視頻監(jiān)控錄像,發(fā)現(xiàn)有滿足上述條件的視頻監(jiān)控錄像,將視頻監(jiān)控錄像的文件名S0830000E103000B.h3crd發(fā)送給視頻監(jiān)控客戶端;DN2查詢本設(shè)備中的視頻監(jiān)控錄像,發(fā)現(xiàn)有滿足上述條件的視頻監(jiān)控錄像,將視頻監(jiān)控錄像的文件名S1030000E123000B.h3crd發(fā)送給視頻監(jiān)控客戶端;DN3查詢本設(shè)備中的視頻監(jiān)控錄像,發(fā)現(xiàn)沒(méi)有滿足上述條件的視頻監(jiān)控錄像,發(fā)送文件不存在的消息給視頻監(jiān)控客戶端。
通過(guò)上述方法,本實(shí)施例獲取到數(shù)據(jù)節(jié)點(diǎn)中存儲(chǔ)的下載文件的文件名。
步驟S3、根據(jù)獲取到的數(shù)據(jù)節(jié)點(diǎn)的信息,啟動(dòng)多個(gè)并發(fā)線程,每個(gè)并發(fā)線程與其中的一個(gè)數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng),發(fā)送包含下載文件名以及初始帶寬的文件下載請(qǐng)求給相應(yīng)的數(shù)據(jù)節(jié)點(diǎn),并根據(jù)數(shù)據(jù)節(jié)點(diǎn)依據(jù)所述文件下載請(qǐng)求為其分配的下載帶寬進(jìn)行文件下載。
本實(shí)施例在獲取到存儲(chǔ)所需下載的視頻監(jiān)控錄像的數(shù)據(jù)節(jié)點(diǎn)信息以及數(shù)據(jù)節(jié)點(diǎn)上存儲(chǔ)的視頻監(jiān)控錄像的文件名后,啟動(dòng)多個(gè)并發(fā)線程,并發(fā)線程的數(shù)量與所獲取的數(shù)據(jù)節(jié)點(diǎn)的數(shù)量相同,每個(gè)并發(fā)線程與其中的一個(gè)數(shù)據(jù)節(jié)點(diǎn)建立連接,然后通過(guò)建立的連接下載相應(yīng)的視頻監(jiān)控錄像文件,每個(gè)并發(fā)線程每次下載一個(gè)視頻監(jiān)控錄像文件。
每個(gè)并發(fā)線程下載視頻監(jiān)控錄像文件的過(guò)程如下:
首先發(fā)送文件下載請(qǐng)求給數(shù)據(jù)節(jié)點(diǎn),文件下載請(qǐng)求包含下載的視頻監(jiān)控錄像的文件名以及初始帶寬,其中初始帶寬為設(shè)定的基礎(chǔ)帶寬,一般設(shè)為0。數(shù)據(jù)節(jié)點(diǎn)中配置有最大并發(fā)下載文件數(shù)和最小下載帶寬分配閥值,數(shù)據(jù)節(jié)點(diǎn)收到下載請(qǐng)求后,查詢當(dāng)前正在下載的文件數(shù)和數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬,如果當(dāng)前正在下載的文件數(shù)等于最大并發(fā)下載文件數(shù),或者數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬小于最小下載帶寬分配閥值,則返回下載拒絕的消息,此時(shí)會(huì)出現(xiàn)下載失敗,該并發(fā)線程會(huì)根據(jù)預(yù)設(shè)的時(shí)間周期重新發(fā)起下載請(qǐng)求。
如果當(dāng)前正在下載的文件數(shù)小于最大并發(fā)下載文件數(shù),并且數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬大于最小下載帶寬分配閥值,則根據(jù)本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬以及下載請(qǐng)求中預(yù)計(jì)帶寬進(jìn)行該線程的下載帶寬分配。
數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬通過(guò)如下方法計(jì)算得到:
首先確定數(shù)據(jù)節(jié)點(diǎn)的總下載帶寬,可以通過(guò)二種方法確定。
1、根據(jù)數(shù)據(jù)節(jié)點(diǎn)的總帶寬以及預(yù)設(shè)的存儲(chǔ)帶寬與下載帶寬的比例,計(jì)算出數(shù)據(jù)節(jié)點(diǎn)的總下載帶寬。例如數(shù)據(jù)節(jié)點(diǎn)的總帶寬為1000Mbit/s,預(yù)設(shè)的存儲(chǔ)帶寬與下載帶寬的比例為8:2,則得到數(shù)據(jù)節(jié)點(diǎn)的總下載帶寬為200Mbit/s。
2、由于視頻監(jiān)控系統(tǒng)中視頻存儲(chǔ)的流量比較恒定,因此可以通過(guò)統(tǒng)計(jì)數(shù)據(jù)節(jié)點(diǎn)的實(shí)時(shí)存儲(chǔ)流量,得到視頻存儲(chǔ)的流量曲線,根據(jù)視頻存儲(chǔ)的流量曲線確定數(shù)據(jù)節(jié)點(diǎn)的總下載帶寬為總帶寬減去存儲(chǔ)帶寬。
然后用數(shù)據(jù)節(jié)點(diǎn)的總下載帶寬減去已分配的下載帶寬,得到數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬。
由于下載請(qǐng)求中初始帶寬為0,即發(fā)送下載請(qǐng)求的線程不知道自己的網(wǎng)絡(luò)環(huán)境支持的下載帶寬值,為了使下載速度最大,本實(shí)施例將數(shù)據(jù)節(jié)點(diǎn)剩余下載帶寬的80%分配給該線程,該線程根據(jù)數(shù)據(jù)節(jié)點(diǎn)分配的下載帶寬進(jìn)行視頻監(jiān)控錄像文件的下載。
容易理解的是,數(shù)據(jù)節(jié)點(diǎn)在分配帶寬時(shí),可以采取多種方法來(lái)分配,在數(shù)據(jù)節(jié)點(diǎn)剩余下載帶寬的允許范圍內(nèi)來(lái)分配,例如直接分配固定的帶寬等,這里不再贅述。
步驟S4、統(tǒng)計(jì)實(shí)際下載帶寬,周期性向數(shù)據(jù)節(jié)點(diǎn)發(fā)送包含實(shí)際下載帶寬的下載帶寬更新請(qǐng)求,并根據(jù)數(shù)據(jù)節(jié)點(diǎn)依據(jù)所述下載帶寬更新請(qǐng)求為其分配的下載帶寬進(jìn)行文件下載。
為了使數(shù)據(jù)節(jié)點(diǎn)的下載帶寬得到合理利用,同時(shí)使線程的下載速度最大化,本實(shí)施例線程在視頻監(jiān)控錄像文件的下載過(guò)程中,會(huì)根據(jù)預(yù)設(shè)的周期閾值,周期性地發(fā)送下載帶寬更新請(qǐng)求給數(shù)據(jù)節(jié)點(diǎn)。下載帶寬更新請(qǐng)求中攜帶有實(shí)際下載帶寬,實(shí)際下載根據(jù)流量統(tǒng)計(jì)得到。
數(shù)據(jù)節(jié)點(diǎn)接收到下載帶寬更新請(qǐng)求后,根據(jù)下載帶寬更新請(qǐng)求中攜帶的實(shí)際下載帶寬,來(lái)為視頻監(jiān)控客戶端分配帶寬:
例如,當(dāng)統(tǒng)計(jì)出的實(shí)際下載帶寬為30Mbit/s時(shí),可以在30Mbit/s的基礎(chǔ)上,直接加上一個(gè)預(yù)設(shè)的帶寬步長(zhǎng)(假設(shè),預(yù)設(shè)的下載帶寬步長(zhǎng)為10Mbit/s),得到實(shí)際為視頻監(jiān)控客戶端分配的帶寬為40Mbit/s。
其中預(yù)設(shè)的帶寬步長(zhǎng)可以在視頻監(jiān)控客戶端來(lái)設(shè)置,也可以在數(shù)據(jù)節(jié)點(diǎn)設(shè)置。當(dāng)由視頻監(jiān)控客戶端設(shè)置該預(yù)設(shè)的帶寬步長(zhǎng)時(shí),在下載帶寬更新請(qǐng)求中需要包括該預(yù)設(shè)的帶寬步長(zhǎng)。而在數(shù)據(jù)節(jié)點(diǎn)設(shè)置時(shí),則下載帶寬更新請(qǐng)求僅包含實(shí)際下載帶寬即可。
因?yàn)閿?shù)據(jù)節(jié)點(diǎn)下載帶寬有限,本實(shí)施例先檢查本數(shù)據(jù)節(jié)點(diǎn)已分配的下載帶寬占總下載帶寬的比例是否大于預(yù)設(shè)的比例閾值(例如80%),如果小于預(yù)設(shè)的比例閾值,表示剩余下載帶寬還足夠,則將剩余下載帶寬的80%與預(yù)計(jì)帶寬中的較小值,作為分配給該線程的下載帶寬;如果大于或等于預(yù)設(shè)的比例閾值,則表示剩余下載帶寬比較緊張,則將當(dāng)前剩余下載帶寬的50%與預(yù)計(jì)帶寬中的較小值,作為分配給該線程的下載帶寬。
上述線程根據(jù)數(shù)據(jù)節(jié)點(diǎn)重新分配的下載帶寬繼續(xù)進(jìn)行視頻監(jiān)控錄像文件的下載,并重復(fù)上述過(guò)程,直到本視頻監(jiān)控錄像文件下載完成。
需要說(shuō)明的是,本實(shí)施例數(shù)據(jù)節(jié)點(diǎn)在每次分配完下載帶寬后,都會(huì)更新已分配下載帶寬,例如,數(shù)據(jù)節(jié)點(diǎn)在分配下載帶寬前的已分配帶寬為60Mbit/s,本次分配的下載帶寬為40Mbit/s,則在本次下載帶寬分配完成后將已分配下載帶寬更新為100Mbit/s。另外,數(shù)據(jù)節(jié)點(diǎn)在每次分配下載帶寬前,如果有可回收的下載帶寬,則先將可回收的下載帶寬進(jìn)行回收后,再進(jìn)行下載帶寬分配。例如某個(gè)線程在發(fā)送下載請(qǐng)求時(shí),數(shù)據(jù)節(jié)點(diǎn)分配給該線程的下載帶寬為100Mbit/s,當(dāng)該線程第一次發(fā)送下載帶寬更新請(qǐng)求時(shí),數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬為20Mbit/s,則先將分配給該線程的100Mbit/s下載帶寬回收,得到剩余下載帶寬為120Mbit/s,然后再進(jìn)行下載帶寬分配。
下面通過(guò)舉例對(duì)視頻監(jiān)控客戶端的線程從數(shù)據(jù)節(jié)點(diǎn)下載視頻監(jiān)控錄像文件進(jìn)行說(shuō)明:
假設(shè)某個(gè)數(shù)據(jù)節(jié)點(diǎn)DN1的最大下載帶寬為500Mbit/s,已分配下載帶寬為100Mbit/s,最小下載帶寬分配閥值為1Mbit/s,視頻監(jiān)控客戶端上線程預(yù)設(shè)的下載帶寬步長(zhǎng)10Mbit/s,預(yù)設(shè)的下載帶寬更新請(qǐng)求的周期閾值為5秒。
視頻監(jiān)控客戶端的某個(gè)并發(fā)線程首先發(fā)送下載請(qǐng)求消息給DN1,其中預(yù)計(jì)帶寬為0Mbit/s,DN1收到下載請(qǐng)求消息后,分配剩余下載帶寬的80%,即320Mbit/s給該并發(fā)線程,進(jìn)行視頻監(jiān)控錄像文件下載。
過(guò)了一個(gè)下載帶寬更新請(qǐng)求的周期閾值5s后,該并發(fā)線程統(tǒng)計(jì)出的實(shí)際下載帶寬為30Mbit/s,加上下載帶寬步長(zhǎng)10Mbit/s,得到預(yù)計(jì)帶寬為40Mbit/s,發(fā)送下載帶寬更新請(qǐng)求消息給DN1,DN1收到消息后,先回收之前分配的320Mbit/s,再分配給該并發(fā)線程40MMbit/s的下載帶寬,繼續(xù)進(jìn)行視頻監(jiān)控錄像文件下載。
又過(guò)了一個(gè)下載帶寬更新請(qǐng)求的周期閾值5s后,該并發(fā)線程統(tǒng)計(jì)出的實(shí)際下載帶寬為38Mbit/s,加上下載帶寬步長(zhǎng)10Mbit/s,得到預(yù)計(jì)帶寬為48Mbit/s,再發(fā)送下載帶寬更新請(qǐng)求消息給DN1,DN1收到消息后,先回收之前分配的40Mbit/s,再分配給該并發(fā)線程48MMbit/s的下載帶寬,繼續(xù)進(jìn)行視頻監(jiān)控錄像文件下載。
重復(fù)上述過(guò)程,直到該視頻監(jiān)控錄像文件下載完成。
通過(guò)上述方法,本實(shí)施例每個(gè)視頻監(jiān)控客戶端上的多個(gè)并發(fā)線程同時(shí)進(jìn)行各個(gè)數(shù)據(jù)節(jié)點(diǎn)上的視頻監(jiān)控錄像文件下載,充分利用了數(shù)據(jù)節(jié)點(diǎn)的下載帶寬和視頻監(jiān)控客戶端的下載能力,極大加快了視頻監(jiān)控錄像文件的下載。
對(duì)應(yīng)于上述方法,作為本發(fā)明的一個(gè)實(shí)施例,還提出了對(duì)應(yīng)的一種分布式文件的下載裝置,應(yīng)用于文件下載客戶端。該分布式文件的下載裝置,包括:
節(jié)點(diǎn)請(qǐng)求模塊,用于發(fā)送數(shù)據(jù)節(jié)點(diǎn)請(qǐng)求消息給元數(shù)據(jù)管理服務(wù)器,獲取存儲(chǔ)下載文件的數(shù)據(jù)節(jié)點(diǎn)的信息;
文件查詢模塊,用于發(fā)送查詢消息給存儲(chǔ)下載文件的數(shù)據(jù)節(jié)點(diǎn),獲取數(shù)據(jù)節(jié)點(diǎn)中存儲(chǔ)的下載文件的文件名;
下載模塊,用于根據(jù)獲取到的數(shù)據(jù)節(jié)點(diǎn)的信息,啟動(dòng)多個(gè)并發(fā)線程,每個(gè)并發(fā)線程與其中的一個(gè)數(shù)據(jù)節(jié)點(diǎn)對(duì)應(yīng),發(fā)送包含下載文件名以及初始帶寬的文件下載請(qǐng)求給相應(yīng)的數(shù)據(jù)節(jié)點(diǎn),并根據(jù)數(shù)據(jù)節(jié)點(diǎn)依據(jù)所述文件下載請(qǐng)求為其分配的下載帶寬進(jìn)行文件下載;
更新模塊,用于統(tǒng)計(jì)實(shí)際下載帶寬,周期性向數(shù)據(jù)節(jié)點(diǎn)發(fā)送包含實(shí)際下載帶寬的下載帶寬更新請(qǐng)求,并根據(jù)數(shù)據(jù)節(jié)點(diǎn)依據(jù)所述下載帶寬更新請(qǐng)求為其分配的下載帶寬進(jìn)行文件下載。
對(duì)應(yīng)于上述方法,作為本發(fā)明的一個(gè)實(shí)施例,還提出了對(duì)應(yīng)的一種分布式文件的下載裝置,應(yīng)用數(shù)據(jù)節(jié)點(diǎn)。該分布式文件的下載裝置,包括:
查詢模塊,用于接收文件下載客戶端的查詢消息,查詢出本設(shè)備存儲(chǔ)的下載文件的文件名,并發(fā)送給文件下載客戶端;
初始帶寬分配模塊,用于接收文件下載客戶端發(fā)送的包含下載文件名以及初始帶寬的文件下載請(qǐng)求,依據(jù)所述文件下載請(qǐng)求中的初始帶寬為其分配下載帶寬;
帶寬更新模塊,用于接收文件下載客戶端周期性發(fā)送的包含統(tǒng)計(jì)得到的實(shí)際下載帶寬的下載帶寬更新請(qǐng)求,依據(jù)所述下載帶寬更新請(qǐng)求中的實(shí)際下載帶寬為其分配下載帶寬。
其中,初始帶寬分配模塊在依據(jù)所述文件下載請(qǐng)求中的初始帶寬為其分配下載帶寬時(shí),執(zhí)行如下操作:
計(jì)算本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬,以本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬的預(yù)定比例作為為文件下載客戶端分配的下載帶寬。
當(dāng)下載帶寬更新請(qǐng)求中還包括預(yù)設(shè)的帶寬步長(zhǎng),所述下載帶寬更新請(qǐng)求中請(qǐng)求的預(yù)計(jì)帶寬為所述實(shí)際下載帶寬與預(yù)設(shè)的帶寬步長(zhǎng)之和,所述帶寬更新模塊在依據(jù)所述下載帶寬更新請(qǐng)求中的實(shí)際下載帶寬為其分配下載帶寬時(shí),執(zhí)行如下操作:
計(jì)算本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬,以本數(shù)據(jù)節(jié)點(diǎn)的剩余下載帶寬的預(yù)定比例與所述預(yù)計(jì)帶寬中的較小值作為為文件下載客戶端分配的下載帶寬。
以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案而非對(duì)其進(jìn)行限制,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。