謝雍生,徐 準,黃保華,2,陳寧江,2,3
1(廣西大學 計算機與電子信息學院,南寧 530004) 2(廣西智能數(shù)字服務(wù)工程技術(shù)研究中心,南寧 530004) 3(廣西高校并行分布與智能計算重點實驗室,南寧 530004)
當前,主流云服務(wù)供應(yīng)商將容器即服務(wù)(Container as a Service,CaaS)作為云計算數(shù)據(jù)中心的主要軟件基礎(chǔ)設(shè)施技術(shù).CaaS架構(gòu)為軟件系統(tǒng)提供了更高的靈活性和控制權(quán).隨著業(yè)務(wù)需求的快速增長,容器規(guī)模在不斷擴大,需要處理容器集群管理的問題,將大規(guī)模的容器實例在集群節(jié)點中進行高效調(diào)度,持續(xù)關(guān)注降低成本、均衡資源利用率、提高服務(wù)可用性和能源效應(yīng)等問題[1].在中大型云應(yīng)用系統(tǒng)中,往往采用微服務(wù)架構(gòu)將應(yīng)用系統(tǒng)拆分為一組松耦合的模塊化服務(wù)并以容器進行部署,以解決大型應(yīng)用的復雜性,方便應(yīng)用服務(wù)部署,迭代更新和獨立擴展[2,3].現(xiàn)有的容器調(diào)度工作往往是以單個容器作為基本單位來進行優(yōu)化調(diào)度.這種調(diào)度策略在優(yōu)化過程中忽略服務(wù)之間的調(diào)用依賴關(guān)系產(chǎn)生的額外負載開銷,在高動態(tài)負載狀態(tài)的場景下難以表現(xiàn)出優(yōu)越的性能.基于容器間的依賴關(guān)系將容器分組,以容器組的方式進行調(diào)度會減少算法的求解難度和時間復雜度[4,5].
本文提出了一種面向微服務(wù)的容器組調(diào)度優(yōu)化策略Container Group Scheduling Optimization Based on DDPG(CGS-DDPG).首先,該策略考慮微服務(wù)應(yīng)用中容器服務(wù)間頻繁的跨節(jié)點調(diào)用會產(chǎn)生額外調(diào)用依賴負載的現(xiàn)象,通過分組算法將容器分組為包含一個或者多個具有強依賴關(guān)系的容器組,并將組中的容器作為一個整體調(diào)度到集群節(jié)點中,從而有效減少服務(wù)間的調(diào)用依賴負載.其次,構(gòu)建針對容器集群中多目標優(yōu)化容器組調(diào)度模型[6-8],設(shè)計模型的優(yōu)化目標和約束條件,然后提出基于DDPG(Deep Deterministic Policy Gradient)的容器組調(diào)度優(yōu)化算法.通過優(yōu)化后的容器組調(diào)度策略進行容器組調(diào)度,可以使集群在高動態(tài)負載的狀態(tài)下依然能夠高效的對容器進行調(diào)度并提供服務(wù),同時提高集群的資源利用率.
后文內(nèi)容組織如下:第2節(jié)簡述了微服務(wù)架構(gòu)中容器調(diào)度在資源利用和負載均衡方面所面臨的問題,并提出本文的工作思路;第3節(jié)提出容器組調(diào)度模型中的相關(guān)定義,并設(shè)計了一種容器分組算法;第4節(jié)設(shè)計了基于DDPG的容器組調(diào)度優(yōu)化算法;第5節(jié)通過設(shè)計對比實驗,對容器組調(diào)度優(yōu)化算法進行了實驗驗證;最后一節(jié)總結(jié)全文工作.
微服務(wù)架構(gòu)將應(yīng)用程序劃分為一組松耦合的模塊化服務(wù)并以容器的方式進行部署,每個服務(wù)可以設(shè)置多個容器副本.在微服務(wù)架構(gòu)下,微服務(wù)應(yīng)用程序被劃分成多個模塊化服務(wù),服務(wù)之間存在不同依賴強度的調(diào)用關(guān)系,服務(wù)以容器的形式進行調(diào)度部署,每個服務(wù)可以設(shè)置多個容器實例.
隨著集群中的節(jié)點及其上部署的容器數(shù)量不斷擴大,容器調(diào)度面臨的挑戰(zhàn)是多方面的.為了提高容器調(diào)度性能,保障集群負載均衡和應(yīng)用服務(wù)的QoS,研究者提出了不同優(yōu)化目標的容器調(diào)度方法.這些方法以單個或多個目標為重點進行優(yōu)化調(diào)度[9,10],主要包括通過優(yōu)化資源利用率來平衡集群工作負載[11];通過減少網(wǎng)絡(luò)消耗(如鏡像拉取成本,通信成本)來緩解網(wǎng)絡(luò)負載[12,13];減少能源消耗,提高服務(wù)可靠性,考慮容器間的依賴關(guān)系等[14].
上述方法以單個容器作為基本單位來進行單步優(yōu)化調(diào)度.在微服務(wù)場景下以單步優(yōu)化的方式調(diào)度容器還存在進一步優(yōu)化的空間,如在電子商務(wù)、票務(wù)系統(tǒng)和新聞資訊網(wǎng)站這類具有負載高動態(tài)性和不確定性的微服務(wù)應(yīng)用中,存在兩個降低調(diào)度算法性能的因素:1)現(xiàn)有工作以單步優(yōu)化的方式獨立的調(diào)度容器,使得調(diào)度性能在高動態(tài)負載變化場景下顯著降低,因為這種方式旨在根據(jù)特定時間的負載情況求解最優(yōu)解,難以對動態(tài)負載狀態(tài)進行充分感知;2)雖然有的研究工作考慮了微服務(wù)的依賴關(guān)系,但沒有考慮將容器根據(jù)依賴關(guān)系分組,而將容器以獨立的方式調(diào)度難免會加大算法的求解難度和時間復雜度.因此,如何解決單步優(yōu)化的容器調(diào)度方式存在的缺陷是優(yōu)化微服務(wù)調(diào)度的一個方向.
針對單步優(yōu)化的容器調(diào)度方式所存在的缺陷,將微服務(wù)間的依賴關(guān)系作為依據(jù),將容器分組實現(xiàn)調(diào)度方式的優(yōu)化,可以減少調(diào)度算法的求解難度和時間復雜度.本文針對容器化微服務(wù)應(yīng)用中的容器調(diào)度,提出一種基于DDPG的容器組調(diào)度策略(CGS-DDPG).在該策略中,首先,為了減少服務(wù)之間的調(diào)用依賴關(guān)系產(chǎn)生的額外負載開銷,依據(jù)服務(wù)之間的調(diào)用依賴關(guān)系,將服務(wù)按照組規(guī)模和依賴強度分組為具有一個或多個容器的容器組,并將組作為基本調(diào)度單位.其次,針對單步優(yōu)化的容器調(diào)度方式難以充分感知動態(tài)工作負載的問題,引入適合長期優(yōu)化決策控制問題的DRL(Deep Reinforcement Learning)方法,提出一種基于DDPG的無模型容器組調(diào)度算法,以整個調(diào)度回合為優(yōu)化目標來進行每步?jīng)Q策行動從而最大化累積獎勵[15-18].CGS-DDPG將微服務(wù)中的所有容器組作為一個整體調(diào)度回合進行全局優(yōu)化調(diào)度,通過設(shè)置目標優(yōu)化獎勵函數(shù),使得算法通過最大化累積獎勵來生成滿足優(yōu)化目標的自適應(yīng)調(diào)度策略.
本文將容器分組進行調(diào)度的優(yōu)化目標是平衡集群工作負載,且最大限度的減少容器服務(wù)之間的依賴負載開銷和減少節(jié)點內(nèi)部資源間利用的差異度,以保證集群性能和微服務(wù)應(yīng)用的QoS.下面給出模型相關(guān)定義和優(yōu)化目標.
定義1.容器服務(wù)集合MR.一個應(yīng)用系統(tǒng)按照業(yè)務(wù)功能拆分為一組模塊化容器服務(wù)的集合,表示為MR={s1,s2,…,sk},其中,k為應(yīng)用系統(tǒng)拆分后的容器服務(wù)數(shù)量.
定義3.容器服務(wù)依賴圖SGraph.SGraph=(MR,E),MR為系統(tǒng)中所包含的容器服務(wù)集合,E為服務(wù)之間的調(diào)用關(guān)系構(gòu)成的有向邊的集合.對于任意一條邊E(Si,Sj)表示為服務(wù)si依賴于服務(wù)sj,且其值代表服務(wù)之間的調(diào)用依賴強度,定義如公式(1)所示:
(1)
其中,Vi,j表示si對sj的調(diào)用依賴強度,若Vi,j為0,則表示這兩個容器服務(wù)之間沒有調(diào)用關(guān)系.
使用帶權(quán)鄰接矩陣SMat表示容器服務(wù)依賴圖,如公式(2)所示:
(2)
其中,當i=j時為服務(wù)本身的相關(guān)性,將其調(diào)用強度設(shè)置為∞.
容器服務(wù)之間存在不同強度的調(diào)用依賴關(guān)系,為了減少容器在不同節(jié)點之間調(diào)用產(chǎn)生的額外依賴負載和降低容器間調(diào)用產(chǎn)生的通信時間消耗,本文將容器服務(wù)集合MR={s1,s2,…,sk}基于組規(guī)模和調(diào)用依賴強度進行分組,以組為基本單位進行調(diào)度.
定義4.容器組.指將容器服務(wù)集合按照組規(guī)模和容器服務(wù)依賴強度分組為具有一定依賴關(guān)系的容器組,表示為:
gi={s1,s2,…,sk},1≤∑ksi≤ρ
(3)
其中,si={0,1}為組中包含的容器服務(wù)指示器,si=1表示容器服務(wù)i屬于組gj,si=0則表示該組中不包含容器服務(wù)i,ρ為組規(guī)模的大小,組中的容器數(shù)量不能超過ρ.
對于容器服務(wù)集合MR分組后的容器組集合可表示為:G={g1,g2,…,gq},q∈[1,k].
定義5.組調(diào)度策略.指將容器gj={s1,s2,…,sk}組作為一個基本調(diào)度單元調(diào)度到容器集群Cluster={N1,N2,…,Nm}中部署運行的策略,表示為CGSi,j={0,1},i∈(1,m),j∈(1,k),其中,若CGSi,j=1則表示將容器組gj調(diào)度到第i個工作節(jié)點上.
(4)
(5)
(6)
其中,(si,sj)?N表示兩個容器部署在不同節(jié)點中,服務(wù)依賴負載為兩個容器間的調(diào)用依賴強度,(si,sj)∈N表示兩個容器部署在同一節(jié)點中,服務(wù)依賴負載為0.
因此,容器服務(wù)si的總體依賴負載可表示為:
(7)
(8)
σcontainer(t)越小,則說明服務(wù)依賴負載開銷越低.結(jié)合定義7和定義8,為了權(quán)衡3個目標的重要性,使用參數(shù)α,β和γ對3個目標設(shè)置了基于權(quán)重的線性組合方法.由此,微服務(wù)容器調(diào)度優(yōu)化問題表示為:
(9)
第1個約束條件為容器組調(diào)度節(jié)點的唯一性約束,即每個容器組只能調(diào)度到集群中唯一的節(jié)點上;第2個約束條件是節(jié)點資源總量約束,即是集群中任一節(jié)點的任一資源的利用率都不超過100%;第3個約束條件是組規(guī)模大小約束,即組中的容器數(shù)量不超過ρ.
如定義1所述,由于微服務(wù)應(yīng)用中容器服務(wù)之間存在的不同強度的調(diào)用依賴關(guān)系,處于不同節(jié)點中的容器相互調(diào)用會帶來額外的負載開銷,如果服務(wù)之間頻繁的跨節(jié)點調(diào)用將會嚴重影響集群性能和用戶的正常體驗,造成應(yīng)用的QoS差和浪費資源等問題,因此,解決微服務(wù)容器調(diào)度優(yōu)化問題時有必要考慮依據(jù)容器服務(wù)間的依賴關(guān)系對容器進行分組.
在考慮容器服務(wù)間依賴關(guān)系的基礎(chǔ)上,本文設(shè)計了一種容器分組算法,該算法根據(jù)組規(guī)模ρ和容器間的依賴強度關(guān)系將容器服務(wù)集合MR={s1,s2,…,sk}劃分為多個具有強依賴關(guān)系的容器服務(wù)組集合G={g1,g2,…,gq},(k/ρ+1)≤q≤(k-ρ+1),通過將容器組gi={s1,s2,…,sk},1≤∑ksj≤ρ作為基本調(diào)度單位調(diào)度到節(jié)點中,以減少容器服務(wù)依賴負載.分組策略的基本思想是:首先,根據(jù)定義3將微服務(wù)應(yīng)用構(gòu)建成一個帶權(quán)有向服務(wù)依賴圖SGraph并存儲為矩陣EMat,有向邊的權(quán)值為服務(wù)間的調(diào)用依賴強度;其次,將服務(wù)依賴圖中的m個容器服務(wù)頂點作為m顆獨立的樹組成的森林,按權(quán)值從大到小選擇邊,所選擇的邊連接的兩個頂點應(yīng)屬于不同的樹,判斷由該邊連接的容器服務(wù)頂點是否添加到容器組gi={s1,s2,…,sk}中;最后,直到所有頂點都分配到各個組中形成組集合G={g1,g2,…,gk},其中,組集合的取值范圍為(k/ρ+1)≤q≤(k-ρ+1).
圖1給出容器服務(wù)分組過程示例.
圖1 容器服務(wù)分組過程示例圖Fig.1 Schematic diagram of container service grouping process
算法1描述了容器分組的過程,其核心步驟是:1)輸入服務(wù)依賴圖SGraph,根據(jù)微服務(wù)應(yīng)用服務(wù)集合S和服務(wù)依賴集合E構(gòu)建出帶權(quán)有向圖并存儲為矩陣EMat;2)選擇調(diào)用依賴強度最大的邊(si,sj),并保證si,sj不在同一顆樹上,判斷容器節(jié)點si,sj是否屬于組集合G={g1,g2,…,gq}中的gk組,若gk中已包含節(jié)點si或節(jié)點sj,則需判斷加入后組規(guī)模是否超過ρ,否則直接將節(jié)點加入到組gk中;3)重復步驟2)直至所有節(jié)點完成分組;4)返回組集合G={g1,g2,…,gq}.
算法1.Container grouping algorithm
1. Input:MR={s1,s2,…,sk}//輸入容器服務(wù)集合
2. InitializationG={?},Edges={?};// 初始化參數(shù)
3. fore(si,sj)∈SGraph.Edo
4.Edges←AddEdges(Edges,e(si,sj));//將容器之間依賴關(guān)系存儲到集合中
5. end for
6.SortByWeight(Edge);//將容器服務(wù)依賴度從大到小進行排列
7. fore(si,sj)∈Edgesdo
8. forgk∈Gdo
9.isExixtedi←Find(gk,si);//判斷選取的容器是否存在于已知分組中
10.isExixtedj←Find(gk,sj);
11. if(isExistedi=trueorisExistedj=true) and (size(gk)+1)≤ρthen
12.gk←AddContainer(gk,e(si,sj));//將容器添加到已有分組中
13. else
14.gk←InitGroup(gk,e(si,sj));//初始化容器新分組
15.G←AddGroup(G,gk);//將子分組添加到總分組集合
16. end for
17. end for
18. ReturnG={g1,g2,…,gq};
19. OutputG={g1,g2,…,gq};
對于具有k個容器服務(wù)集合的微服務(wù)應(yīng)用MR={s1,s2,…,sk},假設(shè)容器服務(wù)間的邊集合大小為e,分組的組規(guī)模大小為ρ,容器分組算法主要包括調(diào)用依賴權(quán)值邊集排序和容器分組兩個過程,依賴權(quán)值邊集排序過程即對邊權(quán)值使用快速排序算法按從大到小進行排序,因此時間復雜度為O(e×log(e)).在容器分組過程,對于每一條權(quán)值邊,需要遍歷所有組規(guī)模小于ρ的分組,判斷該邊所包含的頂點是否符合加入組gi.其中,遍歷的組集合的取值范圍為(k/ρ+1)≤q≤(k-ρ+1).因此分組過程最壞情況下的時間復雜度為O(e×(k-ρ+1)).其中,ρ為常數(shù),k≥e,那么容器分組算法最壞情況下的時間復雜度為O(e×k).
在一個基于微服務(wù)的應(yīng)用系統(tǒng)中,容器服務(wù)之間存在不同強度的調(diào)用依賴關(guān)系,利用調(diào)用依賴強度的分組規(guī)則將具有強依賴關(guān)系的容器劃分到同一組中進行調(diào)度,能夠有效地減少容器在不同節(jié)點之間調(diào)用產(chǎn)生的額外依賴負載.同時,通過合理的設(shè)置組規(guī)模大小來限制組中容器數(shù)量,可以實現(xiàn)更靈活的調(diào)度策略.
容器分組算法也會帶來的額外開銷問題.將微服務(wù)應(yīng)用中的容器服務(wù)進行分組調(diào)度雖然能減少容器之間的調(diào)用依賴產(chǎn)生的依賴負載開銷,但是當組中的容器屬于同一密集型時,將組中的容器調(diào)度到同一節(jié)點上會導致該節(jié)點中的資源間的負載不均衡現(xiàn)象.因此,本文除了將節(jié)點間的負載均衡性作為優(yōu)化目標外,同時還考慮了節(jié)點內(nèi)部資源的負載均衡性,下一節(jié)闡述容器組調(diào)度方案.
組調(diào)度模型的基本思想是:對請求調(diào)度部署的微服務(wù)應(yīng)用,首先,為了減少服務(wù)間的調(diào)用依賴產(chǎn)生的額外負載開銷,通過分組算法將容器服務(wù)分組為具有強依賴關(guān)系的容器組,將組作為基本調(diào)度單位;然后,將所有分組作為一個連續(xù)調(diào)度回合,通過讓DRL智能體與集群環(huán)境交互,根據(jù)動態(tài)環(huán)境調(diào)整調(diào)度策略以滿足優(yōu)化目標,回合中的每一個調(diào)度決策不僅考慮當前的最優(yōu)獎勵,還會考慮對下一次決策的影響,最終目標是使得整個回合的調(diào)度決策最優(yōu)化.
所設(shè)計的容器組調(diào)度架構(gòu)如圖2所示,它由分組器、監(jiān)控器和調(diào)度器3個關(guān)鍵組件組成.
圖2 容器組調(diào)度架構(gòu)Fig.2 Container group scheduling architecture
分組器將用戶請求部署的微服務(wù)應(yīng)用采用容器分組算法進行分組,且組中的容器在調(diào)度時將會作為一個整體調(diào)度到同一個節(jié)點中,最后將所有組作為一個微服務(wù)隊列放到一個隊列集合中等待調(diào)度.
監(jiān)控器用于獲取集群的狀態(tài)信息,包括節(jié)點狀態(tài)信息、節(jié)點配置信息、節(jié)點資源使用情況(如CPU利用率、內(nèi)存利用率等)和節(jié)點中運行的容器服務(wù)信息等.
調(diào)度器是核心組件,負責將隊列集合中的容器組調(diào)度到最優(yōu)節(jié)點中進行部署以提供服務(wù),保證集群負載均衡和應(yīng)用服務(wù)性能,具體來說,調(diào)度器把隊列集合中的每個微服務(wù)隊列作為一個連續(xù)調(diào)度回合,將集群狀態(tài)和容器組狀態(tài)作為基于DRL的調(diào)度器的輸入,輸出的則是調(diào)度決策方案.用戶可以提交具有多種負載類型(如內(nèi)存密集型、CPU密集型和磁盤讀寫密集型等)的容器化微服務(wù)調(diào)度請求,并且這些請求具有隨機性和多樣性.
通過分組算法將容器服務(wù)分組為具有強依賴關(guān)系的容器組,減少了服務(wù)間的調(diào)用依賴產(chǎn)生的額外負載開銷.而同時考慮到節(jié)點內(nèi)部資源的負載均衡性和集群整體的負載情況則需要根據(jù)動態(tài)環(huán)境調(diào)整調(diào)度策略,本文引入適合長期優(yōu)化的DDPG算法作為調(diào)度策略調(diào)整的解決方案.DDPG是一種結(jié)合了基于價值和基于策略的混合無模型DRL算法,優(yōu)勢是無需構(gòu)建精確的環(huán)境模型,能夠有效處理動態(tài)復雜集群環(huán)境下難以精確建模的問題;一方面,確定性行為策略方法相比于PG(Policy Gradient)方法,它能夠直接輸出決策動作,而無需對最優(yōu)策略的概率分布進行頻繁采樣計算.基于DDPG的容器組調(diào)度優(yōu)化算法目標是容器之間的調(diào)用依賴產(chǎn)生的依賴負載開銷,并考慮集群的動態(tài)負載狀態(tài).
由定義8可知,其最小的負載狀態(tài)可描述為:
minf(x)=min(ασcluster(t)+βσnode(t)+γσcontainer(t))
(10)
因此,將獎勵函數(shù)r(t)定義為:
r(t)=-(ασcluster(t)+βσnode(t)+γσcontainer(t))
(11)
本文使用基于FC結(jié)構(gòu)的策略網(wǎng)絡(luò)Actor和值函數(shù)網(wǎng)絡(luò)Critic來構(gòu)建容器組調(diào)度優(yōu)化模型.為了更好的收斂性和更快的求解速度,將Actor網(wǎng)絡(luò)分為Actor當前網(wǎng)絡(luò)和Actor目標網(wǎng)絡(luò),Critic網(wǎng)絡(luò)分為Critic當前網(wǎng)絡(luò)和Critic目標網(wǎng)絡(luò).Actor當前網(wǎng)絡(luò)用于輸出待調(diào)度容器組的實時調(diào)度決策動作,Actor目標網(wǎng)絡(luò)負責計算集群下一狀態(tài)的最優(yōu)動作用于更新價值網(wǎng)絡(luò),Critic當前網(wǎng)絡(luò)計算集群節(jié)點的當前Q值,并進行網(wǎng)絡(luò)參數(shù)的更新,Critic目標網(wǎng)絡(luò)計算集群節(jié)點目標Q值.為了減少連續(xù)序列數(shù)據(jù)對Actor網(wǎng)絡(luò)和Critic網(wǎng)絡(luò)訓練的影響,采用了經(jīng)驗回放池機制來減少樣本序列的相關(guān)性.基于DDPG的容器組調(diào)度優(yōu)化算法原理架構(gòu)如圖3所示,它將回合中每一決策步產(chǎn)生的五元組(Φ(S),A,R,Φ(S′),is_end)存儲到經(jīng)驗回放集合RBuff中.
圖3 容器組調(diào)度優(yōu)化算法原理Fig.3 Schematic diagram of container group scheduling algorithm
(12)
然后通過神經(jīng)網(wǎng)絡(luò)的梯度反向傳播來更新Critic當前網(wǎng)絡(luò)的所有參數(shù)ω,其損失函數(shù)為:
(13)
Actor當前網(wǎng)絡(luò)的所有參數(shù)θ更新公式為:
(14)
設(shè)置軟更新系數(shù)為τ,每隔一段時間對Critic目標網(wǎng)絡(luò)和Actor目標網(wǎng)絡(luò)參數(shù)進行軟更新:
ω′←τω+(1-τ)ω′
(15)
θ′←τθ+(1-τ)θ′
(16)
算法以公式(12)確定的獎勵函數(shù)與公式(13)確定的損失函數(shù)作為優(yōu)化目標.通過Critic當前網(wǎng)絡(luò)與Critic目標網(wǎng)絡(luò)的參數(shù)更新表示基于損失函數(shù)的策略調(diào)整情況.通過Actor當前網(wǎng)絡(luò)與Actor目標網(wǎng)絡(luò)的參數(shù)更新表示基于獎勵函數(shù)的策略調(diào)整情況.
算法2描述了基于DDPG的容器組調(diào)度優(yōu)化算法的過程,通過輸入Critic目標網(wǎng)絡(luò)和Actor目標網(wǎng)絡(luò)參數(shù)進行梯度調(diào)整后得到優(yōu)化的調(diào)度策略模型{θ,θ′,ω,ω′}.
算法2.Container group scheduling optimization algorithm based on DDPG
1. InputT,θ,ω;//輸入集群初始狀態(tài)
2. Initialization:θ,θ′,ω,ω′,θ′=θω′=ω,RBuff={?};//初始化參數(shù)
3. fori←1,Tdo
4. Φ(S)←getState(t);//獲取集群狀態(tài)特征
5.A←πθ(Φ(S));//生成容器組調(diào)度決策
6.R,Φ(S′),is_end←exeAction(A);//調(diào)度到節(jié)點中部署并返回反饋信息
7.RBuff←{Φ(S),A,R,Φ(S′),is_end};//存入經(jīng)驗回放池
8. Φ(S)←Φ(S′);
9. forj←1,mdo //從RBuff中采樣m個樣本
10. {Φ(S),A,R,Φ(S′),is_end←RBuff};
11. ifis_endj=turethen
12.yj←Rj;
13. else
17. ifT%C=1 then
18. updateω′←τω+(1-τ)ω′;
19. updateθ′←τ+(1-τ)θ′;
20. end for
21. end for
22. Return {θ,θ′,ω,ω′}
23. Output {θ,θ′,ω,ω′};//輸出優(yōu)化后的策略參數(shù)
綜上所述,CGS-DDPG將微服務(wù)中的所有容器組作為一個整體調(diào)度回合進行全局優(yōu)化調(diào)度,通過設(shè)置優(yōu)化目標的獎勵函數(shù),使得算法通過最大化累積獎勵的自學習方法來生成滿足優(yōu)化目標的調(diào)度策略,從而使得算法能夠根據(jù)集群的動態(tài)負載狀態(tài)來自適應(yīng)的調(diào)整調(diào)度策略.
本文設(shè)計實驗原型用于驗證所提出的CGS-DDPG策略的效果.首先,在基于Swarm的原型框架RL-Swarm上擴展實現(xiàn)了面向微服務(wù)的容器組調(diào)度優(yōu)化策略;然后將CGS-DDPG與經(jīng)典的微服務(wù)調(diào)度策略Spread和Binpack,以及Kaewkasi等人提出的基于蟻群優(yōu)化算法的調(diào)度策略(ACO)進行對比分析.
在原型驗證與對比分析實驗中,在框架RL-Swarm的基礎(chǔ)上進行拓展實現(xiàn)了面向微服務(wù)的容器組調(diào)度優(yōu)化策略.使用3個開源微服務(wù)應(yīng)用作為實驗對象:Socks Shop Application、Bookinfo Application、Hipster Shop application,其中Bookinfo和Hipster Shop用于算法的離線訓練,Socks Shop用于在線調(diào)度性能評估.表1描述了3個開源微服務(wù)應(yīng)用的詳細信息.
表1 3個微服務(wù)應(yīng)用的詳細信息Table 1 Details of the three microservice applications
表2 Sock Shop的容器規(guī)模配置表Table 2 Sock Shop configuration table of container size
為了驗證算法在不同規(guī)模下的調(diào)度性能,在在線調(diào)度性能評估實驗中,將Sock Shop設(shè)置了小型、中型和大型3種不同規(guī)模的副本數(shù)量,如表2所示.
采用全連接層的網(wǎng)絡(luò)結(jié)構(gòu),參數(shù)優(yōu)化器使用Adam,經(jīng)驗回放池大小RBuff=1000,當前Actor網(wǎng)絡(luò)學習率為0.0005,當前Critic網(wǎng)絡(luò)學習率為0.001,目標網(wǎng)絡(luò)的軟更新系數(shù)為0.01,未來獎勵折扣為0.9,batch_size=64.
首先分析容器分組算法的分組規(guī)模ρ對CGS-DDPG策略調(diào)度性能的影響,分別使用ρ0,ρ1,ρ2,ρ3表示組中容器數(shù)量為{0,3,4,5}的分組規(guī)模,其中ρ0表示不進行分組,將容器以獨立的方式進行調(diào)度.通過不同分組規(guī)模對算法獎勵值相對變化的影響對比可以發(fā)現(xiàn)使用分組策略的ρ1,ρ2,ρ3所獲得的獎勵值明顯比不進行分組的ρ0高,這是由于ρ0缺少對服務(wù)間依賴關(guān)系的考慮,因此使得服務(wù)間的調(diào)用依賴負載顯著增加,降低了算法所能獲得的最大累積獎勵值.而在不同的分組規(guī)模中ρ2的所獲得的獎勵值最高,約在4200個訓練批次后,算法獲得了穩(wěn)定的獎勵值.因此,為了保證算法的性能,后面的實驗所使用的分組規(guī)模設(shè)置為ρ=4.
本文提出的面向微服務(wù)的CGS-DDPG策略優(yōu)化目標是平衡集群工作負載,且最大限度的降低服務(wù)之間的調(diào)用依賴產(chǎn)生的額外負載開銷和減少節(jié)點內(nèi)部各個資源的利用差異度,以保證集群性能和微服務(wù)應(yīng)用的QoS,因此從以下幾個指標進行實驗評估對比.
5.3.1 集群負載均衡性評估
圖4對比了應(yīng)用規(guī)模在Lager Scala場景下Spread策略和本文策略的容器調(diào)度節(jié)點概率分布情況,可以看到,Spread策略在小型資源節(jié)點1~5中部署容器概率為3.33%~4.17%,在中型和大型節(jié)點6~15中的部署容器概率為7.08%~9.58%,這是由于Spread的貪婪性策略并沒有考慮集群節(jié)點資源的異構(gòu)性,而是試圖選擇將容器分配給運行容器數(shù)量最少的worker,直至worker中沒有足夠資源啟動新容器,這使得集群中小型節(jié)點的負載壓力過大,反觀資源較多的大型節(jié)點承擔著很小的工作負載.而本文提出的策略通過主動與集群交互來感知集群環(huán)境的實際負載情況,能夠根據(jù)集群負載和節(jié)點負載情況來動態(tài)的自適應(yīng)調(diào)整調(diào)度策略,在小型、中型和大型資源節(jié)點上的最大容器部署概率分別為3.33%,7.08%和11.25%,這充分發(fā)揮了節(jié)點的性能,有效的提高了資源利用率.
圖4 容器在節(jié)點中的概率分布對比Fig.4 Comparison of the probability distributions of containers in nodes
圖5(a)對比了4種算法在不同容器規(guī)模下的集群負載均衡度σcluster(t)(定義6)的比較,可以明顯看到Binpack策略的σcluster(t)值最大,這說明集群的負載均衡性最差,這是由于Binpack策略為了提升節(jié)點的資源利用率優(yōu)先把節(jié)點調(diào)度到負載最高的節(jié)點中,從而導致了部分節(jié)點負載過高且其它節(jié)點閑置的集群負載不均衡狀況.在其它3種算法中,結(jié)合容器在節(jié)點中的調(diào)度分布概況可知,Spread的貪婪性策略試圖將容器平均分配給每個work,導致了小型、中型和大型資源節(jié)點間的負載不均衡.本文策略除了將節(jié)點間的負載均衡性和節(jié)點內(nèi)部資源的負載均衡性作為優(yōu)化目標外,同時還通過將具有強調(diào)用依賴關(guān)系的容器劃分到同一組中進行調(diào)度,以減少了容器之間的調(diào)用依賴產(chǎn)生的依賴負載開銷,降低集群的負載開銷.結(jié)果表明,所提出的策略可以滿足在不同容器規(guī)模下保持較低集群負載均衡度σcluster(t)的要求,因此集群負載均衡性優(yōu)于其它策略,而Spread和ACO策略則會隨著容器規(guī)模的增加而出現(xiàn)較高的負載均衡度σcluster(t).
圖5 不同調(diào)度策略下集群負載均衡與節(jié)點內(nèi)部負載均衡Std比較Fig.5 Std comparison of cluster load balancing and load balancing within nodes under different scheduling strategies
圖5(b)描述了4種調(diào)度策略在small scale、medium scale和large scale 這3種容器規(guī)模下節(jié)點負載均衡度σnode(t)(定義7)的對比,從圖中可以觀察到Binpack、Spread和ACO策略下的節(jié)點都存在較大的資源差異度情況,最高可達24%,這是由于以上3種調(diào)度策略沒有考慮容器本身的負載需求,無法根據(jù)容器負載和節(jié)點可用資源特征進行調(diào)度優(yōu)化.而本文策略在各個規(guī)模下都能保持在15%的差異度范圍內(nèi),這是由于只有本文策略將節(jié)點內(nèi)部資源間的利用率差異度作為調(diào)度優(yōu)化策略的考慮因素.
5.3.2 服務(wù)依賴負載與服務(wù)響應(yīng)時間評估
圖6展示了不同調(diào)度策略下的容器服務(wù)依賴負載σcontainer(t)(定義8)和服務(wù)平均響應(yīng)時間對比,從圖中可以觀察到,服務(wù)依賴負載和服務(wù)平均響應(yīng)時間隨著部署容器規(guī)模增加而呈亞線性增長.結(jié)果表明,Binpack策略的σcontainer(t)比Spread和ACO策略低,然而其服務(wù)平均響應(yīng)時間最長,這是由于Binpack策略總是將容器盡可能的調(diào)度同一節(jié)點中,從而能夠減少σcontainer(t),但這會使得節(jié)點的負載過高,導致節(jié)點上的容器無法及時處理請求,使得服務(wù)響應(yīng)時間過長.在其它3種策略中,本文策略的σcontainer(t)在不同容器規(guī)模中小于Spread和ACO,這是因為本文策略充分考慮了服務(wù)間的依賴關(guān)系,通過分組算法來減少同一微服務(wù)應(yīng)用中具有強調(diào)用依賴關(guān)系的容器調(diào)到不同節(jié)點上,從而避免了跨節(jié)點調(diào)度帶來的額外負載.當容器規(guī)模較小時,Spread、ACO和本文策略的平均響應(yīng)時間大致相同,而隨著容器規(guī)模的增加,本文策略表現(xiàn)得更好,相比于Spread和ACO,平均響應(yīng)時間分別降低了21.72%和10.51%.
圖6 不同調(diào)度策略下的服務(wù)依賴負載開銷和服務(wù)平均響應(yīng)時間對比Fig.6 Comparison of service dependent load overhead and average service time under different scheduling strategies
本文提出了一種面向微服務(wù)的容器組調(diào)度優(yōu)化策略(CGS-DDPG).首先,該策略考慮了微服務(wù)應(yīng)用中容器服務(wù)間頻繁的跨節(jié)點調(diào)用會產(chǎn)生額外調(diào)用依賴負載的現(xiàn)象,通過分組算法將容器分組為包含一個或者多個具有強依賴關(guān)系的容器組,并將組中的容器作為一個整體調(diào)度到集群節(jié)點中,從而有效的減少了服務(wù)間的調(diào)用依賴負載.其次,構(gòu)建了針對容器集群中多目標優(yōu)化容器組調(diào)度模型,并設(shè)計模型的優(yōu)化目標和約束條件,然后提出了基于DDPG的容器組調(diào)度優(yōu)化算法.最后,通過實驗對比表明,結(jié)合了容器分組算法設(shè)計的CGS-DDPG策略能夠有效的減少服務(wù)調(diào)用依賴負載,平衡集群工作負載.表3給出了本文工作和相關(guān)工作的對比分析.
本文提出了基于DDPG的容器組調(diào)度優(yōu)化策略.該策略通過設(shè)計一種容器分組算法,將微服務(wù)應(yīng)用按照組規(guī)模和調(diào)用依賴強度分組為包含一個或者多個強依賴關(guān)系的容器組,從而有效的降低了服務(wù)之間調(diào)用產(chǎn)生的額外負載開銷.然后將分組后的容器組作為一個整體調(diào)度回合進行全局優(yōu)化調(diào)度,引入擅長長期優(yōu)化決策的強化學習方法,提出一種基于DDPG的容器組調(diào)度優(yōu)化算法,通過最大化累積獎勵來生成滿足優(yōu)化目標的自適應(yīng)調(diào)度策略.最后通過實驗對比來驗證策略的有效性和調(diào)度性能.考慮到集群工作狀態(tài)下的容錯性,當節(jié)點出現(xiàn)故障時,將該節(jié)點中的容器重調(diào)度到其它健康節(jié)點中的調(diào)度機制,以及非正常工作狀態(tài)下的集群負載情況也應(yīng)當作為集群負載狀況的考慮范圍之內(nèi).因此,本文的后續(xù)工作將圍繞考慮容錯機制的調(diào)度策略及非正常工作狀態(tài)下的集群負載優(yōu)化進行展開.