苗立堯 陳莉君
(西安郵電大學計算機學院 陜西 西安 710061)
一種基于Docker容器的集群分段伸縮方法
苗立堯 陳莉君
(西安郵電大學計算機學院 陜西 西安 710061)
針對現(xiàn)有的虛擬機集群伸縮方法響應慢、開銷大的問題,提出一種基于Docker容器技術的虛擬機集群伸縮方法。在檢測實時工作負載同時通過自回歸模型對未來工作負載進行預測,最后使用排隊論模型計算所需伸縮量。首先從虛擬機自身進行資源重分配,然后依據(jù)工作負載變化率選擇Docker容器級別的伸縮或虛擬機級別的伸縮,直到請求響應時間在用戶可接受范圍之內為止。實驗結果證明,在面對不同的工作負載變化情況時,該方法可以提供更快的響應速度和更低的開銷。
伸縮 虛擬機 Docker容器
隨著網(wǎng)絡的飛速發(fā)展,基于Web的應用在受到廣泛關注的同時,其性能也面對著前所未有的挑戰(zhàn)。Web應用的性能經(jīng)常受制于動態(tài)的工作負載[1-2],而具有伸縮性的云計算環(huán)境為Web應用動態(tài)負載問題提供了解決方案。
目前,已有很多基于云計算環(huán)境下的集群伸縮性研究。這些集群的底層是由虛擬機搭建的,例如VMware、XEN等。文獻[3]將云計算環(huán)境中現(xiàn)有的彈性應用自動伸縮技術這些技術分為兩類:反應式伸縮和預測式伸縮。另外對于突發(fā)式的工作負載變化,由于虛擬機部署、啟動時間比較長,一定程度上延長了伸縮調整時間。文獻[4]介紹了對Web應用進行分層伸縮的原理。文獻[5]指出蟻群算法、蜂群算法在負載均衡和伸縮算法里的應用。文獻[6]提出了一種基于工作流模型的虛擬機動態(tài)分配、回收方法。但該方法并不能對未來的工作負載情況進行預測。文獻[7]介紹了伸縮工具RightScale的伸縮算法原理。它是響應式伸縮,總是處于被動。
Docker是一個開源的引擎,可以輕松地為任何應用創(chuàng)建一個輕量級的、可移植的、自給自足的容器[8]。它并不是虛擬機,但它可在提供堪比虛擬機性能的同時,更快地部署。但因Docker容器的穩(wěn)定性以及安全性還有待研究,目前很多企業(yè)并未將Docker容器大規(guī)模投入生產(chǎn)實踐,它們的云環(huán)境仍建立在虛擬機構成的集群之上。基于此,本文提出了利用Docker容器來完成集群的快速伸縮。
針對文獻[6-7]中僅依靠虛擬機伸縮響應慢、開銷大,且不能進行預測的問題,故本文采用Docker容器技術來代替只使用虛擬機的伸縮方法。首先對多層Web應用進行數(shù)學建模以得到工作負載與資源數(shù)量間的關系,并綜合利用預測式伸縮和響應式伸縮實現(xiàn)在Web應用面臨變化的工作負載時,從三種粒度進行集群伸縮,以提高伸縮的響應速度并減少額外的開銷。
1.1 Web應用的分層結構
現(xiàn)代的Web應用大多采用多層結構設計[9],應用主要分為表現(xiàn)層、業(yè)務層、數(shù)據(jù)層。每個應用都擁有一組特定的需求和限制,這是應用所有者制定的服務等級協(xié)議SLA(Service-Level Agreement)標準。
1.2 排隊論建模
排隊論是關于等待隊列的一種數(shù)學研究方法。通過如圖1所示的排隊論模型,可以計算得到等待時間和隊列長度,甚至所需的資源數(shù)量[10]。為了精確計算在負載變化時,每層應該伸縮多少資源,本文基于排隊論模型里的G/G/1模型建立了多層應用的分析模型。本文提出的模型基于會話,每個會話包含多種交互操作。

