黃永生
(合肥職業技術學院 繼續教育學院,安徽 巢湖 238000)
隨著便攜式設備技術的進步,網絡規模急劇增長,社交、視頻等應用程序持續生成大量的流數據[1]。云計算是一種新的計算范式,通過虛擬化、動態可配置等技術將計算等服務按需通過互聯網交付給客戶[2-3]。因此,云計算技術為處理流數據提供了基礎和平臺。本文探討了云計算技術應用下流數據集成與服務,設計基于云計算的流數據集成和服務框架,重點介紹了流數據集成和資源分配模塊,設計有效的資源分配算法。
流數據集成和服務的運行框架如圖1所示。運行時框架由客戶端和云端的軟件模塊組成。客戶端監測CPU的工作負載和網絡帶寬。在客戶端上啟動應用程序時,會將請求發送到云中的資源管理器以執行。然后,資源管理器分配一個應用程序管理器來處理該請求。應用程序管理器首先向客戶端詢問其設備特征,例如CPU的處理能力、工作負載 和當前網絡帶寬。利用客戶端設備的動態信息以及存儲在云中的靜態應用程序屬性,應用程序管理器通過資源分配算法(第2章中介紹)生成資源分配結果。分配給客戶端的組件在設備上作為線程啟動,其他分配給云的組件被稱為服務。應用程序管理器負責客戶端和云之間的數據傳輸。

圖1 流數據集成和服務的框架
位于客戶端和云組件中間的應用程序管理器具有兩個功能。第一個是確定最佳資源分配結果并使資源適應客戶端的變化環境,第二個是協調流數據應用程序的分布式執行。

圖2 資源配置交互模塊
客戶端和應用程序管理器之間的交互模塊如圖2所示,該模塊能支持自適應資源分配。假設雙方之間存在兩個邏輯通信連接,一個用來進行低速率的控制消息傳輸,另一個是用于客戶端和云之間流數據的傳輸。客戶端上的探查器會在啟動時測量設備的特性,并持續監測CPU的工作負載和網絡帶寬。如果任何一個特性發生變化并超過閾值,更新資源分配結果的請求將發送到應用程序管理器上的控制器。應用程序管理器的控制器調用優化求解器以生成新的資源分配結果。基礎模塊執行器將結果作為輸入,為流數據應用程序的分布式執行提供運行時支持。
在所設計的框架中,需要確保軟件的運行不會給設備帶來太多負擔。因此,將優化求解器放在云上,而不是在客戶端的設備上,以此減少本地資源的消耗。此外,可以將不同環境的資源分配結果備份到云中。當更新資源分配的輸入參數與先前的輸入參數相似,則將直接從云中查詢資源分配結果,不需要優化求解器進行計算,以減少資源分配的等待時間。
在框架中,本地組件在設備上作為線程運行,而遠程組件則通過調用云組件執行。在資源分配模型中,將分配到設備上的組件命名為本地組件,將卸載到云上的組件稱為遠程組件。應用程序管理器對每個遠程組件都有一個線程,負責數據傳輸以及組件調用。由于線程充當遠程組件的映像,因此將它們稱為映像組件。
實現多租戶的組件服務功能,以允許多個租戶或應用程序實例共享組件。多租戶組件服務采用主從架構,其中從屬組件進行計算,而主組件負責將租戶的負載調度到從屬組件上。具體來說,主組件從資源管理器獲取資源信息,并與節點管理器協同根據當前請求負載啟動或者終止從屬組件。多租戶組件服務的目的是保證對基礎資源的彈性利用,以適應動態的請求。
在框架中,即使用戶運行相同的應用程序,也具有不同的應用程序實例。每個應用程序實例由一系列組件組成。云端的組件服務通常由多個應用程序實例共享。根據資源分配機制,應用程序實例在一個特定的組件服務上具有各種負載要求,即組件服務處理輸入流數據所需的速度。
為了節省資源,需要解決負載調度問題,即將負載從應用程序實例調度到從屬組件,使從屬組件的數量最小化。假設從屬組件都具有相同的容量。負載的調度問題可以被建模為在線的裝箱問題[4]。
在本節中,描述用于解決計算資源分配問題的模型、公式和算法。應用程序可以使用數據流圖G+(V,E)表示,其中V={i|i=1,2,…,v}表示組件,E={(i,j)|i,j∈V}表示組件之間的依賴關系。si是組件i處理一個單位數據所需的平均CPU指令數。di,j表示需要為一個數據單元在信道(i,j)上傳輸的數據量。節點i上的權重wi代表計算成本,邊上的權重ci,j表示通信成本。
將權重最大的組件/通道定義為關鍵組件/通道。流數據應用程序的吞吐量都由關鍵組件/通道確定,而關鍵組件/通道的計算/傳輸數據速度最慢。因此,有吞吐量TP=1/tp,其中
(1)
卸載決定主要取決于本地計算資源和網絡質量。當CPU的處理能力為p,工作負載為η時,客戶端設備上的可用CPU資源為pη。假設設備上同時運行的組件都被分配相等的CPU資源。當將組件卸載到云上后,由于CPU釋放了資源,客戶端上運行的其他組件將加速,則加速因子為N/(N-1),其中N是卸載前設備上組件的數量。云端有足夠的資源來容納卸載的組件,因此它們將不會成為數據流圖中的關鍵組件。
對于流數據應用程序{G(V,E),si,di,j},資源分配問題是為資源分配數據流圖的一系列v組件以及為交叉通道分配帶寬,使流數據應用程序的吞吐量最大化。資源分配問題的最優化模型如下所示:
yi,j>0
(2)
x0=1
xv+1=1
xi∈{0,1}
其中,變量xi是組件卸載的決策變量:xi=1說明組件i在設備上執行,xi=0說明組件i在云端執行。yi,j是指分配給信道(i,j)的帶寬。提出了一種遺傳算法[5]來解決資源分配問題,如算法1所示。將不同的資源分配視為具有不同染色體的種群,具有較高適應性的個體更有可能生存和繁殖。在本研究中,具有較高適應性的個體即為具有較高吞吐量的群體。資源分配X由二進制字符串X={x1,…,xv}表示。

