周泓岑,白 恒,才振功,蔡 亮,顧 靜,湯志敏
(1. 浙江大學(xué)軟件學(xué)院,浙江寧波 315000;2. 阿里巴巴集團(tuán),浙江杭州 310000)
隨著云計算技術(shù)的快速發(fā)展,容器作為輕量級的虛擬化技術(shù)成為云計算平臺虛擬化資源的主要方式,越來越多的公司將應(yīng)用遷移到容器云平臺上,大量數(shù)據(jù)中心存在資源分配率(即分配給所有容器的資源占可分配總資源的比例)較高而資源利用率較低的情況.當(dāng)前業(yè)界通常將容器配額設(shè)置為標(biāo)準(zhǔn)尺寸或者根據(jù)經(jīng)驗進(jìn)行設(shè)置,標(biāo)準(zhǔn)尺寸在大規(guī)模系統(tǒng)中并不總是可達(dá),根據(jù)經(jīng)驗進(jìn)行設(shè)置需要大量的運維人員,并且這兩種方法都存在極大的資源浪費. 不同服務(wù)對容器擁有不同的尺寸需求(即容器的各種資源配額),并且服務(wù)對資源的需求是彈性的,通常通過預(yù)留大量資源以應(yīng)對服務(wù)對資源的彈性需求,所以在滿足服務(wù)對資源的彈性需求的同時實現(xiàn)資源節(jié)省將是一大難題. 容器尺寸過大容易導(dǎo)致資源碎片和資源利用率不足的問題,容器尺寸過小將導(dǎo)致內(nèi)存硬盤等資源成為瓶頸并帶來額外資源損耗. 因此,容器尺寸的合理設(shè)置也是一大難題.
針對這些問題,本文提出了一種新穎的容器配額優(yōu)化算法,該算法設(shè)計了一種新的網(wǎng)絡(luò)結(jié)構(gòu)用于構(gòu)建容器配額優(yōu)化方案. 本文的貢獻(xiàn)主要包括以下3個方面.
(1)提出了一種融合長短期記憶神經(jīng)網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)和廣義回歸神經(jīng)網(wǎng)絡(luò)(Generalized Regression Neural Network,GRNN)的深度神經(jīng)網(wǎng)絡(luò)(LSTM and GRN Network,LGN). 它從時間和數(shù)量兩個維度捕捉集群狀態(tài)和資源使用量之間的相互關(guān)系,相比其他模型具有更高的準(zhǔn)確度.
(2)使用LGN 建立了資源容量模型,并基于設(shè)計了該模型的容器配額計算方案,與目前常用的谷歌容器垂直自動擴展器(Vertical Pod Autoscaler,VPA)[1]和水平自動擴展器(Horizontal Pod Autoscaler,HPA)相比,該方案減少了至少10%的集群資源分配總量并提升了至少6%的集群資源利用率.
(3)改進(jìn)的量子粒子群算法(Quantum Particle Swarm Optimization,QPSO)實現(xiàn)了對網(wǎng)絡(luò)結(jié)構(gòu)超參數(shù)的自動化優(yōu)選和更快的收斂速度,避免了手動調(diào)參的煩瑣與低效.
當(dāng)前云環(huán)境下的資源分配問題已經(jīng)得到學(xué)術(shù)界廣泛的研究[2~5],在云計算平臺的資源分配問題上,多數(shù)分配策略基于優(yōu)化算法或者用戶及應(yīng)用分析獲得的某些特征. 例如Alam 等人提出了一種基于可靠性的云環(huán)境資源分配策略,最小化成本的同時,將用戶應(yīng)用可靠性最大化[6];周景才等人則通過分析用戶的行為特征來進(jìn)行資源分配[7];Islam 等人提出了一種用于云環(huán)境中自適應(yīng)資源供應(yīng)的負(fù)載預(yù)測模型,并將其運用到云環(huán)境資源分配領(lǐng)域,且取得了較好的效果[8]. 部分分配策略基于博弈思想,使用博弈模型來解決資源分配問題. 例如丁丁等人提出一種基于雙邊拍賣機制的適應(yīng)性云計算資源分配機制[9]. 以上提到的資源分配策略,大多在服務(wù)粒度下進(jìn)行資源分配,容器層面的資源分配策略則主要集中在對容器的實例數(shù)和資源請求量進(jìn)行自動調(diào)整. 例如Balla 等人提出的Libra 自動擴展器,自動為容器設(shè)置配額并進(jìn)行擴縮容管理[10];Rattihalli等人設(shè)計了一種基于容器資源利用的自動擴展系統(tǒng)RUBAS,實現(xiàn)了容器的無中斷垂直自動擴縮容和資源使用量預(yù)估[11];Rossi 等人則利用強化學(xué)習(xí)方法實現(xiàn)了一種云環(huán)境的自我管理,根據(jù)容器運行情況靈活采用水平擴展或垂直擴展來調(diào)整容器的資源分配,然而該方法的模型訓(xùn)練耗時過長,很難運用在生產(chǎn)環(huán)境中[12].
作為最大的云服務(wù)提供商之一,Google Cloud 也為用戶提供了容器配額生成服務(wù),稱為垂直自動擴展器VPA 和水平自動擴展器HPA. VPA 可以讀取應(yīng)用容器的資源使用情況等指標(biāo),根據(jù)目標(biāo)利用率計算出一個配額推薦值,它會在合適的時機更新所有容器的配額.但VPA 因為穩(wěn)定性和性能原因尚未被廣泛應(yīng)用.HPA用于在配額恒定的情況下,針對不同的負(fù)載對容器的實例數(shù)進(jìn)行伸縮,從而將每個容器的資源使用率控制在一定范圍內(nèi).HPA相比VPA應(yīng)用要更加廣泛,但不能與VPA同時使用.
本節(jié)將介紹LGN的組成和各部分的結(jié)構(gòu),它是后文構(gòu)建資源容量模型的基礎(chǔ). 圖1 展示了LGN 的整體結(jié)構(gòu),它由廣義回歸神經(jīng)網(wǎng)絡(luò)模塊、長短期記憶網(wǎng)絡(luò)模塊、人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network,ANN)模塊和改進(jìn)的量子粒子群算法模塊等部分組成. 容器資源使用量與時間和請求量兩個維度都有密切關(guān)系.LSTM 常用于時間序列預(yù)測問題,LGN 中LSTM 模塊通過訓(xùn)練獲得下一時刻的資源使用量.GRNN常用于線性與非線性關(guān)系擬合,LGN中通過GRNN模塊獲得請求量與資源使用量之間的相互關(guān)系.ANN常用于各種關(guān)系的擬合,LGN中通過ANN 模塊獲得最終的資源使用量. 同時LGN 使用改進(jìn)量子粒子群算法對網(wǎng)絡(luò)結(jié)構(gòu)超參數(shù)進(jìn)行優(yōu)選.
圖1 配額優(yōu)化算法結(jié)構(gòu)圖
GRNN 的理論基礎(chǔ)是非線性回歸分析,它可以擬合線性和非線性關(guān)系,常用于非線性關(guān)系的建模分析[13~15]. 本文設(shè)計了一個典型的4層GRNN模型用于擬合服務(wù)請求量和資源使用量的相互關(guān)系,網(wǎng)絡(luò)結(jié)構(gòu)圖如圖2所示. 第一層為輸入層,神經(jīng)元個數(shù)為1個,用于輸入服務(wù)請求量(Queries Per Second,QPS);第二層為模式層,神經(jīng)元個數(shù)為訓(xùn)練樣本的個數(shù);第三層為求和層,神經(jīng)元個數(shù)為2個;第四層為輸出層,神經(jīng)元個數(shù)為1個,用于輸出資源使用量.
圖2 廣義回歸神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖
為了獲得資源使用情況與時間之間的深度關(guān)系,本文構(gòu)建了長短期記憶神經(jīng)網(wǎng)絡(luò),并使用資源使用情況的時序序列對其進(jìn)行訓(xùn)練.LSTM 是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò),與RNN 網(wǎng)絡(luò)相比,LSTM 網(wǎng)絡(luò)在長時序場景中有更好的表現(xiàn)[16~18]. 本文使用了一個經(jīng)典的雙層LSTM 網(wǎng)絡(luò)模型,輸入資源使用量的時間序列,輸出下個時間點的資源使用量預(yù)測值.
人工神經(jīng)網(wǎng)絡(luò)模塊使用BP 神經(jīng)網(wǎng)絡(luò)作為網(wǎng)絡(luò)結(jié)構(gòu)[19~22]. 本文設(shè)計了一個典型的4 層神經(jīng)網(wǎng)絡(luò)模型用于擬合前2 個模塊的輸出和資源使用量的關(guān)系. 神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如下:輸入層有2 個神經(jīng)元,用于輸入GRNN 的輸出和LSTM 的輸出,輸出層有一個神經(jīng)元,用于輸出資源使用量Y,中間有2 層隱藏層,每層隱藏層的神經(jīng)元個數(shù)由改進(jìn)的量子粒子群算法確定個數(shù).
粒子群算法[23]被廣泛應(yīng)用于各種優(yōu)化問題中[24,25],相比粒子群優(yōu)化算法取消了粒子的移動方向?qū)傩?,該算法可以以概? 收斂于最優(yōu)解,具有較好的全局尋優(yōu)能力. 算法的步驟如下.
第1步計算平均粒子歷史最好位置Mbest,計算公式如式(1)所示.
式(1)中,M表示粒子群的大小,Pbest_i表示當(dāng)前迭代中第i個Pbest,Pbest表示在參數(shù)取值的變化過程中到當(dāng)前為止最優(yōu)適應(yīng)度函數(shù)值對應(yīng)的取值.
第2步粒子位置更新,計算式如式(2)所示.式(2)中,gbest表示當(dāng)前全局最優(yōu)粒子,Pi用于第i個粒子位置的更新. 粒子位置更新式如式(3)所示.
式(3)中,xi表示第i個粒子的位置,φ和u為(0,1)上的均勻分布數(shù)值. 取+和-的概率都為0.5.α為創(chuàng)新參數(shù),QPSO 算法中只有一個創(chuàng)新參數(shù)α需要自行設(shè)置,α一般?。?,1)之間的固定值,改進(jìn)后的α計算公式如式(4)所示.
式(4)中,αmax表示最大創(chuàng)新參數(shù),αmin表示最小創(chuàng)新參數(shù),NowIter 表示當(dāng)前的迭代次數(shù),MaxIter 表示最大迭代次數(shù).
使用改進(jìn)的量子粒子群算法對GRNN 的δ值、LSTM 的兩層隱含層神經(jīng)元個數(shù)和ANN 的兩層神經(jīng)元個數(shù)進(jìn)行優(yōu)選,設(shè)置QPSO 算法的各項參數(shù),適應(yīng)度函數(shù)的計算方法如式(5)所示. 使用QPSO 算法迭代訓(xùn)練得到LGN的各項網(wǎng)絡(luò)超參數(shù).
當(dāng)前各種云計算平臺上常見的容器配額配置策略有以下3種.
(1)統(tǒng)一設(shè)置為標(biāo)準(zhǔn)尺寸. 在大規(guī)模系統(tǒng)上并不總是可達(dá),而且存在顯而易見的資源浪費.
(2)交由用戶定制. 隨機或根據(jù)經(jīng)驗進(jìn)行設(shè)定.
(3)按照容器的資源使用量動態(tài)規(guī)劃容器配額. 例如谷歌的Kubernetes VPA,這種縱向擴縮容機制和容器實例數(shù)的橫向擴縮容相沖突,而且可能會使容器陷入內(nèi)存溢出死循環(huán).
容器配額優(yōu)化問題目標(biāo)是確定分配給每個服務(wù)實例(即容器)的資源和總的實例個數(shù),使得所用機器的資源總量最小,實例中資源利用率較高. 配額優(yōu)化算法問題定義如表1所示.
表1 配額優(yōu)化問題定義
算法整體結(jié)構(gòu)圖如圖1 所示,算法的具體步驟如下.
(2)獲取資源使用數(shù)據(jù). 獲取應(yīng)用在不同負(fù)載梯度下滿足服務(wù)質(zhì)量的CPU 資源使用總量U sc、內(nèi)存資源使用總量U sm、服務(wù)請求量Q、時間戳T等數(shù)據(jù).
(3)建立容量模型. 使用LGN 建立容量模型求得服務(wù)請求量Q、時間T與CPU 使用量的相互關(guān)系Fsc(
Q,T),以及服務(wù)請求量Q、時間T與內(nèi)存使用量的相互關(guān)系Fsm(Q,T).
(4)使用上一步中獲得的容量模型,根據(jù)服務(wù)s、時間T、服務(wù)請求量Q計算所需CPU 資源總量Dcs(Q,T)和內(nèi)存資源總量Dms(Q,T).
(5)根據(jù)(4)中獲得的資源需求總量和容器配額算法計算得到容器配額.
歷史數(shù)據(jù)包括時間戳、容器的配額、資源使用量、服務(wù)的容器數(shù)、服務(wù)請求量等相關(guān)信息.
本文選取了一個具有代表性的開源web 應(yīng)用Peer-Tube[26]作為測試應(yīng)用,該應(yīng)用提供去中心化的視頻服務(wù). 將其容器化后部署到Kubernetes集群中. 采集服務(wù)器端應(yīng)用在不同的每秒請求量(Queries Per Second,QPS)和資源配額下的服務(wù)質(zhì)量和各項運行數(shù)據(jù),實驗中使用響應(yīng)時間衡量服務(wù)質(zhì)量.
容量模型用于計算在時間和請求量下所需要的資源量,建立容量模型步驟如下.
(1)獲取原始數(shù)據(jù)并進(jìn)行數(shù)據(jù)預(yù)處理.
(2)建立LGN模型. 建立并使用該模型獲得時間T、服務(wù)請求量Q與CPU使用量之間的關(guān)系Fsc(Q,T),以及時間T、服務(wù)請求量Q與內(nèi)存使用量之間的關(guān)系Fsm(Q,T).
獲得服務(wù)在某個時間和服務(wù)請求量下所需CPU 資源和內(nèi)存資源后,乘以常數(shù)N 作為所需資源.N 的取值通常大于1,如1.15,表示系統(tǒng)為CPU 和內(nèi)存資源提供15%的冗余量,以保證服務(wù)運行的穩(wěn)定性. 接著除以目標(biāo)利用率得到在該時間和服務(wù)請求量下所需資源總量. 之后可以根據(jù)以下3種規(guī)則求得容器配額.
規(guī)則1 最小化容器數(shù). 根據(jù)當(dāng)前時間和服務(wù)請求量獲得所需資源總量,用所需資源總量除以最小容器數(shù)得到每個容器的資源配額. 優(yōu)點是簡單、高效,適用于冷啟動. 缺點是容器尺寸較大,影響緊湊部署.
規(guī)則2 等比例配額. 使容器配額的CPU 和內(nèi)存比值接近機器的CPU 和內(nèi)存比值. 優(yōu)點是有利于緊湊部署,適用于冷啟動. 缺點是機器結(jié)構(gòu)及容器尺寸分布會影響性能.
規(guī)則3 最大化容器數(shù). 根據(jù)當(dāng)前時間和服務(wù)請求量獲得所需資源總量,用所需資源總量除以最大容器數(shù)獲得每個容器的資源配額. 優(yōu)點是簡單高效,有利于緊湊部署,適用于冷啟動. 缺點是容器太多可能會帶來資源管理損耗.
本文數(shù)據(jù)采集主要是基于zabbix系統(tǒng),采集時間間隔是5 min,每天采集288 條數(shù)據(jù),包含系統(tǒng)硬件資源使用率數(shù)據(jù)(CPU、內(nèi)存、磁盤IO、網(wǎng)絡(luò)IO 等)、QPS、應(yīng)用性能數(shù)據(jù)(請求響應(yīng)時間、錯誤率)等,本文重點提取了與資源使用量相關(guān)的數(shù)據(jù)采集時間、QPS、CPU 使用量和內(nèi)存使用量,數(shù)據(jù)格式如表2所示.
表2 數(shù)據(jù)集格式示意表
為了驗證本文提出的LGN 神經(jīng)網(wǎng)絡(luò)相較于其他模型有更高的精確度,在同一數(shù)據(jù)集上使用多種模型進(jìn)行訓(xùn)練,并比較它們的預(yù)測結(jié)果.
使用不同模型進(jìn)行預(yù)測的精準(zhǔn)度對比如表3所示.結(jié)果表明,本文提出的LGN 模型相較于其他模型有著更高的預(yù)測精確度.
表3 資源使用預(yù)測中各種模型的預(yù)測誤差
本文所有實驗均在云計算平臺Kubernetes上進(jìn)行,采用知名開源視頻平臺PeerTube作為實驗應(yīng)用.
通過實驗采集本文提出的3 種配額方案與VPA、HPA在不同負(fù)載下的資源使用情況,將應(yīng)用分為實驗組和對照組,實驗組包括VPA配額方案、HPA配額方案、等比例配額方案、最大配額數(shù)方案和最小配額數(shù)方案共5組. 收集實驗組應(yīng)用在不同QPS負(fù)載下,在滿足服務(wù)質(zhì)量前提下處理請求需要的實例數(shù)以及對應(yīng)的資源使用量.對照組在實驗中維持單實例不限制配額狀態(tài),用來為本文提出的算法提供必要參數(shù),并在實驗結(jié)束后與實驗組進(jìn)行比對.HPA 則按照使用慣例及經(jīng)驗,配額設(shè)置為1核2 GB,容器資源使用率設(shè)置為60%~80%.
最大配額數(shù)方案、最小配額數(shù)方案和等比例配額方案的實例數(shù)原則上由用戶設(shè)置的參數(shù)計算得到,在驗證實驗中,我們將最大配額數(shù)方案實例數(shù)設(shè)置為10,最小配額數(shù)方案實例數(shù)設(shè)置為3,等比例配額方案的實例數(shù)設(shè)置為6,VPA 配額方案的實例數(shù)等同于等比例配額方案,方便實驗后進(jìn)行性能比對.
第1 步部署對照組應(yīng)用,進(jìn)行梯度測試,記錄測試過程中的QPS 與資源使用量,通過前文提出的容量模型確定實驗組應(yīng)用的資源配額.
第2步使用3種不同配額方案生成3種不同的資源配額,這3 種配額方案有最大配額數(shù)方案、最小配額數(shù)方案和等比例配額方案實例數(shù). 部署開啟VPA 的應(yīng)用,實例數(shù)等同于等比例實例數(shù). 部署開啟HPA 的應(yīng)用,配額恒定,按照容器負(fù)載對實例數(shù)進(jìn)行伸縮. 最終得到3 種資源配額和VPA 的資源配額及HPA 資源配額共5種配額方案. 在5臺資源容量均等的機器上分別部署5組實驗組應(yīng)用.
第3 步測試并記錄5組實驗組應(yīng)用在處理不同QPS負(fù)載時,在滿足服務(wù)質(zhì)量的前提下的實例數(shù)和資源使用量.
第4步對比實驗組和對照組的各項數(shù)據(jù),驗證本文算法的有效性.
實驗中各個實驗組分別部署在總資源為4 核8 GB的Kubernetes集群節(jié)點上.
使用量子粒子群算法和改進(jìn)后的量子粒子群算法的迭代次數(shù)和適應(yīng)度值如圖3所示. 適應(yīng)度值越大結(jié)果越好,從圖中可以看出改進(jìn)后的量子粒子群算法具有更快的收斂速度,后文的實驗均基于改進(jìn)后的量子粒子群算法.
圖3 改進(jìn)量子粒子群算法QPSO 和原始量子粒子群算法oQPSO 收斂速度對比
等比例配額方案、VPA 配額方案、HPA 配額方案、最小配額數(shù)方案、最大配額數(shù)方案在不同負(fù)載下的CPU 資源配額如圖4 所示,內(nèi)存配額如圖5 所示,CPU資源利用率如圖6所示,內(nèi)存資源利用率如圖7所示.
圖4 5種配額方案在不同負(fù)載下CPU配額
圖5 5種配額方案在不同負(fù)載下內(nèi)存配額
圖6 5種配額方案在不同負(fù)載下CPU利用率
圖7 5種配額方案在不同負(fù)載下內(nèi)存利用率
實驗中不同配額實驗組應(yīng)用能處理的最大QPS并不相同,在10 000 QPS下五種實驗組方案的資源配額,實例數(shù)如表4所示,資源分配總量如表5所示,資源利用率如表6所示,HPA實例數(shù)變化趨勢如圖8所示. 實驗結(jié)果表明,等比例配額方案、最小配額數(shù)方案和最大配額數(shù)方案同負(fù)載下資源分配總量更少,資源利用率更高,且整體資源分配總量相差不大,其中最大配額數(shù)方案資源利用率更高,但大量實例數(shù)意味著更大的管理和性能開銷.
表4 同負(fù)載下資源配額
表5 同負(fù)載下資源分配總量
表6 同負(fù)載下資源利用率
圖8 HPA方案實例數(shù)隨負(fù)載變化
從5.5實驗結(jié)果可以看出,相比于原本的量子粒子群算法,本文改進(jìn)后的量子粒子群算法具有更快的收斂速度. 在應(yīng)用配額實驗中,隨著負(fù)載的增加,所有實驗組應(yīng)用的資源配額都在穩(wěn)步提高,而在不同的負(fù)載情況下,不同實驗組應(yīng)用的資源利用率存在一定的波動. 在所有負(fù)載情況下,本文提出的3 種配額方案在資源利用率上均高于VPA和HPA配額方案.
在處理相同負(fù)載的情況下,相比于本文提出的3種配額方案,使用VPA 配額方案和HPA 配額方案會占用更多的資源,同時資源的利用率也更低,使用LGN 生成的3 種配額方案占用資源更少,且資源利用率更高,所有應(yīng)用的服務(wù)質(zhì)量等級均滿足要求,這證明了本文提出的配額生成方案相比于VPA配額方案和HPA配額方案,在不影響應(yīng)用服務(wù)質(zhì)量的前提下,節(jié)約了更多資源,有更好的性能表現(xiàn).
本文提出了一種基于廣義回歸神經(jīng)網(wǎng)絡(luò)和長短期記憶神經(jīng)網(wǎng)絡(luò)的深度神經(jīng)網(wǎng)絡(luò)LGN,用改進(jìn)量子粒子群算法對網(wǎng)絡(luò)結(jié)構(gòu)超參數(shù)進(jìn)行優(yōu)選,使用LGN 計算資源容量模型,并設(shè)計了基于資源容量模型的容器配額計算方案. 通過基于開源應(yīng)用系統(tǒng)的實驗測試,證明本文提出的方案比Kubernetes自帶的VPA和HPA方案提升了超過6%的資源利用率,降低了至少10%的資源分配總量.
使用開源項目驗證了所提方法的有效性. 使用本文提出的算法配置容器配額可降低整體資源分配量和提升整體資源使用率. 未來可以使用時序預(yù)測算法獲得應(yīng)用的負(fù)載變化情況,通過獲得未來一段時間的負(fù)載情況進(jìn)行及時的擴縮容,從而實現(xiàn)應(yīng)用動態(tài)擴縮容自動化.