李梓楊 ,于炯,王躍飛,卞琛,蒲勇霖,張譯天,劉宇
(1.新疆大學軟件學院,新疆 烏魯木齊 830008;2.新疆大學信息科學與工程學院,新疆 烏魯木齊 830046;3.成都大學計算機學院,四川 成都 610106;4.廣東金融學院互聯(lián)網(wǎng)金融與信息工程學院,廣東 廣州 510521)
隨著信息化時代與互聯(lián)網(wǎng)的高速發(fā)展,智能家居、智能醫(yī)療、智能工業(yè)、智能汽車等物聯(lián)網(wǎng)[1]場景下產(chǎn)生的數(shù)據(jù)量日益增多,并與互聯(lián)網(wǎng)共同成為各行各業(yè)大數(shù)據(jù)的主要來源。希捷(Seagate)公司與互聯(lián)網(wǎng)數(shù)據(jù)中心(IDC,Internet Data Center)聯(lián)合發(fā)布的《數(shù)據(jù)時代2025》白皮書中預測,2025 年全球數(shù)據(jù)量將達到163 ZB,其中,超過25%的數(shù)據(jù)為實時數(shù)據(jù)。
由此可見,對大規(guī)模數(shù)據(jù)的實時分析和處理具有非常廣闊的應用前景。就目前的研究成果來看,以MapReduce[2]為代表的批量計算框架[3-4]的計算時延較高,無法滿足業(yè)務的實時性要求。流式計算將處于活動狀態(tài)的數(shù)據(jù)持續(xù)發(fā)送至各工作節(jié)點,計算和傳輸不間斷發(fā)生,中間結(jié)果僅存在于內(nèi)存而不需要持久存儲,為實時數(shù)據(jù)的處理提供了良好的解決方案[5]。作為一款開源、高性能、分布式的數(shù)據(jù)流處理平臺[6],F(xiàn)link[7]已經(jīng)成為流數(shù)據(jù)處理領域的通用計算平臺。與傳統(tǒng)的流式計算平臺Apache Storm[8]相比,F(xiàn)link 支持有狀態(tài)的流式計算[9]和Exactly-Once 的容錯機制[10];與新興流式計算平臺Apache Heron[11]相比,F(xiàn)link 具有更成熟的平臺架構(gòu)和更廣泛的產(chǎn)業(yè)基礎。因此,F(xiàn)link 已經(jīng)成為集批處理與流處理為一體的統(tǒng)一數(shù)據(jù)分析平臺,得到學術(shù)界和產(chǎn)業(yè)界的廣泛關(guān)注。
然而,F(xiàn)link 的發(fā)展也面臨一系列的挑戰(zhàn)。首先,F(xiàn)link 和傳統(tǒng)流式計算平臺一樣,均面臨負載波動環(huán)境下資源不足導致性能下降的問題。其次,作業(yè)執(zhí)行中集群的規(guī)模和算子的并行度是固定不變的,但計算負載是波動變化的,如果計算資源無法滿足計算負載的需求,就會嚴重影響計算的實時性,因此彈性資源調(diào)度策略的研究非常重要。最后,現(xiàn)有研究僅以當前的計算負載為依據(jù)制定彈性資源調(diào)度計劃,無法適應未來一段時間的負載變化,從而導致調(diào)度滯后的問題。因此,結(jié)合機器學習算法實現(xiàn)動態(tài)彈性資源調(diào)度策略,將是未來研究的新熱點[12]。但目前的主流預測方法對數(shù)據(jù)波動的抗干擾能力不足,在負載劇烈波動的流式計算環(huán)境中往往難以達到足夠的預測準確性。此外,目前主流的資源判定模型[13-14]主要從拓撲結(jié)構(gòu)的全局角度判定資源與負載的相對關(guān)系,無法從局部發(fā)現(xiàn)集群的性能瓶頸,無法適用于彈性資源調(diào)度的應用場景。
針對上述問題,本文提出Flink 環(huán)境下基于負載預測的彈性資源調(diào)度(LPERS-Flink,load prediction based elastic resource scheduling in Flink)策略,本文的主要貢獻總結(jié)如下。
1) 提出將機器學習算法應用于流式計算平臺底層優(yōu)化的思想,并在此基礎上提出基于時間序列的預測算法,在負載劇烈波動的場景中取得較高的預測準確性,為提出在線彈性資源調(diào)度策略提供了模型支撐。
2) 在負載預測模型的基礎上提出負載預測算法,根據(jù)已知的負載變化規(guī)律預測未來的變化趨勢,從而將作業(yè)的拓撲結(jié)構(gòu)抽象為預測網(wǎng)絡模型,為提出基于負載變化趨勢的彈性資源調(diào)度策略提供數(shù)據(jù)基礎。
3) 在資源判定模型的基礎上提出資源判定算法,針對集群存在的資源瓶頸與資源過剩的問題,制定相應的彈性資源調(diào)度計劃,動態(tài)改變集群的規(guī)模與作業(yè)的拓撲結(jié)構(gòu),優(yōu)化集群的資源配置。
4) 針對彈性資源調(diào)度開銷過高的問題,提出基于同步計算和異步狀態(tài)數(shù)據(jù)拉取的在線負載遷移算法,通過在線遷移計算負載和狀態(tài)數(shù)據(jù),實現(xiàn)對用戶透明的高效彈性資源調(diào)度。
在負載波動環(huán)境下,因集群資源不足產(chǎn)生性能下降的問題是目前流式計算平臺面臨的主要技術(shù)挑戰(zhàn),其中Storm 平臺現(xiàn)有的資源調(diào)度策略存在調(diào)度開銷高和調(diào)度滯后的問題,新生Heron 平臺未提供針對負載波動場景的解決方案。因此,在負載劇烈波動環(huán)境下,集群因資源不足而遇到性能瓶頸的問題,是流式計算研究面臨的主要難點。
針對上述問題,國內(nèi)外學者分別從不同的角度提出了解決方案。目前,現(xiàn)有的研究成果主要基于以下3 種方案來解決該問題:1) 通過優(yōu)化任務調(diào)度策略提高集群性能;2) 通過降低通信開銷提高作業(yè)的執(zhí)行效率;3) 通過提出彈性資源調(diào)度策略突破集群的性能瓶頸。
首先,傳統(tǒng)的流式計算平臺研究大多關(guān)注優(yōu)化集群的任務調(diào)度策略,通過提高集群性能降低計算時延。文獻[14-15]分別根據(jù)作業(yè)拓撲結(jié)構(gòu)的有向無環(huán)圖模型提出2 種不同的任務調(diào)度策略,在提高集群性能、降低計算時延的同時降低了集群的運行能耗[13,16],取得了一定的優(yōu)化效果。文獻[17-20]分別通過分析作業(yè)的拓撲結(jié)構(gòu)及特點,從不同角度提出了相應的任務調(diào)度策略。然而,在面對持續(xù)波動的計算負載時,優(yōu)化任務調(diào)度策略只能提高集群的資源利用率,并不能從根本上解決集群資源不足的問題。其次,降低通信開銷是提高作業(yè)執(zhí)行效率的另一種有效方案。文獻[21]針對Storm 平臺提出的T3-Scheduler,通過尋找集群中數(shù)據(jù)傳輸量較大的2 個任務,并將其部署在同一個節(jié)點上,有效降低了任務之間的通信開銷。文獻[22]提出將機器學習算法應用于流式計算平臺優(yōu)化的思想,通過監(jiān)控與集群傳輸性能有關(guān)的指標,提出基于機器學習的任務重部署策略,有效降低了節(jié)點之間的數(shù)據(jù)傳輸開銷。文獻[23-25]以降低集群的通信開銷為目標,分別提出不同的任務調(diào)度策略,但這些調(diào)度策略有可能造成節(jié)點的CPU 或內(nèi)存資源利用率急劇上升,進而導致節(jié)點資源溢出的問題,在計算負載急劇上升的場景中無法提供有效的解決方案。
與上述2 種方案相比,彈性資源調(diào)度策略通過動態(tài)增加計算資源突破集群性能瓶頸,是解決集群性能問題的最有效方案[26]。文獻[27]提出一種適用于Storm 平臺的彈性資源調(diào)度策略,通過區(qū)分有狀態(tài)數(shù)據(jù)流和無狀態(tài)數(shù)據(jù)流的應用場景,分別處理2種情況,實現(xiàn)了高效的彈性資源調(diào)度。文獻[28-29]提出基于強化學習的彈性資源調(diào)度策略,通過監(jiān)控集群性能指標并執(zhí)行強化學習算法,實現(xiàn)集群規(guī)模的動態(tài)自適應變化,創(chuàng)新性地提出將機器學習算法應用于分布式計算平臺優(yōu)化的思想,但該策略在產(chǎn)業(yè)界的大規(guī)模應用仍面臨一定挑戰(zhàn)。文獻[30-34]從不同的角度提出彈性資源調(diào)度策略,但大多適用于傳統(tǒng)的Storm 平臺,受限于平臺架構(gòu)的區(qū)別而無法應用于Flink 平臺。
此外,文獻[35]提出基于流網(wǎng)絡的離線彈性資源調(diào)度策略,通過建立流網(wǎng)絡模型定位集群性能瓶頸,并通過動態(tài)增加計算節(jié)點突破瓶頸,是本文研究的前提和基礎工作。但該策略使用離線的負載遷移算法,存在調(diào)度滯后和調(diào)度過程中作業(yè)停滯的問題,影響計算的實時性。文獻[36]提出適用于Flink平臺內(nèi)核Nephel 的響應式資源調(diào)度策略,通過建立數(shù)學模型計算每個算子的最優(yōu)并行度,并通過任務遷移實現(xiàn)集群資源的動態(tài)伸縮,與本文的研究目標緊密相關(guān),但其負載遷移過程中的網(wǎng)絡傳輸開銷較大。文獻[37]提出的SRA(state and runtime-aware)-Stream 是一種有狀態(tài)數(shù)據(jù)流的彈性資源調(diào)度策略,該策略既考慮計算負載與響應時間的數(shù)學關(guān)系,也考慮狀態(tài)數(shù)據(jù)遷移的問題,是一種非常高效的彈性資源調(diào)度策略,但該策略僅適用于Storm 平臺?,F(xiàn)有的研究成果大多面臨以下問題:1) 以當前的計算負載為依據(jù)進行彈性資源調(diào)度,忽略了未來負載可能出現(xiàn)的波動變化,存在調(diào)度滯后的問題;2) 離線的調(diào)度策略本身產(chǎn)生過高的資源開銷,存在調(diào)度過程中性能下降的問題;3) 現(xiàn)有研究多適用于傳統(tǒng)的Storm 平臺,受限于平臺架構(gòu)之間的區(qū)別而無法移植于目前主流的Flink 平臺。
針對上述問題,本文提出基于負載預測的在線彈性資源調(diào)度策略,并將其應用于Flink 平臺。本文與現(xiàn)有研究成果的不同之處總結(jié)如下。
1) 現(xiàn)有研究成果大多基于當前時刻的計算負載進行彈性資源調(diào)度,存在調(diào)度滯后的問題。本文將機器學習算法應用于流式計算平臺的底層優(yōu)化,基于負載預測結(jié)果進行提前調(diào)度,實現(xiàn)集群規(guī)模和資源配置對負載變化的及時響應。
2) 現(xiàn)有研究成果大多在計算資源不足時增加節(jié)點以避免出現(xiàn)資源瓶頸,但忽略了在資源過剩時出現(xiàn)的資源浪費問題。本文通過定位集群的資源瓶頸與資源過剩,動態(tài)擴大和縮小集群規(guī)模,從而優(yōu)化集群的資源配置。
3) 現(xiàn)有研究成果大多采用離線資源調(diào)度的方式,調(diào)度過程中存在數(shù)據(jù)堆積和時延上升的問題。本文提出基于異步狀態(tài)數(shù)據(jù)拉取的在線彈性資源調(diào)度策略,有效解決調(diào)度過程中集群性能下降的問題。
針對大數(shù)據(jù)流式計算的突發(fā)性特征[5],為了應對計算負載的波動變化,本節(jié)分別建立了基礎邏輯模型、負載預測模型和資源判定模型。首先,通過基礎邏輯模型對作業(yè)的拓撲結(jié)構(gòu)進行抽象,量化集群資源與負載的數(shù)學關(guān)系;然后,通過負載預測模型預測計算負載的變化趨勢;最后,通過資源判定模型定位集群的資源瓶頸與資源過剩,為實現(xiàn)在線彈性資源調(diào)度策略提供理論依據(jù)。
作為目前主流的分布式數(shù)據(jù)流處理平臺,Apache Flink 采用主從式架構(gòu),如圖1 所示。主節(jié)點為JobManager,負責管理計算資源、接收用戶提交的作業(yè)并根據(jù)其拓撲結(jié)構(gòu)部署任務。工作節(jié)點為TaskManager,負責根據(jù)JobManager 的調(diào)度,執(zhí)行計算任務并完成數(shù)據(jù)處理。
圖1 Apache Flink 基礎架構(gòu)
在TaskManager 中,每個任務槽(TaskSlot)都是一個線程,負責執(zhí)行任務并完成數(shù)據(jù)處理,其計算的中間結(jié)果可能存儲在內(nèi)存或輕量級數(shù)據(jù)庫等存儲介質(zhì)中,作為節(jié)點的狀態(tài)數(shù)據(jù)。因此,主節(jié)點以任務槽為基本單位進行資源管理,每個任務槽代表任務執(zhí)行中可能用到的CPU、內(nèi)存等計算資源。在作業(yè)執(zhí)行過程中,待處理的數(shù)據(jù)從源點發(fā)出,依次經(jīng)過計算節(jié)點的處理,最終計算結(jié)果在匯點被持久化存儲。節(jié)點能夠處理數(shù)據(jù)的最高速率為節(jié)點的計算能力,從源點實際發(fā)出數(shù)據(jù)的速率為當前的計算負載,為了應對計算負載的波動變化,建立流網(wǎng)絡模型,量化集群計算能力與計算負載的數(shù)學關(guān)系。
預測網(wǎng)絡模型如圖2 所示。將流式計算的拓撲結(jié)構(gòu)定義為有向無環(huán)圖模型,其中,節(jié)點表示處理數(shù)據(jù)的任務槽,邊表示節(jié)點之間的數(shù)據(jù)傳輸鏈路。為了量化計算能力與計算負載的關(guān)系,將每個節(jié)點能夠處理的最高計算負載定義為對應邊的容量c(vi,vj),通過文獻[35]的流網(wǎng)絡構(gòu)建算法可以計算每條邊的容量取值。節(jié)點實際的計算負載定義為當前時刻的流量f(vi,vj),從而將有向無環(huán)圖模型轉(zhuǎn)化為流網(wǎng)絡模型。針對現(xiàn)有彈性資源調(diào)度策略存在調(diào)度滯后的問題,通過建立負載預測模型,預測未來負載的變化趨勢。
假設一段時間內(nèi),以固定的時間間隔采集到源點發(fā)送數(shù)據(jù)的速率為F={f1,f2,…,ft},且樣本的均值為μ,方差為σ2。為了使用差分整合移動平均自回歸(ARIMA,autoregressive integrated moving average)模型進行負載預測,要求計算負載的均值和方差保持基本穩(wěn)定,即未來的計算負載與之前的負載取值具有相關(guān)關(guān)系,這樣的數(shù)據(jù)樣本是平穩(wěn)的。通過建立不同時刻計算負載之間的函數(shù)關(guān)系,可以預測未來計算負載的變化趨勢。
然而,在實際應用中,計算負載是隨著時間的推移而劇烈波動的,通常無法滿足預測模型對樣本的平穩(wěn)性要求。因此,通過分別計算t時刻與t?1 時刻負載的差值,可得到計算負載的一階差分,即
其中,ft為t時刻源點發(fā)送數(shù)據(jù)的速率。當一階差分仍然存在劇烈波動時,計算t時刻與t?1 時刻的差值,得到計算負載的二階差分。依次類推,負載的d階差分為
圖2 預測網(wǎng)絡模型
特別地,如果ρk>0.5,說明不同時刻的負載取值之間具有很強的相關(guān)關(guān)系,即當前的d階差分序列能夠滿足預測的平穩(wěn)性要求。通過建立負載回歸模型,能夠描述不同時刻負載取值之間的依賴關(guān)系。
定義1負載回歸模型。計算負載的d階差分序列中,第t時刻的負載取值為,之前第t?i時刻的樣本取值為,則t時刻與之前i時刻負載的函數(shù)關(guān)系為
其中,λi是模型的參數(shù),μt是常數(shù)項,λi和μt均可通過最大似然估計等方法計算得出;εi是預測過程中可能產(chǎn)生的隨機波動,可通過負載平均模型消除由波動產(chǎn)生的誤差。
由定義1 可知,負載回歸模型建立了不同時刻的計算負載之間的函數(shù)關(guān)系,從而可以根據(jù)過去一段時間的負載變化規(guī)律,預測未來負載的變化趨勢。然而,利用負載回歸模型進行預測的過程中,仍有可能因εi而產(chǎn)生誤差。因此,通過建立負載平均模型,消除負載變化過程中可能產(chǎn)生的隨機波動,從而降低誤差并提高預測的準確性。
定義2負載平均模型。計算負載的d階差分序列中,用εt表示t時刻計算負載可能產(chǎn)生的隨機波動,則
其中,εt?i表示t?i時刻負載的隨機波動。通過建立不同時刻負載變化的函數(shù)關(guān)系,消除隨機波動,從而建立更準確的負載預測模型。
定義3負載預測模型。計算負載的d階差分序列中,通過消除樣本產(chǎn)生的隨機波動,并將式(5)代入式(4),可得預測t時刻的負載取值為
由定義3 可知,在負載預測模型中,λi、θi和μt可通過最大似然估計等方法計算得出,而三元組(d,p,q)則需要在建立模型之前通過外部輸入確定。其中,d表示對負載序列進行差分計算的階數(shù),p表示當前時刻的負載取值與之前p時刻的取值有相關(guān)關(guān)系,q表示當前時刻的負載波動與之前q時刻負載波動有相關(guān)關(guān)系。本文通過自相關(guān)系數(shù)及偏自相關(guān)系數(shù),確定三元組(d,p,q)取值。
設計算負載的d階差分序列中,t時刻的負載與t?k時刻負載的自相關(guān)系數(shù)為ρk,則t時刻與t?k時刻負載的偏自相關(guān)系數(shù)為
由式(9)可知,預測誤差描述了預測值與真實值之前的差別。
參數(shù)選擇依據(jù)如表1 所示。相關(guān)系數(shù)收斂于0表示該系數(shù)基本趨于穩(wěn)定并無限接近于0;相關(guān)系數(shù)滿足置信區(qū)間,表示在該置信區(qū)間內(nèi)樣本的相關(guān)系數(shù)都滿足設定的取值范圍。置信區(qū)間描述了在特定區(qū)間范圍內(nèi)的樣本都滿足表1 設定的取值條件,置信區(qū)間過大會導致計算時間開銷過高且出現(xiàn)過擬合的現(xiàn)象,置信區(qū)間過小出現(xiàn)欠擬合導致預測的準確性降低。綜上所述,通過在平穩(wěn)的負載序列上計算樣本的自相關(guān)系數(shù)和偏自相關(guān)系數(shù)作為參數(shù)選擇的依據(jù),就可以確定參數(shù)p和q的理想取值范圍。
表1 參數(shù)選擇依據(jù)
在負載預測模型的基礎上,為了定位預測網(wǎng)絡中可能出現(xiàn)的資源瓶頸與資源過剩,作為提出彈性資源調(diào)度算法的依據(jù),需要進一步定義預測網(wǎng)絡的劃分和最小節(jié)點。預測網(wǎng)絡劃分如圖3 所示。
設預測網(wǎng)絡G=(V,E),s是預測網(wǎng)絡的源點,t是匯點。則該預測網(wǎng)絡的一個劃分D=(X,Y)將節(jié)點集V分為2 個集合X和Y,其中Y=V?X,使s∈X,t∈Y,且X∩Y=?,X∪Y=V。對于作業(yè)拓撲結(jié)構(gòu)中的任意算子O,?vi,vj∈O有vi,vj∈X或vi,vj∈Y,即同一個算子的不同實例不橫跨任意一個劃分。該劃分D=(X,Y)的容量值為
且下一時刻該劃分的預測流量值為
由此可知,預測網(wǎng)絡中每個算子對應唯一的劃分,表示集群中可能存在的資源瓶頸或資源過剩。
定義4最小節(jié)點。設預測網(wǎng)絡G=(V,E)有一個劃分D=(X,Y),其中,vi∈Y,則vi的容量為所有對應輸入邊容量的累加和,記為
其中,c(vj,vi)是vi的輸入邊(vj,vi)的容量值。在劃分D=(X,Y)中容量值最小的一個節(jié)點稱為D的最小節(jié)點。
由定義4 可知,預測網(wǎng)絡的劃分代表了集群中可能存在的資源瓶頸和資源過剩,如果一個劃分代表的算子中存在資源過剩,則該劃分的最小節(jié)點是非必要的計算節(jié)點。通過遷移負載并刪除該節(jié)點,可以優(yōu)化集群的資源配置,減少不必要的資源開銷。因此,通過預測負載的變化趨勢并判定資源與負載的數(shù)學關(guān)系,可以準確定位集群的資源瓶頸、資源過剩以及非必要節(jié)點。
圖3 預測網(wǎng)絡劃分
假設預測網(wǎng)絡G=(V,E)存在一個劃分為D=(X,Y),且存在一個節(jié)點vi∈Y是D的最小節(jié)點。假設當前時刻的預測流量為′,接下來2 個時刻的預測流量分別為。若存在f′(X,Y)≥αc(X,Y)且,說明預測計算負載大于設定的閾值,且預測得出計算負載呈持續(xù)上升趨勢,D會因為計算資源不足而成為集群的性能瓶頸,因此需要通過增加計算節(jié)點,擴大D所對應算子的并行度,以保證集群性能 。反之,若存在,則D中存在資源過剩,由于vi是D的最小節(jié)點,c(X,Y) ?c(vi)表示在D中刪除最小節(jié)點后剩余節(jié)點的計算能力,當f′(X,Y)<α(c(X,Y) ?c(vi))時,說明刪除vi后,剩余節(jié)點的計算能力仍然大于設定的負載閾值,且預測得出計算負載呈持續(xù)下降趨勢,因此節(jié)點vi是D中冗余的計算資源,通過刪去vi可以優(yōu)化集群的資源配置,避免出現(xiàn)資源浪費。由此可知,通過定義預測網(wǎng)絡的劃分和最小節(jié)點,設立判定集群資源配置的條件作為制定彈性資源調(diào)度計劃的依據(jù),并通過在線負載遷移算法可以提高彈性資源調(diào)度策略的執(zhí)行效率。
在第3 節(jié)建立相關(guān)模型的基礎上,本節(jié)提出基于負載預測的在線彈性資源調(diào)度策略,通過預測計算負載的變化趨勢,定位集群的資源瓶頸與資源過剩,并通過在線負載遷移實現(xiàn)高效的彈性資源調(diào)度。該策略主要分為以下4 個步驟,具體執(zhí)行流程如圖4 所示。
步驟 1建立負載預測模型并確定參數(shù)取值。
步驟2預測未來的負載變化趨勢并建立預測網(wǎng)絡。
步驟3定位集群中存在的資源瓶頸與資源過剩,制定相應的彈性資源調(diào)度計劃。
步驟4執(zhí)行彈性資源調(diào)度計劃,在線遷移計算負載與狀態(tài)數(shù)據(jù)。
圖4 LPERS-Flink 策略執(zhí)行流程
為了實現(xiàn)集群規(guī)模對負載變化的及時響應,需要通過負載預測模型建立不同時刻計算負載之間的函數(shù)關(guān)系,根據(jù)過去的負載變化規(guī)律預測未來的變化趨勢,從而根據(jù)資源與負載的數(shù)學關(guān)系定位集群的資源瓶頸和資源過剩。
由3.2 節(jié)可知,在負載預測模型中,參數(shù)三元組(d,p,q)的取值對模型的建立非常重要,選擇合適的參數(shù)能夠有效提高預測的準確性,降低模型的復雜度。本節(jié)通過衡量負載樣本序列的平穩(wěn)性,確定差分計算的次數(shù)求得d的取值;通過計算自相關(guān)系數(shù)ρk和偏自相關(guān)系數(shù)?k,k,以表1 為依據(jù)確定p和q的取值范圍。為了在該范圍內(nèi)進一步確定參數(shù)的最優(yōu)取值,需要通過貝葉斯信息準則(BIC,Bayesian information criterion)衡量預測的準確性和模型的復雜度,找到預測準確性最高且復雜度最低的預測模型。假設在一段時間內(nèi),以固定的時間間隔采集負載樣本的序列為F,則貝葉斯信息準則的計算式為
其中,k=p+q為待求解參數(shù)的數(shù)目,n=|F|為負載序列中的樣本總數(shù),L為預測函數(shù)(如式(6)所示)。由此可知,BIC 表示預測準確性與模型復雜度之間的權(quán)衡,在參數(shù)范圍內(nèi)尋找能夠使BIC 達到最小值的參數(shù)組合,即預測準確性最高且模型復雜度最低的參數(shù)取值,作為負載預測模型的最優(yōu)參數(shù)。
接下來,通過建立預測函數(shù),求解參數(shù)組λi和θi的取值,驗證模型的準確性并不斷執(zhí)行預測,將作業(yè)拓撲的流網(wǎng)絡轉(zhuǎn)化為預測網(wǎng)絡模型。根據(jù)上述思想,負載預測算法的執(zhí)行過程如算法1 所示。
算法1負載預測算法
輸入負載樣本序列F,流網(wǎng)絡G
輸出預測網(wǎng)絡G′
算法1 首先通過計算差分提高樣本的平穩(wěn)性(第1)行)。其次,通過計算自相關(guān)系數(shù)和偏自相關(guān)系數(shù)確定參數(shù)的取值范圍(第2)行~第4)行),并通過貝葉斯信息準則確定參數(shù)的最優(yōu)取值(第5)行~第7)行)。再次,建立基于ARIMA 的預測模型并驗證預測的準確性(第9)行~第11)行)。最后,預測每條邊上的未來負載,將流網(wǎng)絡轉(zhuǎn)化為預測網(wǎng)絡模型(第12)行~第15)行)。
在時間復雜度方面,建立和驗證模型的時間復雜度均為O(1),確定最優(yōu)參數(shù)時需要遍歷其取值范圍內(nèi)的所有值,復雜度為O(pq),建立預測網(wǎng)絡的復雜度為O(|E|)。因此算法1 的時間復雜度為T(n)=O(pq+|E|)。通常p和q的取值不超過10,預測網(wǎng)絡中邊的數(shù)目不超過500,因此算法1 的時間復雜度較低。
負載預測算法通過預測未來負載的變化趨勢,將流網(wǎng)絡模型轉(zhuǎn)化為預測網(wǎng)絡。此外,通過建立資源判定模型,在預測網(wǎng)絡中定位集群的資源瓶頸與資源過剩,從而制定相應的彈性資源調(diào)度計劃。
由3.3 節(jié)可知,根據(jù)資源判定模型依次檢查預測網(wǎng)絡中的每一個算子,當算子對應的劃分滿足f′(X,Y)≥αc(X,Y),且預測負載持續(xù)上升時,該算子成為集群的資源瓶頸,需要增加節(jié)點并擴大算子的并行度。反之,當算子對應的劃分滿足f′(X,Y)<α(c(X,Y) ?c(vi)),且預測負載持續(xù)下降時,該算子存在資源過剩,需要減去節(jié)點vi并縮小算子的并行度,從而避免出現(xiàn)資源浪費的現(xiàn)象。
根據(jù)上述判定規(guī)則,在線資源調(diào)度算法的執(zhí)行過程如下。
算法2在線資源調(diào)度算法
輸入集群拓撲結(jié)構(gòu)T,負載序列F
輸出完成資源調(diào)度后的預測網(wǎng)絡G′
在線資源調(diào)度算法需要基于之前的基礎工作來實現(xiàn)。首先,調(diào)用文獻[35]的構(gòu)建算法構(gòu)建流網(wǎng)絡模型(第1) 行),并調(diào)用算法1 將其更新為預測網(wǎng)絡(第2) 行)。其次,調(diào)用文獻[38]的最大流算法優(yōu)化負載分配(第3) 行),最大化利用現(xiàn)有的計算資源。再次,根據(jù)資源判定模型定位集群的資源瓶頸與資源過剩,分別對資源瓶頸增加節(jié)點(第6)行~第9) 行),對資源過剩減少節(jié)點(第10) 行~第13) 行),從而優(yōu)化集群的資源配置。最后,調(diào)用在線負載遷移算法,完成在線彈性資源調(diào)度(第9) 行和第12) 行)。
在時間復雜度方面,流網(wǎng)絡構(gòu)建算法[35]的時間復雜度為O(|V|+|E|),最大流算法[38]的時間復雜度為,負載預測算法的時間復雜度為O(pq+|E|),判定集群資源利用情況和制定彈性資源調(diào)度計劃的時間復雜度均為O(1),其中,線性級的時間復雜度可忽略。綜上所述,在線資源調(diào)度算法的整體時間復雜度為
實驗結(jié)果表明,算法2 的時間復雜度在合理可接受的范圍內(nèi),且能夠有效提升集群的性能。
傳統(tǒng)的離線資源調(diào)度策略中,資源和任務的調(diào)度總是伴隨著一定的時間開銷,離線的任務、負載和狀態(tài)數(shù)據(jù)遷移過程中作業(yè)有短暫的停滯,引發(fā)數(shù)據(jù)堆積和時延升高的問題。為了解決這一問題,本文提出在線負載遷移算法,從而實現(xiàn)高效、實時的彈性資源調(diào)度。
為了解決離線彈性資源調(diào)度策略存在數(shù)據(jù)堆積和時延升高的問題,本文提出在線負載遷移算法。通過同步執(zhí)行任務、數(shù)據(jù)備份與緩存、異步狀態(tài)數(shù)據(jù)拉取的方式,結(jié)合Flink 平臺現(xiàn)有的檢查點策略,實現(xiàn)在線負載遷移技術(shù)。在線負載遷移過程如圖5 所示。
圖5 在線負載遷移示意
當算子從一個并行實例增加到2 個時,在每個計算節(jié)點中添加數(shù)據(jù)緩沖區(qū)(buffer),用于臨時存儲待處理的數(shù)據(jù)。完成第一個Checkpoint 后,節(jié)點的狀態(tài)數(shù)據(jù)已經(jīng)存儲在Hadoop 分布式文件系統(tǒng)(HDFS,Hadoop distributed file system)中。在下一次Checkpoint 開始前,上游節(jié)點將待處理的數(shù)據(jù)復制2 份分別發(fā)送至2 個下游節(jié)點,原工作節(jié)點(圖5中的節(jié)點2)繼續(xù)處理數(shù)據(jù),實時產(chǎn)生計算結(jié)果并發(fā)送給下游節(jié)點。同時,新增節(jié)點(圖5 中的節(jié)點3)以異步的方式從HDFS 中拉取對應的狀態(tài)數(shù)據(jù),并通過同步處理緩沖區(qū)中的數(shù)據(jù),執(zhí)行狀態(tài)的合并,但不輸出計算結(jié)果。完成下一次Checkpoint后,上游節(jié)點將待處理的數(shù)據(jù)發(fā)送至新增工作節(jié)點,新增節(jié)點執(zhí)行任務并向下游節(jié)點輸出計算結(jié)果,從而實現(xiàn)用戶無感知的透明負載遷移。具體步驟如算法3 所示。
算法3在線負載遷移算法
輸入執(zhí)行彈性資源調(diào)度的算子Operator; 節(jié)點資源池pool
輸出完成資源調(diào)度后的預測網(wǎng)絡G′
算法3 描述了動態(tài)增加節(jié)點時的負載遷移過程。對于每個需要執(zhí)行彈性資源調(diào)度的算子,首先從資源池中獲取一個計算節(jié)點(第3)行),修改Zookeeper 中狀態(tài)數(shù)據(jù)到節(jié)點的映射關(guān)系(第4)行)。然后,執(zhí)行如圖5 所示的數(shù)據(jù)并行發(fā)送與緩存、HDFS 異步數(shù)據(jù)獲?。ǖ?)行~第7)行)。最后,在完成下一次Checkpoint 之后,將上游發(fā)送的計算負載切換到新的計算節(jié)點中(第8)行~第9)行)。這樣,集群在兩次Checkpoint 之間完成了彈性資源調(diào)度,且不影響正常的數(shù)據(jù)處理,調(diào)度過程中保證了計算的實時性。此外,動態(tài)減少節(jié)點與增加節(jié)點的過程基本類似,其區(qū)別在于,動態(tài)增加節(jié)點時,先從資源池獲取節(jié)點,再遷移負載;動態(tài)減少節(jié)點時,先遷移負載,再向資源池歸還節(jié)點。
在時間復雜度方面,首先,負載遷移是一個分布式算法,上述過程由多個節(jié)點并行完成,并由JobManager 統(tǒng)一部署和監(jiān)控,其時間開銷很低。其次,由于算法遍歷拓撲結(jié)構(gòu)中每一個算子,其時間復雜度與拓撲結(jié)構(gòu)中算子的數(shù)目相關(guān),即T(n)=O(|G′.O|)。實驗證明,在線負載遷移算法有效降低了LPERS-Flink 策略的時間開銷,針對性解決了數(shù)據(jù)堆積和時延升高的問題。
在Flink 的基本架構(gòu)中,一個完整的流式作業(yè)通常從Kafka 等數(shù)據(jù)源讀取數(shù)據(jù),由不同的工作節(jié)點協(xié)同完成計算,并將計算結(jié)果寫入HDFS 等存儲系統(tǒng)中,通過Checkpoint 機制將節(jié)點的狀態(tài)數(shù)據(jù)存儲在HDFS 中。為了實現(xiàn)LPERS-Flink 策略,需要監(jiān)控節(jié)點的計算負載,預測負載的變化趨勢,制定彈性資源調(diào)度計劃并存儲在Zookeeper 中,最后通過在線負載遷移實施調(diào)度計劃。
為了實現(xiàn)LPERS-Flink,需要對Flink 的基本架構(gòu)進行改進,改進后的集群主要包含以下模塊:數(shù)據(jù)持久化模塊,用于存儲待處理的數(shù)據(jù)或計算結(jié)果;數(shù)據(jù)處理模塊,由Flink 集群承擔,主要依據(jù)用戶定義的業(yè)務邏輯完成數(shù)據(jù)處理;負載預測模塊,主要負責采集計算負載并預測變化趨勢,形成預測網(wǎng)絡模型并存儲在資源協(xié)調(diào)器中;資源協(xié)調(diào)模塊,負責同步各節(jié)點的執(zhí)行狀態(tài),存儲預測網(wǎng)絡及資源調(diào)度計劃。LPERS-Flink 部署架構(gòu)如圖6 所示。
圖6 LPERS-Flink 部署架構(gòu)
如圖6 所示,LPERS-Flink 在Flink 原系統(tǒng)的基礎上分別加入了負載監(jiān)控節(jié)點、負載預測節(jié)點、資源協(xié)調(diào)節(jié)點、資源調(diào)度節(jié)點和負載遷移執(zhí)行器。
1) 負載監(jiān)控節(jié)點。負責監(jiān)控和采集節(jié)點的計算負載,即節(jié)點輸入數(shù)據(jù)的速率,并寫入MySQL 數(shù)據(jù)庫。
2) 負載預測節(jié)點。執(zhí)行算法1,根據(jù)MySQL數(shù)據(jù)庫中的負載序列,預測計算節(jié)點的負載變化趨勢,形成預測網(wǎng)絡并寫入資源協(xié)調(diào)節(jié)點。
3) 資源協(xié)調(diào)節(jié)點。由Zookeeper 集群承擔,存儲節(jié)點的元數(shù)據(jù)信息、預測網(wǎng)絡模型以及資源調(diào)度計劃。
4) 資源調(diào)度節(jié)點。執(zhí)行算法2,基于資源判定模型確定集群資源瓶頸與資源過剩,制定資源調(diào)度計劃并寫入資源協(xié)調(diào)節(jié)點。
5) 負載遷移執(zhí)行器。執(zhí)行算法3,根據(jù)資源協(xié)調(diào)節(jié)點中的資源調(diào)度計劃,從HDFS 中拉取節(jié)點對應的狀態(tài)數(shù)據(jù)并完成負載遷移,從而實現(xiàn)在線資源調(diào)度。
為了驗證LPERS-Flink 策略的有效性,本文對LPERS-Flink 與Flink v1.6.0 原系統(tǒng)及相關(guān)研究成果進行對比實驗。在相同的配置環(huán)境下分別執(zhí)行3 個代表不同作業(yè)類型的標準Benchmark,驗證了負載預測的準確性和參數(shù)取值的合理性,討論了LPERS-Flink 策略的優(yōu)化效果和執(zhí)行開銷。
實驗搭建的集群由23 臺同構(gòu)的PC 機組成。其中,F(xiàn)link 集群包含一個JobManager 節(jié)點、6 個TaskManager 節(jié)點;資源池中包含4 個TaskManager備用節(jié)點,在需要彈性增加節(jié)點時啟動并部署計算任務;其他相關(guān)組件包括3 個節(jié)點構(gòu)成的Hadoop集群、3 個節(jié)點構(gòu)成的Kafka 集群和3 個節(jié)點構(gòu)成的Zookeeper 集群。另外,由一個節(jié)點執(zhí)行負載監(jiān)控,一個節(jié)點執(zhí)行負載預測,一個節(jié)點負責生成預測網(wǎng)絡和資源調(diào)度計劃。其中,每個節(jié)點的硬件配置參數(shù)和軟件配置參數(shù)分別如表2 和表3 所示。
表2 節(jié)點硬件配置參數(shù)
為了使集群達到最優(yōu)性能,根據(jù)現(xiàn)有的軟硬件環(huán)境,對Flink 的相關(guān)配置參數(shù)進行了調(diào)整,其中重要的配置項及其參數(shù)值如表4 所示。關(guān)于預測模型的重要參數(shù)(d,p,q)的取值,在5.2 節(jié)進行了詳細介紹。
表3 節(jié)點軟件配置參數(shù)
根據(jù)3.2 節(jié)可知,在負載預測模型中,置信區(qū)間的設定對預測的準確性和預測算法的執(zhí)行效率非常重要,為了確定合適的置信區(qū)間取值,實驗分別在不同的置信區(qū)間下,根據(jù)式(9)計算負載的預測誤差與預測時間,實驗結(jié)果如表5 所示。因此,實驗選取的置信區(qū)間為[0.95,1],在該置信區(qū)間下的預測誤差δ=0.035,即δ<0.05,滿足預測的準確性要求,同時避免了過高的預測時間開銷。
表5 不同置信區(qū)間下的預測誤差與預測時間
文獻[35]提出的 FAR-Flink(flow network based auto rescale strategy for Flink)策略是本文的前提和基礎性工作。文獻[36]提出的EN(elastic nephel)策略與本文的研究目標緊密相關(guān)。為了驗證 LPERS-Flink 策略的優(yōu)化效果,實驗將LPERS-Flink 與Flink 原系統(tǒng)(Flink v1.6.0)、FAR-Flink 和EN 進行對比實驗,在4 個平臺上分別 執(zhí) 行 WordCount、TwitterSentiment 以 及Streaming-Benchmark 這3 種代表不同作業(yè)類型的典型Benchmark,分析了LPERS-Flink 策略的優(yōu)化效果和執(zhí)行開銷。
為了使用ARIMA 模型進行負載預測,根據(jù)未來的負載變化趨勢進行彈性資源調(diào)度,需要首先確定差分次數(shù)d的取值,再通過計算自相關(guān)系數(shù)和偏自相關(guān)系數(shù)確定p和q的取值,從而得到模型的參數(shù)三元組(d,p,q),并建立負載預測模型。
本節(jié)實驗模擬了Twitter 公司線上業(yè)務中負載劇烈波動的現(xiàn)象,TwitterSentiment 作業(yè)中建立負載預測模型過程的差分計算結(jié)果如圖7 所示。從圖7 中可以看出,負載的一階差分序列無法滿足預測模型對樣本的平穩(wěn)性要求,且序列中存在個別的奇異值。通過計算負載的二階差分,負載序列在一段時間內(nèi)基本趨于平穩(wěn),且奇異值明顯減少,負載的自相關(guān)系數(shù)ρk=0.68,滿足預測模型對樣本的平穩(wěn)性要求。因此,可確定預測模型的第一個參數(shù)d=2。
負載相關(guān)系數(shù)如圖8 所示,根據(jù)式(3)和式(7)分別計算了負載樣本序列的ACF 和PACF 取值,反映了負載序列中不同時刻的樣本之間的相關(guān)關(guān)系。由圖8 可知,在不考慮奇異值的前提下,ACF在2 階之后滿足置信區(qū)間,在8 階之后收斂于0,因此p的取值范圍為[2,8];PACF 在2 階之后滿足置信區(qū)間,在3 階之后收斂于0,因此q的取值范圍為[2,3]。
通過算法1 計算BIC 指數(shù)確定參數(shù)三元組(d,p,q)的最優(yōu)取值為(2,5,3),從而建立負載預測模型,采集連續(xù)20 s 的預測負載和真實負載,結(jié)果如圖9所示。圖9 反映了一段時間內(nèi),負載預測值與真實值的偏離情況,為了更直觀地描述負載預測算法的準確性,將圖9 中關(guān)鍵時間點的負載預測值和真實值整理如表6 所示。
圖7 負載的差分計算結(jié)果
圖8 負載相關(guān)系數(shù)
圖9 預測負載與真實負載
表6 預測負載偏差取值
根據(jù)式(9)計算可得,在0~20 s,負載的預測誤差δ=0.035,即δ<0.05,且預測負載和真實值的變化趨勢基本一致,預測結(jié)果與真實取值足夠接近,預測負載能夠反映未來負載的變化規(guī)律和近似取值,能夠滿足彈性資源調(diào)度策略對負載預測算法的準確性要求。因此,LPERS-Flink 策略能夠以預測負載為依據(jù)制定相應的彈性資源調(diào)度計劃,且參數(shù)(d,p,q)的取值是合理的。
WordCount 是用于統(tǒng)計英文文本中單詞頻數(shù)的作業(yè),作為CPU 密集型的標準Benchmark,其執(zhí)行過程中消耗大量的CPU 資源。實驗在4 個平臺上使用相同的配置參數(shù)分別執(zhí)行作業(yè),每隔10 s 采集一次計算時延及源點的數(shù)據(jù)堆積情況,WordCount作業(yè)執(zhí)行效率對比如圖10 所示。
由圖10 可知,LPERS-Flink 在CPU 密集型的作業(yè)中有較明顯的優(yōu)勢,隨著計算負載的波動上升,原系統(tǒng)出現(xiàn)性能瓶頸,計算時延明顯上升。EN 和FAR-Flink 在彈性資源調(diào)度過程中,均存在調(diào)度滯后和開銷過大的問題。然而,LPERS-Flink 通過在線負載遷移實現(xiàn)實時彈性資源調(diào)度,預先增加計算資源以應對負載的變化,其計算時延存在輕微的波動,但沒有明顯上升的趨勢。在數(shù)據(jù)堆積方面,F(xiàn)AR-Flink 集群在彈性資源調(diào)度過程中出現(xiàn)了明顯的性能下降,導致數(shù)據(jù)堆積顯著上升(300~360 s);EN 由于調(diào)度過程中性能下降,導致計算時延上升;而LPERS-Flink根據(jù)預測負載提前改變集群規(guī)模,及時處理源點發(fā)出的數(shù)據(jù),有效緩解數(shù)據(jù)堆積的問題,同時通過在線負載遷移算法實現(xiàn)對用戶透明的彈性資源調(diào)度。
圖10 WordCount 作業(yè)執(zhí)行效率對比
TwitterSentiment 是Twitter 公司開發(fā)的根據(jù)用戶發(fā)布的推文進行實時情感分析的作業(yè),是實際應用場景中的標準Benchmark,其計算過程中產(chǎn)生較復雜的狀態(tài)數(shù)據(jù),占用大量的內(nèi)存資源。實驗監(jiān)測集群的吞吐量和節(jié)點的內(nèi)存占用情況,TwitterSentiment作業(yè)執(zhí)行效率對比如圖11 所示。
圖11 TwitterSentiment 作業(yè)執(zhí)行效率對比
由圖11 可知,隨著計算負載的持續(xù)上升,原系統(tǒng)遇到了內(nèi)存資源的瓶頸,其吞吐量最高只能達到57 563 tuple/s。EN 和FAR-Flink 分別在660~720 s觸發(fā)了彈性資源調(diào)度,但這是在負載急劇上升之后才發(fā)生的調(diào)度,存在調(diào)度滯后的問題。LPERS-Flink在580~640 s 觸發(fā)調(diào)度,通過負載預測提前感知到負載上升的趨勢,通過提前觸發(fā)彈性資源調(diào)度及時響應負載的變化,集群的最高吞吐量達到78 523 tuple/s。此外,執(zhí)行離線調(diào)度的時間內(nèi)集群性能明顯下降,無法保證計算的實時性。LPERS-Flink 通過在線負載遷移技術(shù)降低了負載遷移的通信開銷,解決了集群性能下降的問題,執(zhí)行調(diào)度的過程中仍然能保證計算的實時性。然而,LPERS-Flink 在調(diào)度過程中出現(xiàn)內(nèi)存資源利用率輕微波動的現(xiàn)象,這是因為增加計算節(jié)點和拉取狀態(tài)數(shù)據(jù)的過程占用了一定的內(nèi)存資源,但并不影響正常的數(shù)據(jù)處理過程。
Streaming-Benchmark 是Yahoo 公司開發(fā)的對廣告數(shù)據(jù)進行實時分析的作業(yè),其計算邏輯復雜且存在大規(guī)模狀態(tài)數(shù)據(jù),因此其執(zhí)行過程中消耗大量的節(jié)點CPU 和內(nèi)存資源,是實時計算領域的標準Benchmark。實驗分別采集了作業(yè)執(zhí)行過程中的吞吐量、計算時延、數(shù)據(jù)堆積、節(jié)點的CPU 利用率和內(nèi)存利用率,得到如圖12 所示的實驗結(jié)果。
實驗結(jié)果表明,在計算復雜度高的作業(yè)中,調(diào)度滯后和負載遷移開銷大的問題嚴重影響集群性能,無法保證計算的實時性。如圖12(a)和圖12(b)所示,隨著計算計算負載的波動上升,EN 和FAR-Flink 分別在660~720 s 發(fā)生彈性資源調(diào)度,存在明顯調(diào)度滯后的問題。而LPERS-Flink 在540~600 s 觸發(fā)彈性資源調(diào)度,預測算法使集群提前感知到了負載急劇上升的趨勢,且預測負載與實際負載基本一致,保證了調(diào)度計劃的準確性。此外,在執(zhí)行彈性資源調(diào)度的過程中,EN 和FAR-Flink 均因為觸發(fā)彈性資源調(diào)整,在調(diào)度過程中出現(xiàn)了集群性能下降,導致其吞吐量分別降低至28 741 tuple/s 和13 257 tuple/s,而LPERS-Flink 并未因調(diào)度而導致集群性能明顯下降,其調(diào)度過程中的吞吐量能夠達到69 856 tuple/s。因此,在這一段時間內(nèi)EN 和FAR-Flink 都分別出現(xiàn)數(shù)據(jù)堆積和時延升高的問題,無法滿足計算的實時性要求,而LPERS-Flink 基本沒有數(shù)據(jù)堆積,且計算時延穩(wěn)定在300 ms 左右,這充分體現(xiàn)了在線負載遷移算法的優(yōu)越性。在資源利用方面,如圖12(c)和圖12(d)所示,LPERS-Flink 的節(jié)點CPU 利用率和內(nèi)存利用率均隨著計算負載的上升而上升,且在彈性資源調(diào)度的過程中出現(xiàn)輕微波動的現(xiàn)象,但這并不影響集群的整體性能。
綜上所述,實驗在一種彈性資源調(diào)度策略下分別執(zhí)行3 個不同的標準Benchmark,通過對比不同的性能指標,得出算法的優(yōu)缺點及適用場景,實驗結(jié)果如表7 所示。實驗結(jié)果表明,LPERS-Flink 通過提前預測計算負載,提高了集群對負載變化的感知能力;通過提前執(zhí)行彈性資源調(diào)度及時響應計算負載的波動變化,避免調(diào)度滯后的問題;通過計算任務和狀態(tài)數(shù)據(jù)的在線遷移,降低了調(diào)度過程中由數(shù)據(jù)傳輸產(chǎn)生的網(wǎng)絡資源開銷,進而降低了任務調(diào)度的時間開銷,LPERS-Flink 的網(wǎng)絡傳輸開銷低于EN 和FAR-Flink,有效提升了彈性資源調(diào)度策略的執(zhí)行效率。
圖12 Streaming-Benchmark 作業(yè)執(zhí)行效率對比
表7 對比實驗結(jié)果
隨著大數(shù)據(jù)流式計算的不斷發(fā)展,Apache Flink已經(jīng)成為數(shù)據(jù)分析領域的通用計算平臺,得到學術(shù)界和產(chǎn)業(yè)界的廣泛關(guān)注,但集群可擴展性和可伸縮性不足的問題成為制約平臺發(fā)展的瓶頸。本文提出Flink 環(huán)境下基于負載預測的彈性資源調(diào)度策略,通過準確預測負載變化、預先執(zhí)行彈性資源調(diào)度以及在線負載遷移相結(jié)合的方式,從根本上解決了集群無法及時應對負載波動的問題。本文針對有狀態(tài)流式計算場景,結(jié)合Checkpoint 機制提出的彈性資源調(diào)度策略。由于Checkpoint 機制是分布式計算平臺容錯策略的主流和通用思想,除Flink 平臺外,LPERS-Flink 策略同樣適用于Apache Heron 等所有支持Checkpoint 機制的有狀態(tài)流式計算環(huán)境。
但本文算法也存在一定的局限性。首先,LPERS-Flink 策略對MySQL 和Zookeeper 有很強的依賴性,需要依靠外部組件的協(xié)助實現(xiàn)負載預測和彈性資源調(diào)度。其次,執(zhí)行在線負載遷移的過程中,節(jié)點的資源利用率會出現(xiàn)輕微的波動,但不影響集群的整體性能。因此,未來的研究工作將主要集中于以下3 個方面。
1) 通過研究新的負載預測算法,進一步提高負載預測的效率和準確性,作為彈性資源調(diào)度的依據(jù)。
2) 降低調(diào)度策略對MySQL、Zookeeper 等外部組件的依賴性,實現(xiàn)獨立的彈性資源調(diào)度。
3) 通過優(yōu)化在線負載遷移算法,減少調(diào)度過程中節(jié)點資源利用率的波動,提高集群穩(wěn)定性。