黃永生
(合肥職業(yè)技術(shù)學(xué)院 繼續(xù)教育學(xué)院,安徽 巢湖 238000)
隨著便攜式設(shè)備技術(shù)的進(jìn)步,網(wǎng)絡(luò)規(guī)模急劇增長,社交、視頻等應(yīng)用程序持續(xù)生成大量的流數(shù)據(jù)[1]。云計(jì)算是一種新的計(jì)算范式,通過虛擬化、動(dòng)態(tài)可配置等技術(shù)將計(jì)算等服務(wù)按需通過互聯(lián)網(wǎng)交付給客戶[2-3]。因此,云計(jì)算技術(shù)為處理流數(shù)據(jù)提供了基礎(chǔ)和平臺(tái)。本文探討了云計(jì)算技術(shù)應(yīng)用下流數(shù)據(jù)集成與服務(wù),設(shè)計(jì)基于云計(jì)算的流數(shù)據(jù)集成和服務(wù)框架,重點(diǎn)介紹了流數(shù)據(jù)集成和資源分配模塊,設(shè)計(jì)有效的資源分配算法。
流數(shù)據(jù)集成和服務(wù)的運(yùn)行框架如圖1所示。運(yùn)行時(shí)框架由客戶端和云端的軟件模塊組成??蛻舳吮O(jiān)測(cè)CPU的工作負(fù)載和網(wǎng)絡(luò)帶寬。在客戶端上啟動(dòng)應(yīng)用程序時(shí),會(huì)將請(qǐng)求發(fā)送到云中的資源管理器以執(zhí)行。然后,資源管理器分配一個(gè)應(yīng)用程序管理器來處理該請(qǐng)求。應(yīng)用程序管理器首先向客戶端詢問其設(shè)備特征,例如CPU的處理能力、工作負(fù)載 和當(dāng)前網(wǎng)絡(luò)帶寬。利用客戶端設(shè)備的動(dòng)態(tài)信息以及存儲(chǔ)在云中的靜態(tài)應(yīng)用程序?qū)傩?,?yīng)用程序管理器通過資源分配算法(第2章中介紹)生成資源分配結(jié)果。分配給客戶端的組件在設(shè)備上作為線程啟動(dòng),其他分配給云的組件被稱為服務(wù)。應(yīng)用程序管理器負(fù)責(zé)客戶端和云之間的數(shù)據(jù)傳輸。
圖1 流數(shù)據(jù)集成和服務(wù)的框架
位于客戶端和云組件中間的應(yīng)用程序管理器具有兩個(gè)功能。第一個(gè)是確定最佳資源分配結(jié)果并使資源適應(yīng)客戶端的變化環(huán)境,第二個(gè)是協(xié)調(diào)流數(shù)據(jù)應(yīng)用程序的分布式執(zhí)行。
圖2 資源配置交互模塊
客戶端和應(yīng)用程序管理器之間的交互模塊如圖2所示,該模塊能支持自適應(yīng)資源分配。假設(shè)雙方之間存在兩個(gè)邏輯通信連接,一個(gè)用來進(jìn)行低速率的控制消息傳輸,另一個(gè)是用于客戶端和云之間流數(shù)據(jù)的傳輸??蛻舳松系奶讲槠鲿?huì)在啟動(dòng)時(shí)測(cè)量設(shè)備的特性,并持續(xù)監(jiān)測(cè)CPU的工作負(fù)載和網(wǎng)絡(luò)帶寬。如果任何一個(gè)特性發(fā)生變化并超過閾值,更新資源分配結(jié)果的請(qǐng)求將發(fā)送到應(yīng)用程序管理器上的控制器。應(yīng)用程序管理器的控制器調(diào)用優(yōu)化求解器以生成新的資源分配結(jié)果?;A(chǔ)模塊執(zhí)行器將結(jié)果作為輸入,為流數(shù)據(jù)應(yīng)用程序的分布式執(zhí)行提供運(yùn)行時(shí)支持。
在所設(shè)計(jì)的框架中,需要確保軟件的運(yùn)行不會(huì)給設(shè)備帶來太多負(fù)擔(dān)。因此,將優(yōu)化求解器放在云上,而不是在客戶端的設(shè)備上,以此減少本地資源的消耗。此外,可以將不同環(huán)境的資源分配結(jié)果備份到云中。當(dāng)更新資源分配的輸入?yún)?shù)與先前的輸入?yún)?shù)相似,則將直接從云中查詢資源分配結(jié)果,不需要優(yōu)化求解器進(jìn)行計(jì)算,以減少資源分配的等待時(shí)間。
在框架中,本地組件在設(shè)備上作為線程運(yùn)行,而遠(yuǎn)程組件則通過調(diào)用云組件執(zhí)行。在資源分配模型中,將分配到設(shè)備上的組件命名為本地組件,將卸載到云上的組件稱為遠(yuǎn)程組件。應(yīng)用程序管理器對(duì)每個(gè)遠(yuǎn)程組件都有一個(gè)線程,負(fù)責(zé)數(shù)據(jù)傳輸以及組件調(diào)用。由于線程充當(dāng)遠(yuǎn)程組件的映像,因此將它們稱為映像組件。
實(shí)現(xiàn)多租戶的組件服務(wù)功能,以允許多個(gè)租戶或應(yīng)用程序?qū)嵗蚕斫M件。多租戶組件服務(wù)采用主從架構(gòu),其中從屬組件進(jìn)行計(jì)算,而主組件負(fù)責(zé)將租戶的負(fù)載調(diào)度到從屬組件上。具體來說,主組件從資源管理器獲取資源信息,并與節(jié)點(diǎn)管理器協(xié)同根據(jù)當(dāng)前請(qǐng)求負(fù)載啟動(dòng)或者終止從屬組件。多租戶組件服務(wù)的目的是保證對(duì)基礎(chǔ)資源的彈性利用,以適應(yīng)動(dòng)態(tài)的請(qǐng)求。
在框架中,即使用戶運(yùn)行相同的應(yīng)用程序,也具有不同的應(yīng)用程序?qū)嵗?。每個(gè)應(yīng)用程序?qū)嵗梢幌盗薪M件組成。云端的組件服務(wù)通常由多個(gè)應(yīng)用程序?qū)嵗蚕?。根?jù)資源分配機(jī)制,應(yīng)用程序?qū)嵗谝粋€(gè)特定的組件服務(wù)上具有各種負(fù)載要求,即組件服務(wù)處理輸入流數(shù)據(jù)所需的速度。
為了節(jié)省資源,需要解決負(fù)載調(diào)度問題,即將負(fù)載從應(yīng)用程序?qū)嵗{(diào)度到從屬組件,使從屬組件的數(shù)量最小化。假設(shè)從屬組件都具有相同的容量。負(fù)載的調(diào)度問題可以被建模為在線的裝箱問題[4]。
在本節(jié)中,描述用于解決計(jì)算資源分配問題的模型、公式和算法。應(yīng)用程序可以使用數(shù)據(jù)流圖G+(V,E)表示,其中V={i|i=1,2,…,v}表示組件,E={(i,j)|i,j∈V}表示組件之間的依賴關(guān)系。si是組件i處理一個(gè)單位數(shù)據(jù)所需的平均CPU指令數(shù)。di,j表示需要為一個(gè)數(shù)據(jù)單元在信道(i,j)上傳輸?shù)臄?shù)據(jù)量。節(jié)點(diǎn)i上的權(quán)重wi代表計(jì)算成本,邊上的權(quán)重ci,j表示通信成本。
將權(quán)重最大的組件/通道定義為關(guān)鍵組件/通道。流數(shù)據(jù)應(yīng)用程序的吞吐量都由關(guān)鍵組件/通道確定,而關(guān)鍵組件/通道的計(jì)算/傳輸數(shù)據(jù)速度最慢。因此,有吞吐量TP=1/tp,其中
(1)
卸載決定主要取決于本地計(jì)算資源和網(wǎng)絡(luò)質(zhì)量。當(dāng)CPU的處理能力為p,工作負(fù)載為η時(shí),客戶端設(shè)備上的可用CPU資源為pη。假設(shè)設(shè)備上同時(shí)運(yùn)行的組件都被分配相等的CPU資源。當(dāng)將組件卸載到云上后,由于CPU釋放了資源,客戶端上運(yùn)行的其他組件將加速,則加速因子為N/(N-1),其中N是卸載前設(shè)備上組件的數(shù)量。云端有足夠的資源來容納卸載的組件,因此它們將不會(huì)成為數(shù)據(jù)流圖中的關(guān)鍵組件。
對(duì)于流數(shù)據(jù)應(yīng)用程序{G(V,E),si,di,j},資源分配問題是為資源分配數(shù)據(jù)流圖的一系列v組件以及為交叉通道分配帶寬,使流數(shù)據(jù)應(yīng)用程序的吞吐量最大化。資源分配問題的最優(yōu)化模型如下所示:
yi,j>0
(2)
x0=1
xv+1=1
xi∈{0,1}
其中,變量xi是組件卸載的決策變量:xi=1說明組件i在設(shè)備上執(zhí)行,xi=0說明組件i在云端執(zhí)行。yi,j是指分配給信道(i,j)的帶寬。提出了一種遺傳算法[5]來解決資源分配問題,如算法1所示。將不同的資源分配視為具有不同染色體的種群,具有較高適應(yīng)性的個(gè)體更有可能生存和繁殖。在本研究中,具有較高適應(yīng)性的個(gè)體即為具有較高吞吐量的群體。資源分配X由二進(jìn)制字符串X={x1,…,xv}表示。
算法1資源分配遺傳算法輸入:N,Λ,Ω輸出:最優(yōu)資源動(dòng)態(tài)資源分配方案1: Pop←RandomSelectPop(N); //生成初始種群2: g←0;3: whileg<=Ωdo4: Fitness←EvalFitness(Pop); //評(píng)估適應(yīng)性5: NxtPop←RW(Pop,Fitness,Λ);6: i←1;7: whilei<=Pop?Λdo8: Crossover(); //交叉操作9: i←i+2;10: endwhile11: foreachcinNxtPopdo12: NxtPop[c]←Mutate(); //突變操作13: endfor14: OptFitness←EvalFitness(NxtPop);15: Pop←Select(Pop,NxtPop,Fitness,OptFitness);16: g←g+1;17: endwhile18: returnPop;
遺傳算法首先隨機(jī)產(chǎn)生初始種群。N代表種群中個(gè)體的數(shù)量。在每一代中,評(píng)估種群中每個(gè)個(gè)體的適應(yīng)性。根據(jù)其適應(yīng)性從當(dāng)前種群中隨機(jī)選擇個(gè)體進(jìn)行繁殖。在算法中使用輪盤賭輪選擇策略。每個(gè)個(gè)體被選中的概率與其適應(yīng)度成正比??刂茀?shù)Λ代表所選個(gè)體的數(shù)量占當(dāng)前種群數(shù)量的比例。通過交叉和突變對(duì)所選個(gè)體進(jìn)行操作,然后將其添加到當(dāng)前種群中。該算法會(huì)評(píng)估所有個(gè)體的適應(yīng)性,選擇最佳個(gè)體,然后將最佳的個(gè)人加入到下一代的種群中。當(dāng)進(jìn)化的代數(shù)達(dá)到其最大值Ω時(shí),算法終止。在最后一代中,選擇吞吐量最高的資源分配方案作為最終資源分配方案。
在每一輪中,資源分配遺傳算法都會(huì)使用交叉和變異來對(duì)個(gè)體進(jìn)行進(jìn)化操作。交叉通過組合兩個(gè)隨機(jī)選擇的個(gè)體來生成新個(gè)體(假設(shè)兩個(gè)個(gè)體為A和B)。在交叉過程中,算法隨機(jī)將基因A和B分別分為兩部分?;駻的第一部分和B的第二部分組成一個(gè)新個(gè)體。變異則是隨機(jī)更改基因上的一個(gè)或多個(gè)值。
首先介紹種群大小N和控制參數(shù)Λ如何影響吞吐量和遺傳算法。圖3顯示了在不同N的情況下算法的吞吐量??梢钥吹剑贜值較高的情況下,該算法只需進(jìn)行較少的迭代即可收斂到最終吞吐量。圖4顯示了Λ對(duì)性能的影響。Λ值越大,收斂速度和吞吐量就越高。它表明,如果在每次迭代中從種群中選擇更多個(gè)體進(jìn)行繁殖,則遺傳算法將花費(fèi)較少的迭代來找到最佳個(gè)體。
圖3 種群大小和吞吐量的關(guān)系 圖4 控制參數(shù) 和吞吐量的關(guān)系
圖5和圖6分別表示出了網(wǎng)絡(luò)帶寬和設(shè)備有效計(jì)算資源的影響。由結(jié)果可知,隨著網(wǎng)絡(luò)帶寬的增加,本研究的方法能夠獲得越來越多的吞吐量。但是計(jì)算資源的增加并不一定帶來更好的性能。對(duì)于最佳資源分配來說,應(yīng)用程序的總吞吐量會(huì)受到計(jì)算和通信資源的限制。可以通過將計(jì)算移動(dòng)到云端來減少本地設(shè)備的計(jì)算開銷,但該操作可能會(huì)增加通信的開銷。因此,隨著帶寬的增加,可以把更多的計(jì)算遷移到云端,這樣一來,系統(tǒng)的吞吐量就會(huì)增加(如圖3所示)。但是,若僅增加設(shè)備可用資源,由于帶寬不變,本地的計(jì)算無法被遷移到云端。在這種情況下,系統(tǒng)吞吐量的變化并不明顯。
圖5 帶寬和吞吐量的關(guān)系圖 6 可用資源和吞吐量的關(guān)系
本文研究了云應(yīng)用程序的流數(shù)據(jù)集成和服務(wù)問題。首先設(shè)計(jì)了流數(shù)據(jù)集成與服務(wù)框架,該框架支持自適應(yīng)資源分配和分布式執(zhí)行。然后設(shè)計(jì)了基于遺傳算法的資源配置算法,以解決資源分配問題。實(shí)驗(yàn)結(jié)果表明,該流數(shù)據(jù)集成與服務(wù)框架可以有效提高網(wǎng)絡(luò)的吞吐量和資源利用率。在后續(xù)的工作中,將該框架部署到真實(shí)的應(yīng)用環(huán)境中,進(jìn)一步驗(yàn)證框架的有效性。