徐浩桐 ,黃 山 ,孫國(guó)璋,賀菲莉,段曉東
(1.大連民族大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,遼寧 大連 116600;2.大數(shù)據(jù)應(yīng)用技術(shù)國(guó)家民委重點(diǎn)實(shí)驗(yàn)室(大連民族大學(xué)),遼寧 大連 116600;3.大連市民族文化數(shù)字技術(shù)重點(diǎn)實(shí)驗(yàn)室(大連民族大學(xué)),遼寧 大連 116600)
人類正從IT時(shí)代走向DT(Data Technology)時(shí)代,數(shù)據(jù)是新時(shí)代最有價(jià)值的資源。DT時(shí)代的大數(shù)據(jù)分析系統(tǒng)以云計(jì)算為平臺(tái),以數(shù)據(jù)為中心來(lái)組織存儲(chǔ)模型、計(jì)算模型和應(yīng)用[1]。Flink[2]作為新一代的大數(shù)據(jù)計(jì)算引擎,能夠以數(shù)據(jù)并行和流水線的方式執(zhí)行包括批處理和流處理在內(nèi)的任意流數(shù)據(jù)程序,備受學(xué)術(shù)界與工業(yè)界青睞。同時(shí),容器技術(shù)因其卓越的再生性、一致性、可追溯性與可移植性使得應(yīng)用程序容器化已變?yōu)橐环N發(fā)展趨勢(shì)。因此,在容器技術(shù)盛行的今天,大數(shù)據(jù)技術(shù)與容器技術(shù)相結(jié)合必然會(huì)成為一個(gè)熱點(diǎn)研究問(wèn)題。容器化Flink部署能夠消除線上線下的環(huán)境差異,提高資源利用率,保證生命周期內(nèi)的環(huán)境一致性與標(biāo)準(zhǔn)化,為開(kāi)發(fā)者提供巨大便利,提升開(kāi)發(fā)效率。
然而就傳統(tǒng)的容器化Flink運(yùn)行部署模式來(lái)看,資源利用不均衡和通信開(kāi)銷過(guò)大等問(wèn)題依然存在。針對(duì)此問(wèn)題,本文提出了一種面向云環(huán)境的Flink負(fù)載均衡策略FLBS(Flink Load Balancing Strategy)。FLBS通過(guò)計(jì)算節(jié)點(diǎn)間的容器開(kāi)銷差異和資源利用率,從通信代價(jià)和均衡負(fù)載2個(gè)方面,對(duì)Flink集群中的容器進(jìn)行動(dòng)態(tài)調(diào)整,實(shí)時(shí)遷移。在不同規(guī)模的不同Benchmark作業(yè)上的實(shí)驗(yàn)表明,與Flink默認(rèn)調(diào)度策略相比,該策略在資源利用和計(jì)算時(shí)延方面均有優(yōu)化。本文的主要工作如下所示:
(1)提出了一種面向云環(huán)境的Flink負(fù)載均衡策略FLBS:針對(duì)容器化Flink集群中負(fù)載較大的節(jié)點(diǎn),對(duì)容器進(jìn)行遷移,在減小節(jié)點(diǎn)間負(fù)載差異的同時(shí),最小化容器間的跨節(jié)點(diǎn)通信開(kāi)銷,提升系統(tǒng)的計(jì)算效率。
(2)提出了Flink容器通信代價(jià)模型:通過(guò)計(jì)算同節(jié)點(diǎn)和跨節(jié)點(diǎn)的數(shù)據(jù)流大小,對(duì)待遷容器的目標(biāo)節(jié)點(diǎn)進(jìn)行評(píng)分,降低遷移后的跨節(jié)點(diǎn)通信開(kāi)銷。
(3)提出了負(fù)載均衡模型:遷移容器時(shí),從資源利用率和資源均衡程度2個(gè)方面對(duì)計(jì)算節(jié)點(diǎn)進(jìn)行考量,以均衡負(fù)載。
現(xiàn)階段國(guó)內(nèi)外對(duì)于容器化大數(shù)據(jù)處理引擎任務(wù)調(diào)度優(yōu)化的研究主要集中在以下2個(gè)方面:一是針對(duì)容器遷移策略的研究,二是優(yōu)化Flink等大數(shù)據(jù)計(jì)算引擎的任務(wù)調(diào)度策略的研究。
在容器遷移策略方面,有以下相關(guān)工作。文獻(xiàn)[3]針對(duì)容器放置和重分配問(wèn)題,提出了一種有效的通信感知最差擬合遞減算法來(lái)將一組新的容器放置到數(shù)據(jù)中心,并通過(guò)在服務(wù)器之間遷移容器來(lái)優(yōu)化容器的初始分配。文獻(xiàn)[4]通過(guò)引入偽隨機(jī)比規(guī)則,同時(shí)結(jié)合局部信息素蒸發(fā)和全局信息素更新,確定容器的遷移優(yōu)先級(jí),設(shè)計(jì)了一種基于改進(jìn)蟻群系統(tǒng)MACS(Modified Ant Colony System)的遷移算法,利用負(fù)載均衡聯(lián)合遷移成本LBJC(Load Balancing Joint Migration Cost)模型來(lái)進(jìn)行容器遷移。文獻(xiàn)[5]通過(guò)CRIU(Checkpoint/Restore In Userspace)[6]技術(shù)給出了一種支持Linux容器遷移的驅(qū)動(dòng)程序的原型實(shí)現(xiàn)。文獻(xiàn)[7]提出了一種考慮容器間距離、成本和可用帶寬的局部動(dòng)態(tài)遷移模型,對(duì)云環(huán)境下的容器進(jìn)行熱遷移。文獻(xiàn)[8]針對(duì)邊緣計(jì)算中基于容器的服務(wù)遷移問(wèn)題,提出了一種基于移動(dòng)感知的服務(wù)遷移機(jī)制,根據(jù)遷移成本和服務(wù)所在設(shè)備的移動(dòng)方向,選擇相應(yīng)的目標(biāo)節(jié)點(diǎn)進(jìn)行遷移。文獻(xiàn)[9]針對(duì)容器遷移過(guò)程中的資源開(kāi)銷和延遲會(huì)降低高性能計(jì)算機(jī)計(jì)算效率的問(wèn)題,提出了一種多容器遷移策略,并設(shè)計(jì)了相應(yīng)的遷移工具。文獻(xiàn)[10]通過(guò)分析傳統(tǒng)虛擬機(jī)和Docker容器的差異性,提出了一種面向Docker[11]容器的熱遷移機(jī)制,實(shí)現(xiàn)了容器的運(yùn)行狀態(tài)遷移。
在優(yōu)化Flink等大數(shù)據(jù)計(jì)算平臺(tái)的任務(wù)調(diào)度策略方面,有以下相關(guān)工作。文獻(xiàn)[12]提出了平滑加權(quán)輪詢?nèi)蝿?wù)調(diào)度算法和基于蟻群算法的任務(wù)調(diào)度算法,解決了Flink集群運(yùn)行過(guò)程中負(fù)載不均衡問(wèn)題。文獻(xiàn)[13]針對(duì)流處理系統(tǒng)Flink任務(wù)調(diào)度策略忽略了集群異構(gòu)和節(jié)點(diǎn)可用資源,導(dǎo)致集群整體負(fù)載不均的問(wèn)題,提出了一種基于異構(gòu)Flink集群的節(jié)點(diǎn)優(yōu)先級(jí)體系,動(dòng)態(tài)調(diào)整適應(yīng)當(dāng)前作業(yè)環(huán)境的節(jié)點(diǎn)優(yōu)先級(jí)指數(shù),并按照節(jié)點(diǎn)優(yōu)先級(jí)體系完成了任務(wù)的分配。文獻(xiàn)[14]針對(duì)目前Spark大數(shù)據(jù)平臺(tái)在任務(wù)調(diào)度時(shí)未考慮集群的異構(gòu)性和節(jié)點(diǎn)資源利用的情況,提出了一種能夠根據(jù)任務(wù)執(zhí)行過(guò)程中的節(jié)點(diǎn)狀態(tài)動(dòng)態(tài)調(diào)整各個(gè)節(jié)點(diǎn)優(yōu)先級(jí)的節(jié)點(diǎn)優(yōu)先級(jí)調(diào)整算法。文獻(xiàn)[15]針對(duì)大數(shù)據(jù)流式計(jì)算平臺(tái)拓?fù)渲幸蚋麝P(guān)鍵節(jié)點(diǎn)上任務(wù)間不同類型的通信方式導(dǎo)致的通信開(kāi)銷較大問(wèn)題,提出了一種Flink環(huán)境下的任務(wù)調(diào)度策略。通過(guò)各任務(wù)間數(shù)據(jù)流大小確定拓?fù)溥厵?quán)重,將有向無(wú)環(huán)圖轉(zhuǎn)化為拓?fù)潢P(guān)鍵路徑模型,在保證關(guān)鍵路徑上節(jié)點(diǎn)負(fù)載差異較小的同時(shí),最小化關(guān)鍵任務(wù)的節(jié)點(diǎn)間通信開(kāi)銷。文獻(xiàn)[16]通過(guò)建立負(fù)載預(yù)測(cè)模型,預(yù)測(cè)集群負(fù)載的變化趨勢(shì),提出了一種Flink環(huán)境下基于負(fù)載預(yù)測(cè)的彈性資源調(diào)度LPERS-Flink(Load Prediction based Elastic Resource Scheduling strategy in Flink)策略。文獻(xiàn)[17]建立了流網(wǎng)絡(luò)模型并通過(guò)構(gòu)建算法計(jì)算每條邊的容量值;其次通過(guò)彈性資源調(diào)度算法確定集群性能瓶頸并制定動(dòng)態(tài)資源調(diào)度計(jì)劃;最后通過(guò)基于數(shù)據(jù)分簇和分桶管理的狀態(tài)數(shù)據(jù)遷移算法,實(shí)施調(diào)度計(jì)劃并完成節(jié)點(diǎn)間的數(shù)據(jù)遷移。
雖然上述研究都取得了不錯(cuò)的成果,但目前在容器化Flink集群上的調(diào)度優(yōu)化工作仍有欠缺?,F(xiàn)有工作一部分無(wú)法適應(yīng)Flink資源調(diào)度,一部分沒(méi)有結(jié)合容器化Flink特點(diǎn)考慮容器間通信開(kāi)銷對(duì)節(jié)點(diǎn)負(fù)載均衡的影響,有些針對(duì)Flink任務(wù)調(diào)度的優(yōu)化工作只停留在任務(wù)分配階段,而不能在運(yùn)行時(shí)動(dòng)態(tài)調(diào)整,不夠靈活。針對(duì)以上問(wèn)題,本文提出了一種面向云環(huán)境的Flink負(fù)載均衡策略FLBS,既考慮了容器化Flink特點(diǎn),又能夠在運(yùn)行時(shí)即時(shí)調(diào)整負(fù)載,有效提升了系統(tǒng)的計(jì)算效率。
本節(jié)主要介紹相關(guān)的技術(shù)背景,主要包括Flink計(jì)算框架、容器技術(shù)和CRIU遷移技術(shù)。
Apache Flink是由Apache軟件基金會(huì)開(kāi)發(fā)的開(kāi)源流處理框架,其核心是用Java和Scala編寫(xiě)的分布式流數(shù)據(jù)處理引擎。Flink以數(shù)據(jù)并行和流水線的方式執(zhí)行包括批處理和流處理在內(nèi)的任意流數(shù)據(jù)程序。此外,其運(yùn)行時(shí)本身也支持迭代算法的執(zhí)行。Flink作為最新一代的大數(shù)據(jù)計(jì)算引擎,除具有低延遲、高吞吐量和高性能的優(yōu)勢(shì)外,還支持事件時(shí)間(Event Time)概念,支持有狀態(tài)計(jì)算,支持高度靈活的窗口(Window)操作、基于輕量級(jí)分布式快照(CheckPoint)實(shí)現(xiàn)的容錯(cuò)和基于JVM實(shí)現(xiàn)的獨(dú)立內(nèi)存管理,支持保存點(diǎn) (Save Point)機(jī)制。因此,F(xiàn)link以其優(yōu)越的性能備受學(xué)術(shù)界與工業(yè)界青睞。
容器化因其在部署應(yīng)用程序和服務(wù)時(shí)的便利性和良好性能而備受青睞。首先,容器通過(guò)名稱空間技術(shù)提供了良好的隔離,消除了與其他容器的沖突。其次,容器將代碼、運(yùn)行時(shí)狀態(tài)信息、系統(tǒng)工具和系統(tǒng)庫(kù)等都放在一個(gè)包中,并且不需要任何外部依賴來(lái)運(yùn)行進(jìn)程[18],這使得容器具有高度的可移植性和分發(fā)速度。
CRIU最早是由Pavel Emelyanov發(fā)布到Linux開(kāi)發(fā)者社區(qū)的,依賴于從3.11版開(kāi)始逐漸提供的Linux內(nèi)核特性,該工具主要是在用戶空間實(shí)現(xiàn)的,可以對(duì)一個(gè)正在運(yùn)行的應(yīng)用或該應(yīng)用的一部分進(jìn)行狀態(tài)保存并設(shè)置檢查點(diǎn),將進(jìn)程信息轉(zhuǎn)存為一組文件,并通過(guò)這些文件從快照位置恢復(fù)應(yīng)用運(yùn)行,以實(shí)現(xiàn)容器的熱遷移、快照和遠(yuǎn)程調(diào)試等其他功能。
CRIU技術(shù)能夠?qū)崿F(xiàn)基于容器的遷移,因此本文使用該技術(shù)對(duì)Flink容器進(jìn)行動(dòng)態(tài)遷移,以提升系統(tǒng)計(jì)算效率,降低通信開(kāi)銷。
本節(jié)將從容器的編排工具和Flink容器化部署時(shí)默認(rèn)的任務(wù)調(diào)度策略2個(gè)方面進(jìn)行問(wèn)題分析,并闡述整個(gè)均衡策略的系統(tǒng)流程。
為了確保服務(wù)的完整性,特定應(yīng)用程序的一個(gè)函數(shù)可以實(shí)例化多個(gè)容器。例如,在Flink中,每個(gè)TaskManager或JobManager應(yīng)該被部署為一個(gè)容器,這些容器部署在云或數(shù)據(jù)中心中,協(xié)同完成計(jì)算任務(wù),并由Kubernetes[19]和Mesos[20]等編排工具管理。使用名稱服務(wù),這些編排工具可以快速定位不同服務(wù)器上的容器,因此可以很好地完成應(yīng)用程序升級(jí)和故障恢復(fù)。由于容器易于構(gòu)建、替換和刪除,這樣的體系結(jié)構(gòu)使得維護(hù)基于多容器的應(yīng)用程序變得很方便。
但是,基于多容器的體系結(jié)構(gòu)也帶來(lái)了一些副作用,即通信效率低。由于部署在同一組容器中的功能屬于同一個(gè)服務(wù),它們之間需要交換控制消息和傳輸數(shù)據(jù)。因此,同一應(yīng)用程序的容器間的通信效率對(duì)整體任務(wù)性能影響很大。然而,簡(jiǎn)單地整合策略可能會(huì)導(dǎo)致多個(gè)資源的不平衡利用,因?yàn)橥唤M的容器通常集中于同一資源。上述容器編排工具雖然提供了利用容器的可能性,但是如何管理容器組以減少通信開(kāi)銷和平衡資源利用仍然是一個(gè)懸而未決的問(wèn)題。
Figure 1 Flink default task allocation model圖1 Flink默認(rèn)任務(wù)分配模型
如圖1所示,在Flink集群中,一個(gè)任務(wù)中不同容器中各算子之間需要頻繁地通信,以協(xié)作完成計(jì)算任務(wù),而各容器分布在Flink集群的不同物理機(jī)節(jié)點(diǎn)上,故容器間通信可分為同節(jié)點(diǎn)通信和跨節(jié)點(diǎn)通信。由容器間的通信機(jī)制可知,跨節(jié)點(diǎn)的通信代價(jià)遠(yuǎn)高于同節(jié)點(diǎn)的通信代價(jià),而Flink默認(rèn)采用輪詢的調(diào)度策略,在不同節(jié)點(diǎn)的各容器間隨機(jī)分配算子,未考慮任務(wù)中算子分布特點(diǎn)和容器間通信開(kāi)銷,同時(shí)Flink默認(rèn)的任務(wù)調(diào)度策略也不具備均衡負(fù)載的能力,即不能即時(shí)獲取各節(jié)點(diǎn)的資源信息以進(jìn)行實(shí)時(shí)調(diào)度,均衡負(fù)載。
Figure 2 Structure of FLBS圖2 FLBS結(jié)構(gòu)
綜上,若能夠在保證各節(jié)點(diǎn)負(fù)載均衡的同時(shí)盡可能地將容器間的跨節(jié)點(diǎn)通信轉(zhuǎn)變?yōu)橥?jié)點(diǎn)通信,降低通信開(kāi)銷,便可以有效地提升系統(tǒng)計(jì)算效率。故本文提出了一種面向云環(huán)境的Flink負(fù)載均衡策略FLBS,通過(guò)遷移Flink容器進(jìn)行均衡負(fù)載的同時(shí),結(jié)合Flink的算子分布特點(diǎn),考慮了不同容器間的通信情況,從負(fù)載均衡和通信開(kāi)銷2方面對(duì)容器化Flink集群進(jìn)行均衡優(yōu)化。
如圖2所示,本文提出的FLBS主要分為3個(gè)部分:(1)負(fù)載均衡探測(cè)對(duì)容器化Flink集群中的節(jié)點(diǎn)進(jìn)行負(fù)載探測(cè),并決定是否進(jìn)行遷移;(2)基于負(fù)載均衡和通信代價(jià)的容器遷移模型;(3)面向Flink容器的動(dòng)態(tài)遷移策略,包括遷移容器的選擇和遷移目標(biāo)節(jié)點(diǎn)的選擇。下面將從以上3個(gè)方面介紹各部分的具體流程。
在Flink容器通信代價(jià)模型和節(jié)點(diǎn)負(fù)載均衡模型的基礎(chǔ)上,F(xiàn)LBS中的算法通過(guò)將部分容器從過(guò)載的節(jié)點(diǎn)遷移到跨節(jié)點(diǎn)通信開(kāi)銷較低的相對(duì)空閑的節(jié)點(diǎn)上以進(jìn)行均衡負(fù)載。下面將詳細(xì)介紹FLBS策略的執(zhí)行流程與具體實(shí)現(xiàn)。
為了解決容器化Flink集群中節(jié)點(diǎn)負(fù)載不均的問(wèn)題,首先需要獲取集群中各節(jié)點(diǎn)的性能信息,并對(duì)整個(gè)集群進(jìn)行負(fù)載均衡探測(cè),確定超載節(jié)點(diǎn),觸發(fā)遷移算法以均衡負(fù)載。本文在進(jìn)行容器遷移時(shí)所采用的負(fù)載均衡探測(cè)步驟如算法1所示。
算法1負(fù)載均衡探測(cè)
輸入:當(dāng)前周期t的資源利用率rt,所有節(jié)點(diǎn)集合N。
輸出:超載節(jié)點(diǎn)nhot。
1:N←set of all nodes;//Flink集群中計(jì)算節(jié)點(diǎn)集合
2:Nhot← set of hot nodes;//超載節(jié)點(diǎn)集合
3:Whilenode∈N≠?do
4:Ifrt>kthen//判斷資源利用率是否超過(guò)閾值
5: AddnodetoNhot;//將當(dāng)前節(jié)點(diǎn)添加到超載集合
6:endIf
7:endWhile
8:SortNhotbyRU;//將超載節(jié)點(diǎn)按負(fù)載排序
9:Pick thenhot∈Nhotwith the largestRUvalue;/*挑選負(fù)載最大的節(jié)點(diǎn)*/
10:Returnnhot
首先,周期性采集Flink集群中每個(gè)節(jié)點(diǎn)的資源利用率,監(jiān)控每個(gè)節(jié)點(diǎn)的資源利用情況,判斷集群中是否存在超載節(jié)點(diǎn),當(dāng)超載節(jié)點(diǎn)出現(xiàn)時(shí),將其加入超載集合。其中,當(dāng)前周期t的節(jié)點(diǎn)資源利用率rt都是通過(guò)使用自回歸模型(Autoregressive Model)由最近n個(gè)周期的資源使用情況預(yù)測(cè)得到的,如式(1)所示:
rt=φ0+φ1rt-1+φ2rt-2+…+φnrt-n+ω
(1)
其中,rt-n,rt-n-1,…,rt-1表示節(jié)點(diǎn)中某一資源在n個(gè)周期內(nèi)的利用率,φ0為常數(shù)項(xiàng),φ1,…,φn為自相關(guān)系數(shù),ω是均值為0、方差為σ的隨機(jī)誤差值。若節(jié)點(diǎn)在當(dāng)前周期的資源利用率超過(guò)了給定的閾值,則該節(jié)點(diǎn)被標(biāo)記為超載節(jié)點(diǎn)。
下一步計(jì)算針對(duì)不同資源利用的綜合指數(shù)。一個(gè)Flink任務(wù)通常需要多種不同類型的資源來(lái)提供服務(wù),如CPU、內(nèi)存和網(wǎng)絡(luò)帶寬等,在負(fù)載均衡探測(cè)過(guò)程中,不能以單一性能信息作為衡量標(biāo)準(zhǔn),故本文定義了一個(gè)資源綜合利用指數(shù)來(lái)統(tǒng)計(jì)各節(jié)點(diǎn)中不同資源的綜合利用率,如式(2)所示:
(2)
其中,mem表示節(jié)點(diǎn)中的內(nèi)存利用率,cpu表示CPU利用率,net表示節(jié)點(diǎn)網(wǎng)絡(luò)帶寬的使用率。RU值為Flink集群中各節(jié)點(diǎn)的資源利用率的綜合指數(shù),RU值越大,節(jié)點(diǎn)中的資源利用率越高,負(fù)載越大,將計(jì)算節(jié)點(diǎn)按RU值從大到小進(jìn)行降序排列,則排列越靠前的,執(zhí)行遷移程序的優(yōu)先級(jí)越高。
本節(jié)主要結(jié)合通信代價(jià)與均衡負(fù)載對(duì)問(wèn)題進(jìn)行定義和建模。
5.2.1 AoE網(wǎng)絡(luò)拓?fù)淠P?/p>
為確定Flink集群中各算子間數(shù)據(jù)流大小,量化容器間跨節(jié)點(diǎn)通信和同節(jié)點(diǎn)通信的開(kāi)銷差異,根據(jù)Flink的任務(wù)拓?fù)淠P停x有向無(wú)環(huán)圖G=(V(G),E(G)),它由頂點(diǎn)和作業(yè)邊組成,其中,V(G)表示拓?fù)渲械乃阕蛹?,E(G)={e〈vs,vt〉|vs,vt∈V(G)}表示算子間的數(shù)據(jù)流集合。由流式計(jì)算的任務(wù)拓?fù)浣Y(jié)構(gòu)可知,若將頂點(diǎn)vs流向頂點(diǎn)vt的數(shù)據(jù)流大小作為弧vs→vt的權(quán)重,那么可以將流式計(jì)算的拓?fù)鋱D轉(zhuǎn)為帶權(quán)值的AoE網(wǎng)絡(luò)。AoE網(wǎng)絡(luò)拓?fù)淠P腿鐖D3所示。
Figure 3 Topology model of AoE network 圖3 AoE網(wǎng)絡(luò)拓?fù)淠P?/p>
5.2.2 Flink容器通信代價(jià)模型
如第3節(jié)所述,為最小化容器間跨節(jié)點(diǎn)通信開(kāi)銷,提升計(jì)算效率,需要分別計(jì)算當(dāng)前容器的跨節(jié)點(diǎn)通信開(kāi)銷和同節(jié)點(diǎn)通信開(kāi)銷,通過(guò)AoE網(wǎng)絡(luò)拓?fù)淠P?,便可以量化?jì)算各節(jié)點(diǎn)與當(dāng)前容器的開(kāi)銷差異?,F(xiàn)將2個(gè)容器間的通信代價(jià)定義如式(3)所示:
(3)
其中,C代表Flink集群中所有Flink容器集合,對(duì)于每一個(gè)容器c∈C,H(c)表示容器c部署在節(jié)點(diǎn)H上,若H(ci)=H(cj),則代表容器ci和容器cj部署在同一個(gè)節(jié)點(diǎn)上;f(H(ci),H(cj))表示在相同或不同節(jié)點(diǎn)上容器ci和容器cj之間的通信代價(jià),它是由互相通信的2容器間各算子的數(shù)據(jù)流大小的累加得到;V(ci)表示容器ci上所有算子集合。w(·)為2個(gè)算子間的數(shù)據(jù)流大小。
同時(shí),在Flink集群中,一個(gè)節(jié)點(diǎn)可能部署有多個(gè)Flink容器,每個(gè)容器中均可能有上下游算子,故在計(jì)算一個(gè)容器的跨節(jié)點(diǎn)通信代價(jià)和同節(jié)點(diǎn)通信代價(jià)時(shí),通常是一個(gè)容器對(duì)多個(gè)容器的,故定義一個(gè)容器與多個(gè)容器間的通信代價(jià)如式(4)所示:
(4)
最終待遷容器與待選節(jié)點(diǎn)的通信指數(shù)如式(5)所示:
(5)
其中,Cscore表示待選節(jié)點(diǎn)的通信評(píng)分,它是由待遷容器的跨節(jié)點(diǎn)通信代價(jià)與同節(jié)點(diǎn)通信代價(jià)相減得到的。若Cscore>0,則表示跨節(jié)點(diǎn)通信代價(jià)大于同節(jié)點(diǎn)的通信代價(jià),由Flink拓?fù)淠P涂芍?,?dāng)提交拓?fù)浣o節(jié)點(diǎn)后,拓?fù)鋵?shí)例便不會(huì)發(fā)生改變,其包含的任務(wù)總數(shù)和數(shù)據(jù)流總量也不會(huì)改變[15],故遷移后能夠有效降低跨節(jié)點(diǎn)通信代價(jià),縮短通信時(shí)間,增加通信效率,且增加的通信效率將大于遷移后因同節(jié)點(diǎn)通信變?yōu)榭绻?jié)點(diǎn)通信而降低的通信效率;其差值越大,則遷移后提高的通信效率越多,因遷移而降低的通信效率越少,待選節(jié)點(diǎn)的通信評(píng)分越高。
5.2.3 節(jié)點(diǎn)負(fù)載均衡模型
在遷移過(guò)程中對(duì)目標(biāo)節(jié)點(diǎn)進(jìn)行選擇不僅要考慮容器間的通信代價(jià),負(fù)載均衡也是一個(gè)重要指標(biāo),故本文提出資源需求評(píng)分Rscore和資源均衡評(píng)分Bscore來(lái)衡量節(jié)點(diǎn)的負(fù)載均衡程度,以實(shí)現(xiàn)遷移容器時(shí)目標(biāo)節(jié)點(diǎn)的優(yōu)選。如式(6)所示,資源需求評(píng)分Rscore是由節(jié)點(diǎn)空閑資源與節(jié)點(diǎn)資源總?cè)萘康谋戎涤?jì)算而來(lái),即由CPU或內(nèi)存資源的總?cè)萘繙p去節(jié)點(diǎn)上已有容器和當(dāng)前要遷移容器的需求總量,得到的結(jié)果再除以總?cè)萘?。其中,capacity為資源總?cè)萘浚瑀equested為容器資源需求量,CPU和內(nèi)存具有相同的權(quán)重,資源空閑比例越高的節(jié)點(diǎn)得分就越高。
當(dāng)時(shí),除了此項(xiàng)新任務(wù),醫(yī)院還承擔(dān)著各項(xiàng)社區(qū)幫扶工作,還托管著寧波多家小型醫(yī)院,阮列敏醞釀將關(guān)聯(lián)工作全部系統(tǒng)化。經(jīng)過(guò)一段時(shí)間梳理,她拍板成立基層服務(wù)指導(dǎo)科,將慢病管理、醫(yī)聯(lián)體、分級(jí)診療等工作協(xié)調(diào)起來(lái)。
(6)
而資源均衡評(píng)分Bscore是以CPU利用率cpu和內(nèi)存資源利用率mem的相近程度作為評(píng)估標(biāo)準(zhǔn),如式(7)所示,二者越接近的節(jié)點(diǎn)權(quán)重越高。資源均衡評(píng)分與資源需求評(píng)分相結(jié)合用于平衡優(yōu)化節(jié)點(diǎn)資源的使用情況,以選擇那些在遷移當(dāng)前容器后系統(tǒng)資源更為均衡的節(jié)點(diǎn)。
(7)
綜上所述,本文共提出了2個(gè)模型:Flink容器通信代價(jià)模型和節(jié)點(diǎn)負(fù)載均衡模型,3個(gè)指標(biāo):待選節(jié)點(diǎn)的通信指數(shù)、資源需求評(píng)分和資源均衡評(píng)分。由上述可知,使用任意單一指標(biāo)均不能很好地完成容器化Flink集群的負(fù)載均衡優(yōu)化,對(duì)多個(gè)優(yōu)化目標(biāo)進(jìn)行優(yōu)化的常用方法是將多個(gè)目標(biāo)轉(zhuǎn)換為單個(gè)目標(biāo)。本文就采用這種方法,將最終待選節(jié)點(diǎn)評(píng)分定義為所有上述定義的評(píng)分的加權(quán)和,如式(8)所示,從通信代價(jià)、資源利用和資源均衡3個(gè)方面對(duì)待選節(jié)點(diǎn)進(jìn)行評(píng)估,以選出最優(yōu)目標(biāo)節(jié)點(diǎn)進(jìn)行遷移,提升系統(tǒng)計(jì)算效率。
finalScoreNode=
ωC*Cscore+ωR*Rscore+ωB*Bscore
(8)
其中,ωC為通信評(píng)分權(quán)重,ωR為資源需求評(píng)分權(quán)重,ωB為資源均衡評(píng)分權(quán)重,ωC+ωR+ωB=1。
容器遷移要解決的主要問(wèn)題是被遷移容器的選擇和容器的重映射。其中,選擇待遷容器時(shí)主要考慮2個(gè)方面:一是所在節(jié)點(diǎn)的負(fù)載情況;二是容器遷移時(shí)的開(kāi)銷大小,在進(jìn)行遷移時(shí),負(fù)載越大、內(nèi)存占用越小的容器遷移優(yōu)先級(jí)應(yīng)越高。在進(jìn)行容器重映射時(shí),根據(jù)5.2節(jié)中提出的評(píng)分模型,通過(guò)評(píng)分對(duì)集群中的待選節(jié)點(diǎn)進(jìn)行擇優(yōu),將由負(fù)載均衡探測(cè)算法選出的待遷容器遷往負(fù)載較為均衡的、跨節(jié)點(diǎn)通信代價(jià)相對(duì)較低的目標(biāo)節(jié)點(diǎn)。Flink容器重映射的具體過(guò)程如算法2所示。
算法2Flink容器重映射
輸入:超載節(jié)點(diǎn)nhot、有向無(wú)環(huán)圖G=(V(G),E(G))、有向邊權(quán)值集合W、資源利用率rt。
1:Cn← the set of containers in nodenhot;
2:Ntarget←target node;//目標(biāo)節(jié)點(diǎn)
3:Sort containers inCnbyRSV;//容器排序
4:Whilert>kdo
5:IfCn≠?then
6: Pick thec∈Cnwith the largestRSVvalue;
7:Ntarget←Max(finalScoreNode(G,W,rt));
8: MigratectoNtarget;
9:EndIf
10:EndWhile
在算法2中,集群中的超載節(jié)點(diǎn)已由負(fù)載均衡探測(cè)算法給出,但由于每個(gè)節(jié)點(diǎn)中各容器的體量不同,遷移代價(jià)也不同,故在超載節(jié)點(diǎn)隊(duì)列中擁有最大RU值的節(jié)點(diǎn)中,將所有Flink容器按RSV值降序排序,以選出遷移效率最高的待遷容器;然后為待遷容器進(jìn)行節(jié)點(diǎn)評(píng)分,將分?jǐn)?shù)最高的節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn)。其中,RSV值為資源利用綜合率指數(shù)RU與容器內(nèi)存占用大小size的比值,如式(9)所示,資源使用率越高,容器內(nèi)存越小,則RSV值越大,容器的遷移優(yōu)先級(jí)越高。
(9)
算法按RSV值的大小依次執(zhí)行容器的遷移程序,直到超載隊(duì)列中所有節(jié)點(diǎn)的各資源均低于相關(guān)閾值,F(xiàn)link容器動(dòng)態(tài)遷移結(jié)束。
容器遷移的具體設(shè)計(jì)架構(gòu)圖如圖4所示,集群中每個(gè)Worker節(jié)點(diǎn)上都有一個(gè)資源監(jiān)測(cè)模塊,周期性地對(duì)當(dāng)前節(jié)點(diǎn)的資源使用情況和負(fù)載均衡情況進(jìn)行監(jiān)測(cè),并將監(jiān)測(cè)結(jié)果實(shí)時(shí)反饋給Master節(jié)點(diǎn)的調(diào)度器;調(diào)度器根據(jù)資源信息選擇超載節(jié)點(diǎn)和待遷容器,根據(jù)待遷容器的通信情況和各節(jié)點(diǎn)的負(fù)載信息,對(duì)節(jié)點(diǎn)進(jìn)行評(píng)分,已選擇目標(biāo)節(jié)點(diǎn)進(jìn)行遷移;直到集群中不再出現(xiàn)超載節(jié)點(diǎn),遷移結(jié)束。
Figure 4 Architecture of container migration design 圖4 容器遷移設(shè)計(jì)架構(gòu)
本節(jié)主要將Flink默認(rèn)調(diào)度策略、Kubernetes容器調(diào)度策略和本文提出的FLBS策略進(jìn)行實(shí)驗(yàn)和對(duì)比分析,使用不同規(guī)模的數(shù)據(jù)集在不同類型的計(jì)算任務(wù)下從任務(wù)運(yùn)行時(shí)間、資源利用率和節(jié)點(diǎn)間數(shù)據(jù)流大小3個(gè)方面驗(yàn)證FLBS的有效性。
實(shí)驗(yàn)使用的Flink集群包括1個(gè)Master主節(jié)點(diǎn)和4個(gè)Worker從節(jié)點(diǎn)共5臺(tái)物理機(jī),每臺(tái)機(jī)器軟件、硬件配置如表1和表2所示。
Table 1 Software configuration表1 軟件配置
本文使用大數(shù)據(jù)基準(zhǔn)測(cè)試工具Hibench中的標(biāo)準(zhǔn)測(cè)試數(shù)據(jù)集,在不同類型的計(jì)算任務(wù)下進(jìn)行實(shí)驗(yàn),為保證實(shí)驗(yàn)結(jié)果的可靠性同時(shí)減小誤差,通過(guò)多次重復(fù)實(shí)驗(yàn)的平均值作為最終結(jié)果,實(shí)驗(yàn)中涉及的參數(shù)配置如表3所示。
Table 2 Hardware configuration表2 硬件配置
Table 3 Default parameters configuration表3 默認(rèn)參數(shù)配置
圖5展示了分別使用2 GB,4 GB和6 GB數(shù)據(jù)進(jìn)行WordCount計(jì)算任務(wù)時(shí),3種調(diào)度策略運(yùn)行時(shí)間的對(duì)比。從圖5中可以看出,相較于其他2種策略,本文提出的FLBS在3種規(guī)模的數(shù)據(jù)下Flink任務(wù)的運(yùn)行時(shí)間均有明顯減少,且隨著數(shù)據(jù)量的增加,優(yōu)化效果逐漸明顯。
Figure 5 Comparison of task execution time on different scale datasets圖5 不同規(guī)模數(shù)據(jù)集上任務(wù)運(yùn)行時(shí)間對(duì)比
本文分別使用WordCount、PageRank和TeraSort 3種不同類型的計(jì)算任務(wù)來(lái)驗(yàn)證本文FLBS的普遍有效性,每種Flink任務(wù)均采用4 GB數(shù)據(jù)集,實(shí)驗(yàn)結(jié)果如圖6所示。從實(shí)驗(yàn)結(jié)果可以看出,與Flink默認(rèn)策略和Kubernetes調(diào)度策略相比,本文提出的FLBS在運(yùn)行時(shí)間上均有一定的優(yōu)化效果,其中,在PageRank任務(wù)上的優(yōu)化效果最為明顯。這是由于PageRank屬于計(jì)算密集型作業(yè),而WordCount屬于數(shù)據(jù)密集型作業(yè),TeraSort屬于I/O密集型作業(yè),后2類作業(yè)中消耗較多的I/O資源,而本文提出的FLBS在資源均衡方面主要考慮了CPU和內(nèi)存的利用率,故在計(jì)算密集型作業(yè)上的優(yōu)勢(shì)更為明顯。
Figure 6 Comparison of execution time of different types of computing tasks圖6 不同類型計(jì)算任務(wù)運(yùn)行時(shí)間對(duì)比
為驗(yàn)證策略對(duì)容器化Flink集群中各節(jié)點(diǎn)均衡負(fù)載的有效性,本文使用Prometheus對(duì)各計(jì)算節(jié)點(diǎn)的CPU和內(nèi)存的使用情況進(jìn)行監(jiān)測(cè),實(shí)驗(yàn)結(jié)果如圖7所示。從實(shí)驗(yàn)結(jié)果可以看出,F(xiàn)link默認(rèn)調(diào)度策略在各節(jié)點(diǎn)上CPU和內(nèi)存的負(fù)載差異較大。這是由于默認(rèn)調(diào)度策略使用輪詢的方式在節(jié)點(diǎn)間隨機(jī)分配任務(wù),沒(méi)有考慮節(jié)點(diǎn)間的資源均衡,其中,節(jié)點(diǎn)2和節(jié)點(diǎn)4的CPU負(fù)載最大,節(jié)點(diǎn)3和節(jié)點(diǎn)4的內(nèi)存負(fù)載最大,超出了預(yù)設(shè)閾值0.75。運(yùn)行FLBS,執(zhí)行容器遷移后,各節(jié)點(diǎn)的CPU和內(nèi)存負(fù)載差異明顯縮小且低于閾值0.75。
Figure 7 Load comparison of cluster nodes圖7 節(jié)點(diǎn)負(fù)載對(duì)比
FLBS策略在不同容器數(shù)量下對(duì)運(yùn)行時(shí)間的影響如圖8所示。從實(shí)驗(yàn)結(jié)果可以看出,F(xiàn)link任務(wù)的運(yùn)行時(shí)間隨容器數(shù)的增加逐漸減少,但當(dāng)容器數(shù)增加到一定數(shù)量時(shí),運(yùn)行時(shí)間的下降速度開(kāi)始逐漸減小。這是由于Flink集群中的容器數(shù)量增加時(shí),容器間通信增加,算法的時(shí)間開(kāi)銷增加,總運(yùn)行時(shí)間上升,但FLBS的平均運(yùn)行時(shí)間仍小于Flink默認(rèn)調(diào)度策略的。
Figure 8 Execution time vs.the number of containers圖8 運(yùn)行時(shí)間隨容器數(shù)變化
圖9為在Flink默認(rèn)調(diào)度策略下和本文提出的FLBS策略下各節(jié)點(diǎn)間數(shù)據(jù)流大小隨時(shí)間變化曲線。從實(shí)驗(yàn)結(jié)果可以看出,2種策略的節(jié)點(diǎn)間數(shù)據(jù)流均從0開(kāi)始快速上升最后趨于穩(wěn)定,而FLBS穩(wěn)定時(shí)期的節(jié)點(diǎn)間數(shù)據(jù)流量明顯小于Flink默認(rèn)調(diào)度策略的,即容器間跨節(jié)點(diǎn)通信的數(shù)據(jù)流大小小于默認(rèn)策略,可見(jiàn),F(xiàn)LBS在降低跨節(jié)點(diǎn)開(kāi)銷方面有明顯效果且符合Flink容器通信代價(jià)模型,驗(yàn)證了策略的有效性。
Figure 9 Data flow between nodes over time圖9 節(jié)點(diǎn)間數(shù)據(jù)流大小隨時(shí)間變化
通過(guò)歸納梳理現(xiàn)階段國(guó)內(nèi)外對(duì)于容器化大數(shù)據(jù)處理引擎任務(wù)調(diào)度優(yōu)化的相關(guān)工作,發(fā)現(xiàn)現(xiàn)有的成果大多存在調(diào)度不靈活,與Flink平臺(tái)不匹配,或未考慮容器間通信開(kāi)銷對(duì)負(fù)載均衡的影響等問(wèn)題,因此本文提出了一種面向云環(huán)境的Flink負(fù)載均衡策略(FLBS),以通信代價(jià)和負(fù)載均衡為衡量標(biāo)準(zhǔn)對(duì)容器進(jìn)行遷移,在集群出現(xiàn)負(fù)載不均的情況時(shí),能夠有效減少作業(yè)運(yùn)行時(shí)間,提高系統(tǒng)計(jì)算效率。
下一步的研究工作計(jì)劃使用更大規(guī)模的數(shù)據(jù)集和更多類型的計(jì)算任務(wù)進(jìn)行實(shí)驗(yàn),對(duì)算法進(jìn)行進(jìn)一步優(yōu)化,以減小遷移的時(shí)間和空間開(kāi)銷。