徐 江,張晨飛,王富強,鮑 丹,屠 海 ,王懷軍
(1.中國重型機械研究院股份公司,陜西 西安710018;
2.西安理工大學,陜西 西安710048;
3.甘肅酒鋼集團宏興鋼鐵股份有限公司,甘肅 嘉峪關735100)
根據思科報告,預計到2020年將有500億設備實現智能互聯,全球數據總量將會達到40 ZB,萬物互聯的時代己經到來[1]。大數據時代下智能設備正在從數據消費者的單一角色向生產者和消費者的雙重角色轉變,這些設備產生了海量的數據處理需求,對現有的集中式云計算架構提出了嚴峻的挑戰。為了更好的滿足邊緣側的“大連接、低時延、大帶寬”需求,尤其在物聯網、工業控制、車聯網、無人駕駛等領域,邊緣計算的概念應運而生。不同于云計算的集中式架構,邊緣計算是一種分布式的計算模型,通過利用邊緣設備的計算和存儲資源,實現對邊緣數據的過濾、處理和決策,有效緩解云中心業務和網絡帶寬壓力[2]。同時,邊緣服務器通過容器技術的虛擬化環境,為不同用戶和邊緣設備提供服務卸載能力,借助同期技術無需考慮程序的環境配置問題和資源隔離的安全問題,增加了物聯網的靈活性。與傳統主機級虛擬化技術不同,容器技術采用沙箱機制實現進程級隔離,具有占用物理主機資源少,啟動速度快,移植能力強的優點[3]。容器虛擬化的優勢,相比主機級虛擬化更適合作為邊緣應用的載體,應對邊緣場景下更加復雜的集群管理和應用部署問題[4]。容器技術的生態圈逐漸形成,基于容器技術的容器云也迅速發展。然而,容器云發展時間較短,成熟度低,并且面臨著復雜的資源管理問題[5]。例如,企業通常在購置設備時不得不考慮經濟成本和公司規模,因此不像云服務商那樣擁有大量的備用設備。對于企業,資源的預留、分配和回收等成為一個非常重要的問題[6],如果能較為準確的預知未來一段時間內自身應用對資源的需求量,就可以提前申請和購買相應設備,避免因無力資源不足導致業務停止運行,給企業造成負面影響;
如果未來一段時間的資源需求量遠低于現有設備數,就可以進行數據和業務遷移,停止某些設備的運行,降低能耗,提高企業的經濟效益和資源利用率。
因此,容器云資源預測對推進容器云理論和技術更進一步發展、提高企業經濟效益、避免資源浪費等具有重要意義,值得研究。
目前,邊緣計算在很多方面都發揮著重要的作用。比如,在公安安全方面,邊緣計算可用于視頻監控以及消防系統。在城市建設中,大量的攝像頭被使用,攝像頭產生海量的數據,利用邊緣計算技術在距離設備較近的地方處理這些數據,可以很好的降低網絡傳輸帶寬。在智能家居方面,由于智能設備越來越多,如何有效的管理這些設備是需要解決的一個問題。Lu[7]等人設計了一種基于邊緣計算構建的智能家居控制系統,該系統分為終端感知層、邊緣處理層以及控制應用層。在制造業方面,利用邊緣計算技術可以實現更快的數據分析,簡化運營,提高制造企業的生產效率和服務質量。邊緣計算的商業價值方面Guo[8]等人針對邊緣云的資源融合以及服務分發問題,開展了探索性研究工作,提出了“邊際計算模型”。邊緣計算與緩存方面,Zhu J[9]等人考慮到網頁加載的時間主要發生在前端,通過在邊緣服務器中對網頁中js/css等資源進行優化并緩存,有效降低用戶的訪問時延。Chen M[10]等人提出一種基于任務流行度、任務大小以及緩存所需的計算能力的最優緩存策略,提供對計算任務的緩存,有效減低時延。
云計算資源預測是云計算平臺實現資源高效管理和系統安全、穩定運行的重要前提和保障措施之一,長期以來一直受到研究者的關注且運用于資源預測中的預測方法也有很多。謝曉蘭等人針對容器云存在過度供應和供應不足等資源問題,提出一種基于三次指數平滑法和時間卷積網絡的云資源預測模型[11],根據歷史數據預測未來的資源需求,使用TPOT調參思想優化參數,提供更好的預測性能。針對云計算環境中的資源負載預測問題,國內外一些學者提出了多種解決方案和負載預測模型。這些預測模型一般將云計算資源負載看作一種時間序列,然后通過一定的建模方法對其進行預估[12]。文獻[13]使用ARIMA負載預測模型對虛擬機集群的負載進行收集及預測。隨著人工神經網絡的發展,越來越多的人工神經網絡方法被應用到時間序列預測當中。文獻[14]對LSTM負載預測模型與ARIMA預測模型進行了比較分析,從結果可以看出,LSTM負載預測模型優于ARIMA負載預測模型。文獻[15]通過優化支持向量機構建負載預測模型,對單步與多步云計算資源負載進行預測分析。文獻[16]使用遞歸神經網絡RNN來實現對云工作負荷的預測,通過Google Cloud Trance數據集上的實驗驗證了該方法的準確性。文獻[17]首先使用ARIMA模型進行預測,再使用ENN模型對AR-MA誤差進行預測,最終得到修正后的預測值。該文獻提出的組合預測模型有效地提升了云環境中工作負載預測的精度。采用多模型融合的方式進行了云計算資源負載預測,將負載數據集分為訓練集與測試集,利用ARIMA、指數平滑法、神經網絡等預測模型根據訓練集的平均均方誤差對測試集各預測結果進行權重劃分,最后得到組合預測值。文獻[18]采用了ARIMA-ANN的組合預測模型,分別對時間序列數據進行線性和非線性的預測,并將最終結果組合。實驗結果表明,混合模型均具有更高的預測精度。文獻[19]提出了一種基于ARIMA與LSTM的組合模型LACL,使用公開數據集與傳統負載預測模型進行了對比試驗,顯著降低了云環境中對資源負載的實時預測誤差。文獻[20]提出了一種基于負載預測的虛擬資源調度策略VRSP-LP,根據最近一個時間區間內的虛擬機負載數據,預測下一個時間區間內的負載,從而進行資源動態分配實現負載均衡。
可見,對平臺歷史資源進行時效性,準確性的預測,是如何對平臺歷史資源數據進行時效性、準確性的預測,是研究容器云資源預測的重要問題之一。本文提出了一種ARIMA-LSTM混合模型的容器云資源預測方法,解決了單個預測算法不能同時求解容器云資源需求量數據中的線性分量和非線性分量問題。該模型使用自回歸綜合移動平均模型(ARIMA)來預測資源需求量中的線性分量,并使用長短期記憶模型(LSTM)來預測非線性分量。以容器云資源使用量為例,通過比較單一模型和混合模型的預測結果,驗證了本文預測方法的有效性。
容器云資源需求量的時間序列中含有線性分量和非線性分量,僅采用單一模型難以充分學習資源使用量序列的特性。本文采用線性和非線性模型組合的方法來預測容器云資源需求量,利用線性模型ARIMA擬合時間序列的資源需求量數據,最大程度地消除數據中的線性成分;
然后利用非線性模型LSTM來預測線性模型無法擬合的誤差序列,并以此來校正最終預測結果。
ARIMA模型在時間序列分析中的能力和靈活性已得到廣泛證明。ARIMA模型建立過程主要包括數據平穩性檢測、數據差分處理、模型定階、模型檢驗以及模型結果預測,ARIMA模型構建流程如圖1所示。
圖1 ARIMA模型的構建
(1)數據平穩性檢測。時間序列平穩性檢測最常用的就是觀察法。觀察法通過觀察容器負載時間序列變化趨勢來判斷是否平穩,判斷依據是如果時間序列值只在某個常數附近隨機變化并且沒有出現周期規律的趨勢,數據平穩;
如果時間序列值存在單增或單減趨勢,數據非平穩。除了觀察時間序列自身變化趨勢判定是否平穩外,還可以通過觀察時間序列的觀察ACF自相關圖和偏自相關圖所表現的特征來判定數據平穩性。通過計算自相關函數和偏自相關函數來畫圖,其中通過自相關函數如式(1)可以獲取自相關數如式(2)。
(1)
(2)
偏自相關函數如式(3)所示。
(3)
(2)數據差分處理。因為模型只能處理平穩數據,所以面對非平穩數據時必須進行差分處理。差分處理的原則是能用低階滿足要求就不在用高階進行處理,因為過度的差分會使原始數據信息丟失,差分處理數學表達式如下。
zt=yt-yt-1,t=1,2,3…
(4)
式中,zt表示差分后的數據;
yt為原始的容器負載值。
(3)模式定階。根據前面介紹可得,ARIMA(p,d,q)模型中包含了自回歸系數、差分次數以及移動平均項階數。在使用ARIMA模型進行預測之前需要確定這三個參數,針對差分階數需要由所做差分處理的階數決定;
針對自回歸系數和移動平均項階數可利用AIC和BIC標準選擇出最小參數。本文使用AIC準則確定參數,AIC準則的數學表達式為
AIC=-2In(L)+2N
(5)
式中,L為模型的似然函數;
N為模型中未知參數的個數。
(4)有效性檢驗。有效性檢驗主要包括對模型的顯著性檢驗和對參數的顯著性檢驗。其中針對模型的顯著性檢驗,主要是通過檢驗殘差序列是否為白噪聲序列,通常使用LB檢驗統計量作為殘差序列有效性檢驗標準。針對ARIMA模型,可以先做出假設檢驗。
H0∶ρ1=ρ2=…=ρm=0,?m≥1 (6) 在此假設基礎上構建LB統計量。 (7) 當第一個假設成立時,說明模型是顯著有效的; 針對參數顯著性檢驗主要是為了檢驗模型中所有參數是否是顯著非零的,通過刪除不顯著的參數來精簡模型。針對模型參數做出如下假設。 H0∶βj=0 (8) 式中,βj是參數。 參數顯著性檢驗的統計量為 (9) 當第一個假設成立時,需要刪除這個參數; (10) 式中,St表示差分平穩序列; LSTM預測模型構建過程如圖2所示。從圖2中可知LSTM預測模型構建分為數據預處理、模型參數設置、模型訓練和結果輸出。 圖2 LSTM模型的構建 (1)數據預處理。原始的容器負載時間序列數據不適合直接被預測模型使用。因此,在使用數據之前需要對數據進行預處理,常用的預處理方法是將時間序列數值范圍限定在[0,1]之間,即數據歸一化處理。歸一化數學表達式為 (11) 式中,t為時間;yt為t時刻的輸入原始時間序列數據; (2)模型參數設置。LSTM模型中有訓練窗口數大小、隱藏層節點數以及訓練迭代次數參數,并通過調整參數值訓練模型。模型激活函數的選取至關重要,考慮到ReLu模型具有明顯的優勢,本文選用ReLu激活函數。 (12) 式中,y為的是容器負載原始時間序列; 本文構建的云資源預測模型為如圖3所示。 圖3 ARIMA-LSTM預測模型 圖3中,將容器云資源使用量時間序列輸入到ARIMA模型中,得到線性資源預測值; 首先,針對指標權重的計算,先計算各指標包含的信息量Cj如下。 (13) σj表示第j項指標的標準差,本文采用4種誤差評價指標,因此k=4; 通過各指標包含的信息量Cj計算出各指標權重Wj為 (14) 然后,通過指標權重Wj和指標概率Pij求出各模型的權重Pi。 AIC=-2In(L)+2N (15) (16) rij表示標準化后的誤差評價指標值。 最后,利用各模型權重融合各模型的預測結果如下。 (17) 計算得出的權重值分別為PARIMA=0.42,PLSTM=0.58。得到組合預測結果后,通過組合預測結果和真實值求出誤差,并對誤差進行修正,進一步提升預測結果精度。 容器調度對于保證邊緣計算集群負載均衡和提升集群整體資源利用率具有重要意義。邊緣計算集群中的負載是動態隨機變化的,集群中節點負載過高或過低都會影響部署的應用容器所使用的資源。因此,為了保證集群負載均衡從而提升集群資源利用率,對集群內容器資源進行合理調度是非常重要的。在實現容器調度過程中,主要涉及到容器調度的時機選擇、被調度容器的選擇以及調度目標節點的選擇。 集群內容器調度時機的觸發主要分為兩種情況。針對新建Pod容器會觸發容器調度機制,將新建Pod調度到剩余計算量最多的節點上。針對集群在運行狀態時,會對集群內各節點的負載值進行周期性監控,并基于閾值將節點分成三類,分別為低負載節點、臨界負載節點以及高負載節點。當節點負載高于高負載閾值時,就觸發容器調度機制。節點分類如圖4所示。 圖4 節點分類 其中,CVl表示低閾值界限,CVh表示高閾值界限。當節點負載值高于CVh時觸發容器調度機制,將該負載節點上的部分容器調度到低負載節點上,實現集群負載均衡,提升集群資源利用率。本文低閾值界限CVl=0.4,高閾值界限值CVh=0.8。 容器調度機制進行容器調度時,選擇高負載節點中的容器應用進行調度,可以有效降低節點負載,實現集群的負載均衡。在選擇被調度容器的時候,借用上文提出的容器負載預測模型,使用模型對該節點上所有的容器進行預測,然后綜合考慮容器現有負載值和預測值來算出容器負載綜合值,將容器負載綜合值最高的容器調度到低負載節點上。假設容器當前的負載值為x,使用預測模型預測出來的下一時刻的負載值為y。形式化上,我們定義綜合容器負載值為。 Z=α1×x+α2×y (18) α1和α2為權重系數,α1+α2=1.0,0≤α1≤1,0≤α2≤1。其中α1=0.3,α2=0.7。 為待調度容器選擇目標節點的時候,需要考慮目標節點的剩余資源量是否能滿足容器應用的資源需要。本文僅考慮CPU這一種負載值,所以僅考慮節點剩余CPU計算量是否滿足容器應用即可。容器調度策略從高負載節點中選擇待調度容器后,將其調度到低負載節點列表中任意一個節點即可。 為了衡量容器負載預測值與容器負載真實值之間的差距,需要選用合理的評價指標來評價容器負載預測結果的精確度,而精確度最直觀的量化標準就是用誤差。常見的誤差指標有絕對平均誤差(MAE)、絕對平均百分比誤差(MAPE)、均誤差(MSE)和均方根誤差(RMSE)。其公式分別為 (19) (20) (21) (22) (23) (24) 本實驗的硬件環境為一臺PC,其配備i5處理器,16G內存。軟件環境為Windows10操作系統,編程語言是Python3.0。容器云平臺集群環境為一個Kubernetes集群,集群內包含一個Master節點三個Node節點。開源邊緣計算框架EdgeX Foundry以容器方式部署在Kubernetes集群上面。 本次實驗中,利用自定義監控方案對所搭建的邊緣計算平臺中的應用容器進行樣本數據的采集,采集時間間隔為5 s,利用半小時采集數據即360個數據作為樣本,取前90%即324個樣本數據作為預測模型的輸入數據,后10%即36個樣本數據作為真實值與預測值進行對比。因為實驗條件的局限性,這里暫時主要利用容器云的CPU資源使用量作為預測分析。如圖5所示是樣本數據的折線圖,從圖中可以看出,樣本數據在時間上具有一定的相關性,發現其都是動態變化的,在短時間內頻繁波動,包含有線性關系和非線性關系,具備一定的規律性和周期性。 圖5 容器負載時間序列 從圖5可以看出,容器負載數據是動態隨機變化的,并且在短時間內負載值波動頻繁,由此可以得出負載數據中包含線性成分數據和非線性成分數據。圖4~圖6中樣本數據前期CPU利用率比后期高,是因為所采集的數據是在基于強化學習容器伸縮策略控制下環境中采集的,負載請求由新Pod分攤,所以容器CPU利用率會降低,因此樣本數據才會存在這樣的趨勢。 5.3.1 負載預測實驗 (1)ARIMA模型參數確定。數據平穩性檢測。容器負載原始時間序列如圖5所示,時間序列的ACF自相關如圖6所示。通過觀察圖5原始數據和圖6的自相關圖可以得出容器負載時間序列數據是不平穩。 圖6 ACF自相關圖 數據平穩性處理:對容器負載原始時間序列數據做差分處理,得到的一階差分序列如圖7所示。 圖7 一階差分序列 將容器負載時間序列數據經過一階差分后,需要對一階差分數據進行平穩性檢測,其中一階差分數據的自相關圖如圖8所示,圖中出現截尾表明差分后的時間序列平穩。 圖8 ACF自相關圖 模型定階:對非平穩化數據進行差分處理,可以唯一確定序列差分階數d。而針對p和q參數存在多種可能,本文將0-4之間的所有可能組合值進行計算其信息量,信息量最小所對應的那組參數就是模型最優參數。表1中可以看出(1,3)是最小的,因此確定ARIMA模型的三個參數,分別為(1,1,3)。 表1 AIC信息量 模型檢驗:通過模型定階確定了模型的參數,將所確定的參數代入模型檢驗,通過繪制容器負載時間序列的殘差序列的ACF和PACF如圖9所示,可以看出該模型通過檢驗,最終確定該模型為ARIMA(1,1,3)。 圖9 ACF和PACF圖 (2)負載預測。通過上文獲取的實驗數據對組合預測模型進行訓練,使用訓練好的模型對容器負載數據進行預測。ARIMA模型和LSTM模型的相關參數值如表2、3所示。 表2 LSTM模型參數 表3 ARIMA模型參數 利用容器負載組合預測模型以及各單一模型分別對容器負載數據進行預測,模型預測效果如圖10所示,各模型誤差評價指標值如表4所示。 圖10 模型預測結果 圖10顯示三種預測模型的預測結果,可以看出ARIMA-LSTM組合預測模型的預測值與真實值最為接近,可以得出組合預測模型預測效果最好。為準確評價各模型的預測效果,使用4種誤差評價指標評價模型預測的精度,各模型的誤差指標值如表4所示。 表4 誤差值 從表4中加粗字體數據可以看出,ARIMA-LSTM組合模型的預測誤差最小,精度最高。結合模型預測結果圖和模型誤差值可以得出結論:ARIMA-LSTM組合預測模型的預測最佳,對實現容器資源調度提供有效的數據依據。 5.3.2 容器調度實驗 將容器負載預測值作為容器調度策略的輸入,作為被調度容器的選擇標準。實驗結果以集群資源利用率和集群負載均衡度來衡量。表5是集群負載均衡度,圖11所示是集群CPU資源利用率。 圖11 集群資源利用率 表5 集群資源負載均衡度 從表5也可以得出,ALS策略下的集群負載均衡度比Kube-scheduler策略低,說明ALS策略更能有效保證集群負載均衡。從圖11也可以看出,ALS策略對比Kube-scheduler能更有效的提升集群資源利用率。因此,ALS策略比Kubernetes原生調度策略好,更能滿足邊緣計算場景中資源調度的需求。 本文在邊緣計算框架EdgeX Foundry,以及開源容器云平臺Kubernetes基礎之上,提出了一種基于ARIMA-LSTM混合模型的容器云資源預測方法,通過ARIMA模型的線性特點和LSTM的非線性特點優勢預測容器云的資源需求量,有效提高了預測精度,從而為容器云資源的管理和利用提供更準確的數據基礎。本文介紹了基于容器負載預測的容器調度策略的實現,主要包括容器負載預測模型的構建以及基于預測值實現容器調度;
H1∶至少存在某個ρk≠0,?m≥1,k
當第二個假設成立時,說明殘差序列中還存在線性關系,模型不顯著有效。
H1∶βj≠0
當第二假設成立時,說明參數是顯著的,不需要刪除。
Zt表示隨機誤差;
p表示自回歸系數;
q表示移動平均數。2.2 LSTM模型構建
yt(max)和yt(min)分別表示原始數據的上界和下界;
zt(max)和zt(min)分別為1和-1。
f1為LSTM模型代表的函數關系;
n為窗口大小。2.3 ARIMA與LSTM混合模型構建
比較原始數據和線性擬合數據,得到擬合誤差序列;
利用LSTM模型預測擬合誤差序列;
將線性擬合預測值與非線性誤差預測值相加,得出混合模型最終的預測結果。使用CRITIC客觀賦權法實現兩種模型預測結果的融合,并使用誤差修正提升預測精度。CRITIC是一種客觀的權重賦權方法,通過各指標概率和各指標權重計算出各模型的權重,能更好的挖掘各單一模型中的有用信息。這里指標是指用于評價預測結果的誤差評價指標,本文選用4種誤差評價指標。
tij為評價指標i和j之間的相關系數,其中m表示模型的個數且m=2。信息量Cj取值越大,說明該指標包含的信息量越大。3.1 容器調度時機的選擇
3.2 待調度容器的選擇
3.3 調度目標節點的選擇
4.1 誤差評價指標
4.2 集群負載均衡度
5.1 實驗環境
5.2 實驗數據獲取
5.3 結果與分析
然后通過實驗分析證明了基于容器負載預測的容器調度策略比kube-scheduler策略能更有效的保證集群負載均衡,提升集群整體資源利用率。