算法1資源分配遺傳算法輸入:N,Λ,Ω輸出:最優資源動態資源分配方案1: Pop←RandomSelectPop(N); //生成初始種群2: g←0;3: whileg<=Ωdo4: Fitness←EvalFitness(Pop); //評估適應性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;
遺傳算法首先隨機產生初始種群。N代表種群中個體的數量。在每一代中,評估種群中每個個體的適應性。根據其適應性從當前種群中隨機選擇個體進行繁殖。在算法中使用輪盤賭輪選擇策略。每個個體被選中的概率與其適應度成正比??刂茀郸硭x個體的數量占當前種群數量的比例。通過交叉和突變對所選個體進行操作,然后將其添加到當前種群中。該算法會評估所有個體的適應性,選擇最佳個體,然后將最佳的個人加入到下一代的種群中。當進化的代數達到其最大值Ω時,算法終止。在最后一代中,選擇吞吐量最高的資源分配方案作為最終資源分配方案。
在每一輪中,資源分配遺傳算法都會使用交叉和變異來對個體進行進化操作。交叉通過組合兩個隨機選擇的個體來生成新個體(假設兩個個體為A和B)。在交叉過程中,算法隨機將基因A和B分別分為兩部分。基因A的第一部分和B的第二部分組成一個新個體。變異則是隨機更改基因上的一個或多個值。
首先介紹種群大小N和控制參數Λ如何影響吞吐量和遺傳算法。圖3顯示了在不同N的情況下算法的吞吐量。可以看到,在N值較高的情況下,該算法只需進行較少的迭代即可收斂到最終吞吐量。圖4顯示了Λ對性能的影響。Λ值越大,收斂速度和吞吐量就越高。它表明,如果在每次迭代中從種群中選擇更多個體進行繁殖,則遺傳算法將花費較少的迭代來找到最佳個體。

圖3 種群大小和吞吐量的關系 圖4 控制參數 和吞吐量的關系
圖5和圖6分別表示出了網絡帶寬和設備有效計算資源的影響。由結果可知,隨著網絡帶寬的增加,本研究的方法能夠獲得越來越多的吞吐量。但是計算資源的增加并不一定帶來更好的性能。對于最佳資源分配來說,應用程序的總吞吐量會受到計算和通信資源的限制??梢酝ㄟ^將計算移動到云端來減少本地設備的計算開銷,但該操作可能會增加通信的開銷。因此,隨著帶寬的增加,可以把更多的計算遷移到云端,這樣一來,系統的吞吐量就會增加(如圖3所示)。但是,若僅增加設備可用資源,由于帶寬不變,本地的計算無法被遷移到云端。在這種情況下,系統吞吐量的變化并不明顯。

圖5 帶寬和吞吐量的關系圖 6 可用資源和吞吐量的關系
本文研究了云應用程序的流數據集成和服務問題。首先設計了流數據集成與服務框架,該框架支持自適應資源分配和分布式執行。然后設計了基于遺傳算法的資源配置算法,以解決資源分配問題。實驗結果表明,該流數據集成與服務框架可以有效提高網絡的吞吐量和資源利用率。在后續的工作中,將該框架部署到真實的應用環境中,進一步驗證框架的有效性。