本申請(qǐng)涉及計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別地,涉及一種內(nèi)容分發(fā)網(wǎng)絡(luò)及其數(shù)據(jù)下載方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)的快速發(fā)展,智能電視的普及,網(wǎng)絡(luò)數(shù)據(jù)流量成倍增長,會(huì)出現(xiàn)網(wǎng)絡(luò)擁塞并出現(xiàn)影響業(yè)務(wù)應(yīng)用體驗(yàn)的情況。內(nèi)容分發(fā)網(wǎng)絡(luò)(cdn,contentdeliverynetwork)作為一種能夠提高互聯(lián)網(wǎng)內(nèi)容傳輸效率的系統(tǒng),特別針對(duì)視頻等多媒體內(nèi)容傳輸?shù)姆?wù)質(zhì)量效率能得到很大提升,得到越來越廣泛的應(yīng)用。cdn是基于網(wǎng)絡(luò)和部署在各地的邊緣服務(wù)器,利用中心平臺(tái)的負(fù)載均衡、內(nèi)容分發(fā)、調(diào)度等功能模塊,使用戶就近獲取所需內(nèi)容,從而降低網(wǎng)絡(luò)擁塞,提高用戶訪問的響應(yīng)速度和命中率。
但在現(xiàn)有cdn系統(tǒng)中,為了控制系統(tǒng)配置成本,一般的邊緣服務(wù)器配置的存儲(chǔ)裝置容量是有限的,無法緩存中心平臺(tái)核心存儲(chǔ)中的所有內(nèi)容,當(dāng)提供服務(wù)的邊緣服務(wù)器沒有緩存用戶請(qǐng)求的介質(zhì)數(shù)據(jù)時(shí),就需要向中心平臺(tái)回源下載。因此,當(dāng)出現(xiàn)大量回源下載請(qǐng)求、特別是出現(xiàn)對(duì)同一介質(zhì)數(shù)據(jù)的回源下載請(qǐng)求時(shí),必然會(huì)給核心存儲(chǔ)造成巨大的負(fù)載壓力,較大程度的降低了中心平臺(tái)的服務(wù)性能。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)?zhí)峁┮环N內(nèi)容分發(fā)網(wǎng)絡(luò)及其數(shù)據(jù)下載方法,用于解決現(xiàn)有cdn系統(tǒng)當(dāng)出現(xiàn)大量回源下載請(qǐng)求時(shí)給核心存儲(chǔ)造成的巨大負(fù)載壓力問題。
本申請(qǐng)公開的一種內(nèi)容分發(fā)網(wǎng)絡(luò)的數(shù)據(jù)下載方法,所述內(nèi)容分發(fā)網(wǎng)絡(luò)包括通過網(wǎng)絡(luò)連接的核心存儲(chǔ)節(jié)點(diǎn)和二個(gè)以上的邊緣緩存節(jié)點(diǎn),位于同一地區(qū)的邊緣緩存節(jié)點(diǎn)組成一個(gè)邊緣節(jié)點(diǎn)組;在邊緣緩存節(jié)點(diǎn)側(cè),所述方法包括:判斷本邊緣節(jié)點(diǎn)組內(nèi)的其他邊緣緩存節(jié)點(diǎn)是否保存有需要下載的介質(zhì)數(shù)據(jù);若是,選擇本邊緣節(jié)點(diǎn)組內(nèi)保存有所述介質(zhì)數(shù)據(jù),且可用網(wǎng)絡(luò)帶寬最大的邊緣緩存節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn);從所述應(yīng)答節(jié)點(diǎn)下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù);若否,從上層節(jié)點(diǎn)回源下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù)。
優(yōu)選的,所述內(nèi)容分發(fā)網(wǎng)絡(luò)還包括設(shè)置在所述核心存儲(chǔ)節(jié)點(diǎn)和邊緣緩存節(jié)點(diǎn)之間的一層以上的中間緩存節(jié)點(diǎn),所述從上層節(jié)點(diǎn)回源下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù),具體包括:從邊緣緩存節(jié)點(diǎn)開始,重復(fù)向當(dāng)前節(jié)點(diǎn)的上層節(jié)點(diǎn)發(fā)出介質(zhì)數(shù)據(jù)下載請(qǐng)求,直至找到保存有該介質(zhì)數(shù)據(jù)的中間緩存節(jié)點(diǎn)或核心存儲(chǔ)節(jié)點(diǎn),并將該中間緩存節(jié)點(diǎn)或核心存儲(chǔ)節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn);從所述應(yīng)答節(jié)點(diǎn)的下層節(jié)點(diǎn)開始直至所述邊緣緩存節(jié)點(diǎn),逐級(jí)從當(dāng)前節(jié)點(diǎn)的上層節(jié)點(diǎn)下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù)。
優(yōu)選的,所述從上層節(jié)點(diǎn)回源下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù),還包括:若從所述應(yīng)答節(jié)點(diǎn)的下層節(jié)點(diǎn)開始直至所述邊緣緩存節(jié)點(diǎn),逐級(jí)從當(dāng)前節(jié)點(diǎn)的上層節(jié)點(diǎn)下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù)的過程失敗,所述邊緣緩存節(jié)點(diǎn)直接從核心存儲(chǔ)節(jié)點(diǎn)下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù)。
優(yōu)選的,各節(jié)點(diǎn)均存儲(chǔ)有所述介質(zhì)數(shù)據(jù)的切片內(nèi)容在本節(jié)點(diǎn)是否存在的狀態(tài)記錄信息;所述下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù),具體包括:請(qǐng)求下載節(jié)點(diǎn)將本節(jié)點(diǎn)中與所述介質(zhì)數(shù)據(jù)相關(guān)的狀態(tài)記錄信息發(fā)送至下載服務(wù)節(jié)點(diǎn);所述下載服務(wù)節(jié)點(diǎn)將本節(jié)點(diǎn)的狀態(tài)記錄信息與請(qǐng)求下載節(jié)點(diǎn)的狀態(tài)記錄信息進(jìn)行比較,選擇請(qǐng)求下載節(jié)點(diǎn)不存在的切片內(nèi)容返回至請(qǐng)求下載節(jié)點(diǎn);請(qǐng)求下載節(jié)點(diǎn)收到上述切片內(nèi)容并保存至本地的存儲(chǔ)器后,更新本節(jié)點(diǎn)的狀態(tài)記錄信息;其中,所述切片內(nèi)容指按預(yù)設(shè)的切片長度對(duì)介質(zhì)數(shù)據(jù)劃分得到的各個(gè)部分,每一部分為一個(gè)切片內(nèi)容。
優(yōu)選的,所述狀態(tài)記錄信息是一個(gè)或多個(gè)bitmap,所述bitmap中的每一位對(duì)應(yīng)于一切片內(nèi)容,其數(shù)值表示對(duì)應(yīng)的切片內(nèi)容在本節(jié)點(diǎn)是否存在。
優(yōu)選的,所述切片內(nèi)容是按設(shè)定的段大小將下載文件分成的一段或多段,每段按設(shè)定的塊大小分為多塊,每一段數(shù)據(jù)維護(hù)一個(gè)bitmap;在下載過程中,請(qǐng)求下載節(jié)點(diǎn)在下載每段數(shù)據(jù)時(shí)均先向下載服務(wù)節(jié)點(diǎn)發(fā)送該段數(shù)據(jù)的bitmap,然后下載服務(wù)節(jié)點(diǎn)根據(jù)本地和請(qǐng)求下載節(jié)點(diǎn)的該段數(shù)據(jù)的bitmap向請(qǐng)求下載節(jié)點(diǎn)返回相應(yīng)的塊數(shù)據(jù)。
優(yōu)選的,所述方法還包括:判斷一個(gè)群組內(nèi)是否有多個(gè)邊緣緩存節(jié)點(diǎn)需要到上層節(jié)點(diǎn)回源下載相同的介質(zhì)數(shù)據(jù),若是,指定一個(gè)邊緣緩存節(jié)點(diǎn)執(zhí)行回源下載流程,其他邊緣緩存節(jié)點(diǎn)從上述指定的邊緣緩存節(jié)點(diǎn)下載;和/或,判斷所述邊緣緩存節(jié)點(diǎn)是否有多個(gè)對(duì)需要下載的同樣的介質(zhì)數(shù)據(jù)的服務(wù)請(qǐng)求,若是,僅對(duì)第一個(gè)服務(wù)請(qǐng)求執(zhí)行數(shù)據(jù)下載過程,等所述邊緣緩存節(jié)點(diǎn)收到該介質(zhì)數(shù)據(jù)后,同時(shí)返回給需要此介質(zhì)數(shù)據(jù)服務(wù)的所有用戶。
本申請(qǐng)公開的一種內(nèi)容分發(fā)網(wǎng)絡(luò),包括通過網(wǎng)絡(luò)連接的核心存儲(chǔ)節(jié)點(diǎn)、二個(gè)以上的邊緣緩存節(jié)點(diǎn),位于同一地區(qū)的邊緣緩存節(jié)點(diǎn)組成一個(gè)邊緣節(jié)點(diǎn)組;所述邊緣緩存節(jié)點(diǎn)包括:組內(nèi)數(shù)據(jù)判斷模塊,用于判斷本邊緣節(jié)點(diǎn)組內(nèi)的其他邊緣緩存節(jié)點(diǎn)是否保存有需要下載的介質(zhì)數(shù)據(jù);組內(nèi)節(jié)點(diǎn)選擇模塊,用于當(dāng)本邊緣節(jié)點(diǎn)組內(nèi)的其他邊緣緩存節(jié)點(diǎn)保存有需要下載的介質(zhì)數(shù)據(jù)時(shí),選擇本邊緣節(jié)點(diǎn)組內(nèi)保存有所述介質(zhì)數(shù)據(jù)、且可用網(wǎng)絡(luò)帶寬最大的邊緣緩存節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn);介質(zhì)下載模塊,用于從應(yīng)答節(jié)點(diǎn)下載所述介質(zhì)數(shù)據(jù)并保存至本地存儲(chǔ)器;回源下載模塊,用于當(dāng)本邊緣節(jié)點(diǎn)組內(nèi)的其他邊緣緩存節(jié)點(diǎn)均沒有保存需要下載的介質(zhì)數(shù)據(jù)時(shí),向上級(jí)節(jié)點(diǎn)回源下載所述介質(zhì)數(shù)據(jù)并保存至本地存儲(chǔ)器。
優(yōu)選的,所述內(nèi)容分發(fā)網(wǎng)絡(luò)還包括設(shè)置在所述核心存儲(chǔ)節(jié)點(diǎn)和邊緣緩存節(jié)點(diǎn)之間的一層以上的中間緩存節(jié)點(diǎn),所述回源下載模塊包括:節(jié)點(diǎn)追溯子模塊,用于從邊緣緩存節(jié)點(diǎn)開始,重復(fù)向當(dāng)前節(jié)點(diǎn)的上層節(jié)點(diǎn)發(fā)出介質(zhì)數(shù)據(jù)下載請(qǐng)求,直至找到保存有該介質(zhì)數(shù)據(jù)的中間緩存節(jié)點(diǎn)或核心存儲(chǔ)節(jié)點(diǎn),將該中間緩存節(jié)點(diǎn)或核心存儲(chǔ)節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn);逐級(jí)下載子模塊,用于從所述應(yīng)答節(jié)點(diǎn)的下層節(jié)點(diǎn)開始直至所述邊緣緩存節(jié)點(diǎn),逐級(jí)從當(dāng)前節(jié)點(diǎn)的上層節(jié)點(diǎn)下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù)。
優(yōu)選的,各節(jié)點(diǎn)均存儲(chǔ)有所述介質(zhì)數(shù)據(jù)的切片內(nèi)容在本節(jié)點(diǎn)是否存在的狀態(tài)記錄信息;所述介質(zhì)下載模塊具體包括:狀態(tài)發(fā)送子模塊,用于將本邊緣緩存節(jié)點(diǎn)中與所述介質(zhì)數(shù)據(jù)相關(guān)的狀態(tài)記錄信息發(fā)送至所述應(yīng)答節(jié)點(diǎn);切片下載子模塊,用于接收所述應(yīng)答節(jié)點(diǎn)返回的本邊緣緩存節(jié)點(diǎn)不存在的切片內(nèi)容,其中,所述應(yīng)答節(jié)點(diǎn)通過比較本節(jié)點(diǎn)的狀態(tài)記錄信息與上述邊緣緩存節(jié)點(diǎn)的狀態(tài)記錄信息的方式選取上述邊緣緩存節(jié)點(diǎn)不存在的切片內(nèi)容;狀態(tài)更新子模塊,用于在收到上述不存在的切片內(nèi)容、并保存至本地的存儲(chǔ)器后,更新本節(jié)點(diǎn)的所述狀態(tài)記錄信息;其中,所述切片內(nèi)容指按預(yù)設(shè)的切片長度對(duì)介質(zhì)數(shù)據(jù)劃分得到的各個(gè)部分,每一部分為一個(gè)切片內(nèi)容。
與現(xiàn)有技術(shù)相比,本申請(qǐng)具有以下優(yōu)點(diǎn):
本申請(qǐng)優(yōu)選實(shí)施例中的邊緣緩存節(jié)點(diǎn)在下載介質(zhì)數(shù)據(jù)時(shí),優(yōu)先在本邊緣緩存節(jié)點(diǎn)組內(nèi)查找其他節(jié)點(diǎn)是否存儲(chǔ)有該介質(zhì)數(shù)據(jù),在本組內(nèi)的其他節(jié)點(diǎn)也沒有該介質(zhì)數(shù)據(jù)時(shí),才向上層節(jié)點(diǎn)回源下載,可以充分利用同組的邊緣緩存節(jié)點(diǎn)一般在同一個(gè)地區(qū)內(nèi)的特點(diǎn),不僅能夠節(jié)省網(wǎng)絡(luò)成本,數(shù)據(jù)傳輸速率也能夠得到更好的保障,可有效提高工作效率。另外,還能夠減少回上層下載的頻率,較大程度的減輕了上層節(jié)點(diǎn)(特別是核心緩存節(jié)點(diǎn))的壓力。
附圖說明
圖1為本申請(qǐng)內(nèi)容分發(fā)網(wǎng)絡(luò)的數(shù)據(jù)下載方法第一實(shí)施例的流程示意圖;
圖2為本申請(qǐng)內(nèi)容分發(fā)網(wǎng)絡(luò)的數(shù)據(jù)下載方法第二實(shí)施例的流程示意圖;
圖3為本申請(qǐng)實(shí)施例中邊緣緩存節(jié)點(diǎn)從應(yīng)答節(jié)點(diǎn)下載介質(zhì)數(shù)據(jù)的具體流程示意圖;
圖4為本申請(qǐng)內(nèi)容分發(fā)網(wǎng)絡(luò)第一實(shí)施例的結(jié)構(gòu)示意圖;
圖5為本申請(qǐng)內(nèi)容分發(fā)網(wǎng)絡(luò)第二實(shí)施例的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)的說明。
參照?qǐng)D1,示出了本申請(qǐng)內(nèi)容分發(fā)網(wǎng)絡(luò)的數(shù)據(jù)下載方法第一實(shí)施例的流程,所述內(nèi)容分發(fā)網(wǎng)絡(luò)包括通過網(wǎng)絡(luò)連接的核心存儲(chǔ)節(jié)點(diǎn)和二個(gè)以上的邊緣緩存節(jié)點(diǎn),位于同一地區(qū)的邊緣緩存節(jié)點(diǎn)組成一個(gè)邊緣節(jié)點(diǎn)組,在邊緣緩存節(jié)點(diǎn)側(cè),所述方法包括:
步驟s101:判斷本邊緣緩存節(jié)點(diǎn)組內(nèi)的其他邊緣緩存節(jié)點(diǎn)是否保存有需要下載的介質(zhì)數(shù)據(jù);若是,轉(zhuǎn)步驟s102;否則,轉(zhuǎn)步驟s104。當(dāng)邊緣緩存節(jié)點(diǎn)收到cdn中心平臺(tái)轉(zhuǎn)發(fā)的介質(zhì)數(shù)據(jù)下載請(qǐng)求時(shí),首先判斷本地是否緩存有該介質(zhì)數(shù)據(jù)。如果本地沒有緩存,則優(yōu)先在本組內(nèi)查找其他節(jié)點(diǎn)是否存儲(chǔ)有該介質(zhì)數(shù)據(jù);如果本組內(nèi)的其他節(jié)點(diǎn)也沒有該介質(zhì)數(shù)據(jù),才需要向上層節(jié)點(diǎn)回源下載。
步驟s102:將本邊緣緩存節(jié)點(diǎn)組內(nèi)保存有所述介質(zhì)數(shù)據(jù),且可用網(wǎng)絡(luò)帶寬最大的邊緣緩存節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn)。
在具體實(shí)施時(shí),為了使下載性能達(dá)到最優(yōu),可以在邊緣緩存節(jié)點(diǎn)組內(nèi)的每個(gè)邊緣節(jié)點(diǎn)中都記錄有去其他節(jié)點(diǎn)的下載速度,從而可方便的選擇可用網(wǎng)絡(luò)帶寬最大、且保存有所述介質(zhì)數(shù)據(jù)的邊緣緩存節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn)。
步驟s103:從所述應(yīng)答節(jié)點(diǎn)下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù)。
步驟s104:向上級(jí)節(jié)點(diǎn)回源下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù)。
在本優(yōu)選實(shí)施例中,當(dāng)邊緣緩存節(jié)點(diǎn)的直接上級(jí)節(jié)點(diǎn)為核心存儲(chǔ)節(jié)點(diǎn)時(shí)(如圖4所示),將該核心存儲(chǔ)節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn)。當(dāng)核心存儲(chǔ)節(jié)點(diǎn)和邊緣緩存節(jié)點(diǎn)組之間還設(shè)置有中間緩存節(jié)點(diǎn)時(shí)(如圖5所示),可以采用逐級(jí)回源下載的方式,即優(yōu)先選擇保存有該介質(zhì)數(shù)據(jù)的最低一級(jí)的中間緩存節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn);也可以采用直接回源下載方式,即直接將核心存儲(chǔ)節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn)。
本優(yōu)選實(shí)施例通過上述從本組內(nèi)邊緣節(jié)點(diǎn)共享介質(zhì)下載的手段,可以充分利用同群組節(jié)點(diǎn)一般在同一個(gè)地區(qū)內(nèi)的特點(diǎn),不僅能夠節(jié)省網(wǎng)絡(luò)成本,數(shù)據(jù)傳輸速率也能夠得到更好的保障,可有效提高工作效率。
另外,該技術(shù)手段還能夠減少回上層下載的頻率,較大程度的減輕了上層節(jié)點(diǎn)(各級(jí)中間緩存節(jié)點(diǎn)和核心緩存節(jié)點(diǎn))的壓力。
在具體實(shí)施時(shí),當(dāng)同一群組內(nèi)有多個(gè)邊緣緩存節(jié)點(diǎn)需要下載同一個(gè)介質(zhì)時(shí),為了避免多個(gè)同時(shí)去上層下載,上層需要復(fù)制多份數(shù)據(jù),分別發(fā)給相應(yīng)邊緣緩存節(jié)點(diǎn)的問題,減少介質(zhì)數(shù)據(jù)在不同層級(jí)之間的傳輸量,進(jìn)一步減輕上層節(jié)點(diǎn)(特別是核心存儲(chǔ)節(jié)點(diǎn))的壓力,可以采用指定一個(gè)邊緣緩存節(jié)點(diǎn)回上層回源下載的方式。
在另一個(gè)優(yōu)選實(shí)施例中,為了進(jìn)一步節(jié)省網(wǎng)絡(luò)帶寬,當(dāng)邊緣緩存節(jié)點(diǎn)收到多個(gè)對(duì)需要下載的同樣的介質(zhì)數(shù)據(jù)的服務(wù)請(qǐng)求時(shí)(即該同樣的介質(zhì)數(shù)據(jù)沒有緩存在本邊緣緩存節(jié)點(diǎn)),僅對(duì)第一個(gè)服務(wù)請(qǐng)求執(zhí)行上述數(shù)據(jù)下載過程,等所述邊緣緩存節(jié)點(diǎn)收到該介質(zhì)數(shù)據(jù)后,同時(shí)返回給需要此介質(zhì)數(shù)據(jù)服務(wù)的所有用戶。
參照?qǐng)D2,示出了本申請(qǐng)內(nèi)容分發(fā)網(wǎng)絡(luò)的數(shù)據(jù)下載方法第二實(shí)施例的流程,本優(yōu)選方法實(shí)施例與上述第一方法實(shí)施例的區(qū)別在于:內(nèi)容分發(fā)網(wǎng)絡(luò)在核心存儲(chǔ)節(jié)點(diǎn)和邊緣緩存節(jié)點(diǎn)之間還設(shè)置有一層或多次中間緩存節(jié)點(diǎn),其結(jié)構(gòu)形式如圖5所示。當(dāng)邊緣緩存節(jié)點(diǎn)收到cdn中心平臺(tái)轉(zhuǎn)發(fā)的介質(zhì)數(shù)據(jù)下載請(qǐng)求時(shí),首先判斷本地是否緩存有該介質(zhì)數(shù)據(jù);如果本節(jié)點(diǎn)沒有緩存,則優(yōu)先在本邊緣緩存節(jié)點(diǎn)組內(nèi)查找其他節(jié)點(diǎn)是否存儲(chǔ)有該介質(zhì)數(shù)據(jù);如果本組內(nèi)的其他節(jié)點(diǎn)也沒有該介質(zhì)數(shù)據(jù),則需要向上層中間緩存節(jié)點(diǎn)或核心存儲(chǔ)節(jié)點(diǎn)回源下載。本優(yōu)選實(shí)施例通過從中間緩存節(jié)點(diǎn)下載數(shù)據(jù)的手段,能夠進(jìn)一步分擔(dān)核心存儲(chǔ)節(jié)點(diǎn)的負(fù)載壓力,有效解決現(xiàn)有cdn系統(tǒng)當(dāng)出現(xiàn)大量回源下載請(qǐng)求、特別是出現(xiàn)對(duì)同一介質(zhì)數(shù)據(jù)的回源下載請(qǐng)求時(shí)可能給核心存儲(chǔ)造成的過載問題,較好的保證了cdn系統(tǒng)服務(wù)的穩(wěn)定性。本方法實(shí)施例包括:
步驟s201:判斷本邊緣緩存節(jié)點(diǎn)組內(nèi)的其他邊緣緩存節(jié)點(diǎn)是否保存有需要下載的介質(zhì)數(shù)據(jù);若是,轉(zhuǎn)步驟s202;否則,轉(zhuǎn)步驟s203。
步驟s202:將保存有所述介質(zhì)數(shù)據(jù)的可用網(wǎng)絡(luò)帶寬最大的邊緣緩存節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn),從應(yīng)答節(jié)點(diǎn)下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù)。
在具體實(shí)施時(shí),為了使下載性能達(dá)到最優(yōu),可以在群組內(nèi)的每個(gè)邊緣節(jié)點(diǎn)中都會(huì)記錄去其他節(jié)點(diǎn)的下載速度,從而可方便的選擇可用網(wǎng)絡(luò)帶寬最大、且保存有所述介質(zhì)數(shù)據(jù)的邊緣緩存節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn)。
步驟s203:所述邊緣緩存節(jié)點(diǎn)向上層中間緩存節(jié)點(diǎn)發(fā)出介質(zhì)數(shù)據(jù)下載請(qǐng)求。
步驟s204:判斷當(dāng)前接收介質(zhì)數(shù)據(jù)下載請(qǐng)求的節(jié)點(diǎn)是否為保存有該介質(zhì)數(shù)據(jù)的中間緩存節(jié)點(diǎn)或核心存儲(chǔ)節(jié)點(diǎn);若是,轉(zhuǎn)步驟s206;否則,轉(zhuǎn)步驟s205。
步驟s205:繼續(xù)向當(dāng)前節(jié)點(diǎn)的上層節(jié)點(diǎn)發(fā)出介質(zhì)數(shù)據(jù)下載請(qǐng)求,轉(zhuǎn)步驟s204。
在本優(yōu)選實(shí)施例中,為減小核心存儲(chǔ)節(jié)點(diǎn)的壓力,采用分級(jí)負(fù)載的方式;先判斷該邊緣緩存節(jié)點(diǎn)的直接上層節(jié)點(diǎn)(中間緩存節(jié)點(diǎn))是否緩存有該介質(zhì)數(shù)據(jù);若該直接上層節(jié)點(diǎn)沒有緩存該介質(zhì)數(shù)據(jù),則繼續(xù)向上層節(jié)點(diǎn)追溯,直至找到保存有該介質(zhì)數(shù)據(jù)的中間緩存節(jié)點(diǎn)或核心存儲(chǔ)節(jié)點(diǎn)。
步驟s206:將保存有該介質(zhì)數(shù)據(jù)的中間緩存節(jié)點(diǎn)或核心存儲(chǔ)節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn),從所述應(yīng)答節(jié)點(diǎn)的下層節(jié)點(diǎn)開始直至所述邊緣緩存節(jié)點(diǎn),逐級(jí)從當(dāng)前節(jié)點(diǎn)的上層節(jié)點(diǎn)下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù)。
本優(yōu)選實(shí)施例通過上述手段,使回源下載時(shí)經(jīng)過的各級(jí)中間緩存節(jié)點(diǎn)均緩存一份所述介質(zhì)數(shù)據(jù),一方面,能夠方便其他下層節(jié)點(diǎn)回源下載;另一方面,還能夠自動(dòng)將新發(fā)布的介質(zhì)數(shù)據(jù)緩存到cdn系統(tǒng)相關(guān)中間緩存節(jié)點(diǎn)中,提高整體運(yùn)行效率。
步驟s207:當(dāng)步驟s206執(zhí)行失敗時(shí),所述邊緣緩存節(jié)點(diǎn)直接從核心存儲(chǔ)節(jié)點(diǎn)下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù)。在進(jìn)一步的優(yōu)選實(shí)施例中,在介質(zhì)數(shù)據(jù)下載過程中,為減少節(jié)點(diǎn)之間的交互次數(shù)(如可以采用一次請(qǐng)求,多次回復(fù)的方式)以及避免重復(fù)下載本機(jī)已經(jīng)存在的數(shù)據(jù),本申請(qǐng)方案中的邊緣緩存節(jié)點(diǎn)和中間緩存節(jié)點(diǎn)均存儲(chǔ)有與所述介質(zhì)數(shù)據(jù)的切片內(nèi)容在本節(jié)點(diǎn)是否存在的狀態(tài)記錄信息;上述步驟s202和s206中下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù)的方法如圖3所示,具體包括:
步驟s301:請(qǐng)求下載節(jié)點(diǎn)將本節(jié)點(diǎn)中與所述介質(zhì)數(shù)據(jù)相關(guān)的狀態(tài)記錄信息發(fā)送至下載服務(wù)節(jié)點(diǎn);
步驟s302:下載服務(wù)節(jié)點(diǎn)將本節(jié)點(diǎn)的狀態(tài)記錄信息與上述請(qǐng)求下載節(jié)點(diǎn)的狀態(tài)記錄信息進(jìn)行比較,選擇請(qǐng)求下載節(jié)點(diǎn)不存在的切片內(nèi)容返回至請(qǐng)求下載節(jié)點(diǎn);
步驟s303:請(qǐng)求下載節(jié)點(diǎn)收到上述不存在的切片內(nèi)容后,在本地存儲(chǔ)器保存該切片內(nèi)容,并更新本節(jié)點(diǎn)的狀態(tài)記錄信息;
其中,步驟s202中的請(qǐng)求下載節(jié)點(diǎn)為邊緣緩存節(jié)點(diǎn),下載服務(wù)節(jié)點(diǎn)為應(yīng)答節(jié)點(diǎn)(即另一個(gè)邊緣緩存節(jié)點(diǎn));步驟s206中的請(qǐng)求下載節(jié)點(diǎn)為邊緣緩存節(jié)點(diǎn)或下層中間緩存節(jié)點(diǎn),下載服務(wù)節(jié)點(diǎn)為核心存儲(chǔ)節(jié)點(diǎn)或上層中間緩存節(jié)點(diǎn)。
本優(yōu)選實(shí)施例中的切片內(nèi)容指的是按預(yù)設(shè)的切片長度(如16k)對(duì)介質(zhì)數(shù)據(jù)劃分得到的各個(gè)部分,每一部分(16k數(shù)據(jù))為一個(gè)切片內(nèi)容。
在具體實(shí)施時(shí),上述狀態(tài)記錄信息可以是一個(gè)或多個(gè)bitmap,所述bitmap中的每一位(bit)對(duì)應(yīng)于一個(gè)切片內(nèi)容,其數(shù)值(0或1)表示對(duì)應(yīng)的切片內(nèi)容在本節(jié)點(diǎn)是否存在(如可以用0表示本節(jié)點(diǎn)沒有保存該bit對(duì)應(yīng)的切片內(nèi)容,用1表示本節(jié)點(diǎn)保存有該bit對(duì)應(yīng)的切片內(nèi)容)。
例如,對(duì)于磁盤上存儲(chǔ)的64m影片文件,按照16k為一塊順序存儲(chǔ);如果某一個(gè)切片內(nèi)容在本節(jié)點(diǎn)有保存,則在bitmap中對(duì)應(yīng)bit位標(biāo)記1,如果沒有保存則標(biāo)記0;一個(gè)完整的64m的影片文件塊,其對(duì)應(yīng)的bitmap共有4096個(gè)bit位,bitmap文件的大小為512字節(jié)長度。
請(qǐng)求下載節(jié)點(diǎn)在數(shù)據(jù)下載過程中,可以一邊下載、一邊進(jìn)行緩存,如可以采用16k為最小分片單位進(jìn)行下載和緩存,只要下載過的數(shù)據(jù)就會(huì)被緩存下來,使網(wǎng)絡(luò)得以充分利用。
在另一進(jìn)一步的優(yōu)選實(shí)施例中,考慮到邊緣緩存節(jié)點(diǎn)和中間緩存節(jié)點(diǎn)中的介質(zhì)數(shù)據(jù)都不是永久存儲(chǔ),介質(zhì)數(shù)據(jù)的流動(dòng)性較大,采用將介質(zhì)文件按預(yù)設(shè)的段大小(如64m)分成多段進(jìn)行存儲(chǔ)的方式(同一個(gè)介質(zhì)文件分成的多段數(shù)據(jù)可能緩存在不同的節(jié)點(diǎn)中),每段再按預(yù)設(shè)的塊大?。ㄈ?6k)分為多塊,每一段數(shù)據(jù)維護(hù)一個(gè)bitmap文件。
在下載過程中,邊緣緩存節(jié)點(diǎn)需要下載每段數(shù)據(jù)時(shí),首先向所述應(yīng)答節(jié)點(diǎn)(即保存有該64m數(shù)據(jù)的中間緩存節(jié)點(diǎn)或核心存儲(chǔ)節(jié)點(diǎn))發(fā)送該段數(shù)據(jù)對(duì)應(yīng)的bitmap,然后應(yīng)答節(jié)點(diǎn)根據(jù)本地和邊緣緩存節(jié)點(diǎn)的該段數(shù)據(jù)的bitmap的差別,向所述邊緣緩存節(jié)點(diǎn)返回相應(yīng)的塊數(shù)據(jù)(即應(yīng)答節(jié)點(diǎn)存在但邊緣緩存節(jié)點(diǎn)不存在的16k塊數(shù)據(jù))。上述數(shù)據(jù)下載過程具體包括:
(1)請(qǐng)求介質(zhì)數(shù)據(jù)的節(jié)點(diǎn)把要請(qǐng)求的段數(shù)據(jù)對(duì)應(yīng)的bitmap發(fā)送到應(yīng)答節(jié)點(diǎn);
(2)應(yīng)答節(jié)點(diǎn)接收到bitmap之后,與本地對(duì)應(yīng)的bitmap驗(yàn)證,找出請(qǐng)求介質(zhì)數(shù)據(jù)的節(jié)點(diǎn)沒有而本地有的bit位;
(3)按照順序把上述bit位對(duì)應(yīng)的16k數(shù)據(jù)返回給請(qǐng)求介質(zhì)數(shù)據(jù)的節(jié)點(diǎn);
(4)當(dāng)網(wǎng)絡(luò)情況較差的時(shí)候,發(fā)送的bitmap可以是整個(gè)64m段數(shù)據(jù)的bitmap的一部分,通過offset方式,指定從具體哪一位開始傳輸,以發(fā)送一小塊bitmap數(shù)據(jù)方式,防止請(qǐng)求交互數(shù)據(jù)量過大,影響機(jī)器性能。
對(duì)于前述的各方法實(shí)施例,為了描述簡單,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域的技術(shù)人員應(yīng)該知悉,本申請(qǐng)并不受所描述的動(dòng)作順序的限制,因?yàn)楦鶕?jù)本申請(qǐng),某些步驟可以采用其他順序或同時(shí)執(zhí)行;其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,上述方法實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本申請(qǐng)所必須的。
參照?qǐng)D4,示出了本申請(qǐng)內(nèi)容分發(fā)網(wǎng)絡(luò)第一實(shí)施例的結(jié)構(gòu)示意圖,包括通過網(wǎng)絡(luò)連接的核心存儲(chǔ)節(jié)點(diǎn)10和二個(gè)以上的邊緣緩存節(jié)點(diǎn)31,位于同一地區(qū)的邊緣緩存節(jié)點(diǎn)31組成一個(gè)邊緣節(jié)點(diǎn)組30;邊緣緩存節(jié)點(diǎn)31包括:
組內(nèi)數(shù)據(jù)判斷模塊,用于判斷本邊緣節(jié)點(diǎn)組內(nèi)的其他邊緣緩存節(jié)點(diǎn)是否保存有需要下載的介質(zhì)數(shù)據(jù);
組內(nèi)節(jié)點(diǎn)選擇模塊,用于當(dāng)本邊緣節(jié)點(diǎn)組內(nèi)的其他邊緣緩存節(jié)點(diǎn)保存有需要下載的介質(zhì)數(shù)據(jù)時(shí),選擇本邊緣節(jié)點(diǎn)組內(nèi)保存有所述介質(zhì)數(shù)據(jù)、且可用網(wǎng)絡(luò)帶寬最大的邊緣緩存節(jié)點(diǎn)作為應(yīng)答節(jié)點(diǎn);
介質(zhì)下載模塊,用于從應(yīng)答節(jié)點(diǎn)下載所述介質(zhì)數(shù)據(jù)并保存至本地存儲(chǔ)器;
回源下載模塊,用于當(dāng)本邊緣節(jié)點(diǎn)組內(nèi)的其他邊緣緩存節(jié)點(diǎn)均沒有保存需要下載的介質(zhì)數(shù)據(jù)時(shí),向上級(jí)節(jié)點(diǎn)回源下載所述介質(zhì)數(shù)據(jù)并保存至本地存儲(chǔ)器。
參照?qǐng)D5,示出了本申請(qǐng)內(nèi)容分發(fā)網(wǎng)絡(luò)第二實(shí)施例的結(jié)構(gòu)示意圖,本優(yōu)選實(shí)施例與上述第一內(nèi)容分發(fā)網(wǎng)絡(luò)實(shí)施例的區(qū)別在于:所述內(nèi)容分發(fā)網(wǎng)絡(luò)還包括設(shè)置在核心存儲(chǔ)節(jié)點(diǎn)10和邊緣緩存節(jié)點(diǎn)31之間的一層以上的中間緩存節(jié)點(diǎn)20,其中的回源下載模塊具體包括:
節(jié)點(diǎn)追溯子模塊,用于從邊緣緩存節(jié)點(diǎn)31開始,重復(fù)向當(dāng)前節(jié)點(diǎn)的上層節(jié)點(diǎn)發(fā)出介質(zhì)數(shù)據(jù)下載請(qǐng)求,直至找到保存有該介質(zhì)數(shù)據(jù)的中間緩存節(jié)點(diǎn)20或核心存儲(chǔ)節(jié)點(diǎn)10,將該中間緩存節(jié)點(diǎn)20或核心存儲(chǔ)節(jié)點(diǎn)10作為應(yīng)答節(jié)點(diǎn);
逐級(jí)下載子模塊,用于從所述應(yīng)答節(jié)點(diǎn)的下層節(jié)點(diǎn)開始直至所述邊緣緩存節(jié)點(diǎn),逐級(jí)從當(dāng)前節(jié)點(diǎn)的上層節(jié)點(diǎn)下載并在本地存儲(chǔ)器保存所述介質(zhì)數(shù)據(jù)。
在進(jìn)一步的優(yōu)選實(shí)施例中,上述邊緣緩存節(jié)點(diǎn)31和中間緩存節(jié)點(diǎn)20均存儲(chǔ)有與所述介質(zhì)數(shù)據(jù)的切片內(nèi)容在本節(jié)點(diǎn)是否存在的狀態(tài)記錄信息;上述介質(zhì)下載模塊具體包括:
狀態(tài)發(fā)送子模塊,用于將本邊緣緩存節(jié)點(diǎn)中與所述介質(zhì)數(shù)據(jù)相關(guān)的狀態(tài)記錄信息(如bitmap)發(fā)送至所述應(yīng)答節(jié)點(diǎn);
切片下載子模塊,用于接收所述應(yīng)答節(jié)點(diǎn)返回的邊緣緩存節(jié)點(diǎn)不存在的切片內(nèi)容,其中,所述應(yīng)答節(jié)點(diǎn)通過比較本節(jié)點(diǎn)的狀態(tài)記錄信息(bitmap)與上述邊緣緩存節(jié)點(diǎn)的狀態(tài)記錄信息(bitmap)的方式選取上述邊緣緩存節(jié)點(diǎn)不存在的切片內(nèi)容;
狀態(tài)更新子模塊,用于在收到上述不存在的切片內(nèi)容、并保存至本地的存儲(chǔ)器后,更新本節(jié)點(diǎn)的狀態(tài)記錄信息(bitmap);
其中,所述切片內(nèi)容指按設(shè)定的切片長度對(duì)介質(zhì)數(shù)據(jù)劃分得到的各個(gè)部分,每一部分為一個(gè)切片內(nèi)容。
在另一進(jìn)一步的優(yōu)選實(shí)施例中,中間緩存節(jié)點(diǎn)20和邊緣緩存節(jié)點(diǎn)31均可以設(shè)置本節(jié)點(diǎn)的區(qū)域負(fù)載均衡器(slb,serviceloadbalance)以及多個(gè)介質(zhì)緩存節(jié)點(diǎn)(cache),其中:
中間緩存節(jié)點(diǎn)20設(shè)置有第一區(qū)域負(fù)載均衡器和二個(gè)以上的第一介質(zhì)緩存節(jié)點(diǎn);
第一區(qū)域負(fù)載均衡器用于獲取并向上層中間緩存節(jié)點(diǎn)或所述全局負(fù)載均衡器(gslb,globalserviceloadbalance)上報(bào)下層中間緩存節(jié)點(diǎn)或邊緣緩存節(jié)點(diǎn)的狀態(tài),以及根據(jù)其下層邊緣緩存節(jié)點(diǎn)的狀態(tài)將gslb重定向的服務(wù)請(qǐng)求分配給合適的邊緣緩存節(jié)點(diǎn);
第一介質(zhì)緩存節(jié)點(diǎn)用于存儲(chǔ)下層中間緩存節(jié)點(diǎn)或邊緣緩存節(jié)點(diǎn)回源下載的介質(zhì)數(shù)據(jù)。
邊緣緩存節(jié)點(diǎn)31設(shè)置有第二區(qū)域負(fù)載均衡器和二個(gè)以上的流媒體服務(wù)器(vss,streamingserver)及其第二介質(zhì)緩存節(jié)點(diǎn);
所述第二區(qū)域負(fù)載均衡器用于獲取并向上層中間緩存節(jié)點(diǎn)或gslb上報(bào)所述邊緣緩存節(jié)點(diǎn)中各流媒體服務(wù)器的狀態(tài),以及根據(jù)各流媒體服務(wù)器的狀態(tài)將gslb重定向的服務(wù)請(qǐng)求分配給合適的流媒體服務(wù)器;
所述流媒體服務(wù)器用于把所述第二介質(zhì)緩存節(jié)點(diǎn)緩存的介質(zhì)數(shù)據(jù)返回給客戶端;
介質(zhì)下載模塊312具體設(shè)置在第二介質(zhì)緩存節(jié)點(diǎn)中,用于與中間緩存節(jié)點(diǎn)30的第一介質(zhì)緩存節(jié)點(diǎn)建立連接并下載所需的介質(zhì)數(shù)據(jù)。
需要說明的是,上述系統(tǒng)實(shí)施例屬于優(yōu)選實(shí)施例,所涉及的單元和模塊并不一定是本申請(qǐng)所必須的。
本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見即可。對(duì)于本申請(qǐng)的裝置實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
以上對(duì)本申請(qǐng)所提供的一種內(nèi)容分發(fā)網(wǎng)絡(luò)及其數(shù)據(jù)下載方法,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請(qǐng)的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。