圖1 排隊論示例
在G/G/1模型中,G/G/1分別表示請求到達間隔服從一般分布、服務時間服從一般分布、服務數(shù)量為1個,到達的服務請求按照先來先服務(FCFS)順序處理。令
λ
i
表示到第
i
層的請求到達率,
R
i
表示第
i
層的平均響應時間,
S
i
表示該層的平均服務時間。由系統(tǒng)的監(jiān)測數(shù)據(jù)計算可以得到到達間隔時間和服務時間的方差,分別使用
和
來表示,那么該模型可通過下式表示:
(1)

(2)
這里的βi為與該層有關的常量系數(shù),T和τ由經(jīng)驗得出。
1.3Web應用開銷分析
云服務提供商采用的收費策略是“pay-per-use”模型,即Web應用所有者只需按照他們使用的資源總額進行結算[12]。目前常見的一種云平臺收費規(guī)則是計時收費:對于性能完全一樣的一組服務器,按單位時間計費,不足一個單位時間的也取整數(shù)個。
本文提出的算法共采用了兩種云基礎設施作為底層,分別是虛擬機VMs和Docker容器?;谏衔乃鲈破脚_收費規(guī)則由此本文提出如下計費公式:
(3)
其中,CTotal表示開銷總額,CD表示Docker容器的使用單價,Dti表示第i個容器的使用時長。同樣,CV表示虛擬機的使用單價,Vtj表示第j個虛擬機的使用時間,CExtra表示額外的開銷。
云計算的伸縮性指的是系統(tǒng)適應負載變化對資源進行調整的能力。從伸縮的方式看,伸縮有縱橫之分[13],如圖2所示。從伸縮的時機看,伸縮有預測式伸縮和響應式伸縮。

圖2 縱向伸縮和橫向伸縮
2.1 預測式伸縮
預測式伸縮的目的是通過對過去的歷史數(shù)據(jù)的計算和分析,來完成對將來的預測。鑒于Web應用的工作負載情況可能隨時間呈現(xiàn)一定的規(guī)律,故本文采用自回歸模型AR(Auto-Regression)[14]來進行預測。模型函數(shù)用下式表示:x(n)+a1x(n-1)+a2x(n-2)+…+apx(n-p)=w(n)
(4)

(5)
再根據(jù)Yule-Walker方程組可以解得系數(shù):a1,a2,…,ap
(6)
代入式(1)即可得到一個用過去時刻數(shù)據(jù)預測將來時刻值的計算式[15]。
基于上述數(shù)學分析,本文首先假設一個固定的時間間隔v,記錄時刻同時監(jiān)控當時的工作負載值,并維持一個長度為T的歷史數(shù)據(jù)表。將表內離當前時刻最近的p個數(shù)據(jù)代入上文所述的自回歸模型,計算得到p個自相關系數(shù)r1,r2,…,rp,接著求解Yule-Walker方程組,解得系數(shù)a1,a2,…,ap,最終得到AR模型的方程,由此可以繼續(xù)計算出下一時刻工作負載的預測值。
2.2 響應式伸縮
由于預測式伸縮不適用于突發(fā)式的工作負載。本文將采用響應式伸縮來彌補預測式伸縮的不足。
本文提出的方法首先要維持一張長度為L的近期負載表,表里記錄了當前時間往前P時間內的負載變化情況。假定此刻監(jiān)控得到的工作負載值為γo,將其與近期負載表里的工作負載值計算平均斜率得到此刻的負載變化率λ。如果λ大于上限λtu,說明此刻迎來突發(fā)的工作負載驟增,需要進行擴展。同理,當λ小于下限λtl,說明此刻迎來突發(fā)工作負載驟降,則需要進行收縮。
綜上,預測式伸縮和響應式伸縮結合使用可以應對周期性工作負載變化和突發(fā)式的工作負載變化。
2.3 算法概述
本文通過t時刻的請求率γo(t)來反映當時的工作負載情況(后面用工作負載代替請求率),同時監(jiān)控請求響應時間to。維持兩張表:長度為T的歷史負載表H和長度為L的近期負載表P。通過對H的數(shù)據(jù)代入AR模型可以對下個時刻的工作負載進行預測γp(t),同時對P的數(shù)據(jù)進行計算可得到工作負載的變化率λ。
本文提出的伸縮算法包括兩部分:擴展算法和收縮算法。在擴展算法里,當監(jiān)測到的γo(t)大于上限γtu時,如果此時工作負載變化率λ也大于上限λtu,此時部署Docker容器來完成擴展。如果此時λ介于上限λtu和下限λtl之間,部署虛擬機來擴展,或者預測的工作負載γp(t)大于請求率上限γtu時,直接部署虛擬機來擴展,收縮算法與擴展算法類似。
在伸縮調整時,先在虛擬機自身進行資源重新分配。如果調整后響應時間不能滿足SLA要求,再判斷部署虛擬機還是部署Docker容器。調整操作直到請求響應時間重新滿足SLA為止。
在每次伸縮調整操作之后,會有一個短暫的冷卻時間以防止頻繁伸縮對系統(tǒng)性能帶來的消耗。
表1列出本文提出的算法將會用到的各個變量及其含義。

表1 各個變量及其含義
算法的偽代碼如下:
算法1 服務器調度算法
Input:s,γtu,γtl,λt
Output: Scaling Plan1. Begin
2. While(App is running)
3. Monitortoat a fixed interval
4. Maintain 2 tables: History TableH(LengthT) & Present TableP(Length L).
5. Calculateλ,γp(t)
6. Ifγo(t)>γtu||γp(t)>γtu,Then
7. Scaling-Up(S)
8. Else ifγo(t)<γtu,Then
9. Scaling-Down(S)
10. ColdDown(period)
11. End
2.3.1 擴展算法
擴展算法的目標是提高服務器的性能或增加服務器的數(shù)量以在面臨高工作負載時仍能提供滿足SLA的服務。算法偽代碼如下:
算法2 擴展算法
Input:S
Output: updatedS
1. Begin
2. Ifγp(t) >γtu,then
3. Invoke VM Scaling Up
4. Monitorto
5. Whileto>ttu
6. Invoke Self Scaling Up
7. Calculateλ
8. Ifλ>λtu,then
9. Invoke Docker Scaling Up
10. Else ifλ<λtu,then
11. Invoke VM Scaling Up
12. Invoke Self Scaling Up
13. End
Self-Scaling屬于縱向伸縮,算法通過對部署在同一臺物理機h上的多臺服務器之間進行資源重分配來提高服務器的性能。算法偽代碼如下:
算法3 自調整算法
Input: pair(Sa,Sb)
Output: updated pair(Sa,Sb)1. Begin
2. Monitorto
3. Ifto>ttu,then
4. Whiles≠updated(s)
5. IfSa?updated(s)&&sb?updated(s)&&u(sa,ri)>utu(ri) &&u(sb,ri) 6. Remove one unit of resourcerifromsb, 7. Add one unit of resourceritosa 8. IncludeSaandSbtoupdated(s) 9. End Docker-Scaling和VM-Scaling算法屬于橫向伸縮。通過比較λ與上限λtu來確定是否屬于突發(fā)式的工作負載,從而確定是增加Docker容器還是虛擬機。算法偽代碼實現(xiàn)如下: 算法4 Docker容器擴展 Input:S Output: newS1. Begin 2. Monitorto 3. Calculateλ 3. Whileto>ttu&&λ>λtu 4. for each tier of m-tiers : 5. Using QueueTheoryModel to calculate the desirednServers at tieribased on the observed request rateγo(t) 6. DeploynDocker Containers as Servers to tieri 7. Include the new Servers to the list ofS 8. End 算法5 虛擬機擴展 Input:S Output: newS1. Begin 2. Monitorto 3. Whileto>ttu 4. for each tier of m-tiers : 5. Using QueueTheoryModel to calculate the desirednServers at tieribased on the observed request rateγo(t) 6. AddnVMs as Servers to tieri 7. Include the new Servers to the list ofS 8. End 2.3.2 收縮算法 收縮算法通過對請求率γ°(t)和響應時間t° 的監(jiān)測,當γ°(t)低于上限γtu,若γ°(t)還低于下限γtl,則關閉虛擬機。否則關閉Docker容器。關閉的時候需要保持t°滿足SLA。算法偽代碼如下: 算法6 收縮算法 Input:S Output: newS1. Begin 2. Monitorto<γo(t)&&γo(t)<γtu 3. Whileto 4. Ifγo(t)<γtl,then 5. Exclude one VM fromS& Shut it down 6. Else 7. Exclude one Docker fromS& Shut it down 8. End 3.1 實驗環(huán)境 本文的實驗環(huán)境基于TPC Benchmark W(TPC-W)[16]。TPC-W是一款交互式的網(wǎng)絡性能測試工具,它提供的工作負載模擬了常見電子商務的業(yè)務活動。本文基于此構建一個由4臺虛擬機組成的云計算環(huán)境,并在之上搭建一個三層的電子商務平臺,一臺作為HTTP服務器,一臺作為數(shù)據(jù)庫服務器,剩余兩臺作為Web應用服務器。 3.2 實驗設計及結果 在TPC-W的基礎上,本文從負載變化維度列出了兩種典型的工作負載變化情況:突發(fā)負載、周期負載。如圖3所示。 (a) 突發(fā)負載 (b) 周期負載 本文在上述兩種工作負載變化情況下,選取了3個實驗對象見表2所示。 表2 實驗對照 其中A和B、A和C分別構成對照組。它們分別運行各種工作負載變化,每種負載運行3次,每次運行2小時,計算它們的平均響應時間、平均開銷,并加以比較。實驗結果如圖4、圖5所示。 圖4 突發(fā)負載下的比較 圖5 周期負載下的比較 分析實驗結果可知,在突發(fā)負載情況下,A、B、C的請求響應時間會隨著負載變化產(chǎn)生波動,其中A的請求響應時間明顯小于B、C是由于A在伸縮時的部署,啟動時間小于B、C。在周期負載情況下,A、B、C的請求響應時間隨著負載變化而波動,B和C在每個負載周期時的表現(xiàn)都幾乎不變。A隨著周期到來請求響應時間明顯降低,是由于A的預測算法可以提前為周期負載做好準備。3個實驗對象的平均開銷如圖6所示。 圖6 平均開銷的比較 圖6中1、2分別表示2種工作負載變化情況。從圖可以看出,本文提出的方法可以減少突發(fā)性工作負載和周期性工作負載下的伸縮開銷。 實驗結果表明,本文提出的算法可以使Web應用在面臨不同工作負載的情況下滿足SLA標準,在降低開銷的同時加快伸縮響應速度。 本文通過建立自回歸模型預測未來工作負載變化情況,并結合響應式伸縮協(xié)同做出伸縮調整決定。伸縮的資源數(shù)量由工作負載量在排隊論模型里計算得到。該伸縮方法在自身、Docker容器、虛擬機三種粒度上對面臨工作負載變化的虛擬機集群進行了調整。 通過實驗可知,本文提出的方法可以有效完成在兩種典型工作負載變化下對虛擬機集群的伸縮調整。在保證了Web應用的SLA標準的同時,相比只有虛擬機來完成伸縮的集群,伸縮調整速度得到了提升,在一定程度上節(jié)省了Web應用所有者的開銷。 [1] Farokhi S,Jamshidi P,Brandic I,et al.Self-adaptation Challenges for Cloud-based Application s:A Control Theoretic Perspective[C/OL].(2015-02-18) [2015-06-29].http://www.infosys.tuwien.ac.at/staff/sfarokhi/soodeh/papers/Soodeh-Farokhi_CameraReady_FeedbackComp-2015.pdf. [2] 朱志祥,許輝輝,王雄.基于云計算的彈性負載均衡方案[J].西安郵電大學學報,2013,18(6):43-47. [3] Lorido-Botran T,Miguel-Alonso J,Lozano J A.A Review of Auto-scaling Techniques for Elastic Applications in Cloud Environments[J].Journal of Grid Computing,2014,12(4):559-592. [4]VaqueroLM,Rodero-MerinoL,BuyyaR.DynamicallyScalingApplicationsintheCloud[J].ACMSIGCOMMComputerCommunicationReview,2011,41(1):45-52. [5]KukadePP,KaleG.SurveyofLoadBalancingandScalingapproachesincloud[J].InternationalJournalofEmergingTrendsandTechnologyinComputerScience,2015,4(1):189-192. [6]MaoM,HumphreyM.Auto-ScalingtoMinimizeCostandMeetApplicationDeadlinesinCloudWorkflows[C]//2011InternationalConferenceforHighPerformanceComputing,Networking,StorageandAnalysis,2011:1-12. [7]RightScale.SetupAutoscalingusingVotingTags[EB/OL].(2012-12-14) [2015-06-29].http://support.rightscale.com/12-Guides/Dashboard_Users_Guide/Manage/Arrays/Actions/Set_up_Autoscaling_using_Voting_Tags/index.html. [8]Docker.WhatisDocker?[EB/OL].(2014-02-15) [2015-06-29].http://www.docker.org.cn/book/docker/16_what-is-docker.html. [9]UrgaonkarB,ShenoyP,ChandraA,elal.AgileDynamicProvisioningofMulti-TierInternetApplications[J].ACMTransactionsonAutonomousandAdaptiveSystems,2008,3(1):217-228. [10]Wikipedia.QueueingTheory[EB/OL].(2015-06-19) [2015-06-29].https://en.wikipedia.org/wiki/Queueing_theory. [11]Wikipedia.Little’slaw[EB/OL].(2015-06-24) [2015-06-29].https://en.wikipedia.org/wiki/Little%27s_law. [12]HanR,GhanemMM,GuoL,elal.Enablingcost-awareandadaptiveelasticityofmulti-tiercloudapplications[J].FutureGenerationComputerSystems,2014,32:82-98. [13] 龔強.云計算關鍵技術之彈性伸縮控制技術認知研究[J].信息技術,2014(1):1-2,6. [14]Wikipedia.Autoregressivemodel[EB/OL].(2015-06-24) [2015-06-29].https://en.wikipedia.org/wiki/Autoregressive_model. [15] 丁玉美,闊永紅,高新波.數(shù)字信號處理-時域離散隨機信號處理[M].西安:西安電子科技大學出版社,2002:152-153. [16]TPC-W.TPC-WSummary[EB/OL].(2005-04-28) [2015-06-29].http://www.tpc.org/tpcw/. A CLUSTER SCALING METHOD BASED ON DOCKER CONTAINER Miao Liyao Chen Lijun (SchoolofComputerScienceandTechnology,UniversityofPostsandTelecommunications,Xi’an710061,Shaanxi,China) A scaling method of cluster is proposed based on Docker container technology to solve the problems of present scaling method,such as slow response and heavy cost.It uses auto-regressive model to predict future workload while monitoring the real-time workload,and calculates the need of resource with one queue theory model.This method first relocates resources by itself,then it chooses the Docker scaling or VM scaling depending on the workload change rate until the response time is within an acceptable range of users.The experimental results show that this method can provide faster scaling response and less cost when dealing with fluctuating workloads. Scalability Virtual machine Docker container 2015-11-02。苗立堯,碩士生,主研領域:大數(shù)據(jù)與高性能計算。陳莉君,教授。 TP319 A 10.3969/j.issn.1000-386x.2017.01.0063 實驗驗證





4 結 語