劉勝楠,汪詩(shī)林
(1.國(guó)防科學(xué)技術(shù)大學(xué)計(jì)算機(jī)學(xué)院,湖南 長(zhǎng)沙 410073;2.國(guó)防科學(xué)技術(shù)大學(xué)信息化管理辦公室,湖南 長(zhǎng)沙 410073)
虛擬環(huán)境下Web服務(wù)動(dòng)態(tài)負(fù)載均衡策略改進(jìn)*
劉勝楠1,汪詩(shī)林2
(1.國(guó)防科學(xué)技術(shù)大學(xué)計(jì)算機(jī)學(xué)院,湖南 長(zhǎng)沙 410073;2.國(guó)防科學(xué)技術(shù)大學(xué)信息化管理辦公室,湖南 長(zhǎng)沙 410073)
為了提高Web服務(wù)集群的伸縮性和自動(dòng)化能力,從虛擬化和負(fù)載均衡兩方面研究集群系統(tǒng),對(duì)現(xiàn)有負(fù)載采集策略做了改進(jìn),設(shè)計(jì)并實(shí)現(xiàn)了一種可根據(jù)負(fù)載值自動(dòng)控制集群規(guī)模的模型XCluster。新模型運(yùn)行在Xen提供的虛擬化環(huán)境中,實(shí)時(shí)監(jiān)視宿主機(jī)層和虛擬機(jī)層的負(fù)載狀態(tài),隨著集群系統(tǒng)總負(fù)載的增長(zhǎng),逐漸引入新的虛擬機(jī)來(lái)擴(kuò)大集群規(guī)模,同時(shí)將任務(wù)合理分配到各個(gè)虛擬機(jī)節(jié)點(diǎn)上;當(dāng)總負(fù)載下降時(shí),逐漸關(guān)閉虛擬機(jī)縮小集群規(guī)模,釋放出來(lái)的硬件資源又可以提供給其他集群系統(tǒng)使用。理論分析和實(shí)驗(yàn)結(jié)果表明,XCluster只需占用很少的網(wǎng)絡(luò)通信量完成信息收集和命令下達(dá),能夠充分利用虛擬機(jī)易于管理的優(yōu)勢(shì)完成后端節(jié)點(diǎn)的調(diào)度,并且在任務(wù)總量相同的情況下,使用盡可能少的集群節(jié)點(diǎn)來(lái)執(zhí)行任務(wù)。
虛擬化;Web服務(wù);動(dòng)態(tài)負(fù)載均衡;自動(dòng)化控制;集群;任務(wù)調(diào)度
在互聯(lián)網(wǎng)高速發(fā)展的今天,各大網(wǎng)站為了應(yīng)對(duì)高并發(fā)的用戶訪問(wèn)通常以集群的方式來(lái)部署Web服務(wù)。其經(jīng)典結(jié)構(gòu)正如Google[1]的搜索引擎一樣,由負(fù)責(zé)任務(wù)調(diào)度的前端節(jié)點(diǎn)和負(fù)責(zé)處理請(qǐng)求的后端節(jié)點(diǎn)組成。虛擬化技術(shù)出現(xiàn)以前,集群大多是固定規(guī)模,物理服務(wù)器與集群節(jié)點(diǎn)一一對(duì)應(yīng),物理服務(wù)器的數(shù)量越多,集群能夠承受的負(fù)載越大。然而,由于影響網(wǎng)站訪問(wèn)量[2]的因素太多,集群規(guī)模又無(wú)法改變,于是要么在峰值到達(dá)時(shí)負(fù)載過(guò)重,響應(yīng)緩慢,要么出現(xiàn)大量空閑節(jié)點(diǎn)。新一代的集群將節(jié)點(diǎn)轉(zhuǎn)移到虛擬機(jī)上,不僅節(jié)約硬件投入,而且借助虛擬化層提供的接口,啟動(dòng)或關(guān)閉后端節(jié)點(diǎn),可大大提高系統(tǒng)的伸縮性和自動(dòng)控制能力。在虛擬化環(huán)境下,前端節(jié)點(diǎn)需要在兩個(gè)層面[3]調(diào)度任務(wù),一是虛擬機(jī)層,任務(wù)來(lái)自用戶請(qǐng)求以及為了處理請(qǐng)求而產(chǎn)生的進(jìn)程和子進(jìn)程,負(fù)載體現(xiàn)在占用虛擬機(jī)CPU、內(nèi)存以及網(wǎng)絡(luò)資源上;二是宿主機(jī)層,任務(wù)來(lái)自虛擬化層針對(duì)虛擬機(jī)的操作,負(fù)載體現(xiàn)在虛擬機(jī)數(shù)量以及占用的硬件資源上。圖1以Xen(一個(gè)由劍橋大學(xué)開發(fā)的虛擬機(jī)監(jiān)視器)[4]為例,描述了在M臺(tái)宿主機(jī)上部署N套Web服務(wù)集群的情形。
Figure 1 Schematic diagram of clusters deployed in Xen environment
從虛擬機(jī)層的角度看,大量并發(fā)的用戶請(qǐng)求通過(guò)網(wǎng)絡(luò)被前端節(jié)點(diǎn)分發(fā)到后端節(jié)點(diǎn),客戶操作系統(tǒng)Guest OS(Guest Operation System)將請(qǐng)求轉(zhuǎn)換成計(jì)算/IO指令,在Domain0(一個(gè)特殊的Guest OS,具有調(diào)用硬件設(shè)備的最高權(quán)限)的調(diào)度下,分配硬件資源執(zhí)行;從宿主機(jī)層的角度看,處于活動(dòng)狀態(tài)的后端節(jié)點(diǎn)的數(shù)量和位置隨著用戶訪問(wèn)量的變化而變化。但是,傳統(tǒng)集群技術(shù)無(wú)法監(jiān)控宿主機(jī),也沒(méi)有控制虛擬機(jī)的權(quán)限,因此僅能在虛擬機(jī)層實(shí)現(xiàn)負(fù)載均衡。
為了解決以上問(wèn)題,本文在現(xiàn)有動(dòng)態(tài)負(fù)載均衡技術(shù)的基礎(chǔ)上,引入虛擬層提供的監(jiān)控功能,結(jié)合WebService技術(shù),將信息策略和轉(zhuǎn)移策略獨(dú)立出來(lái),設(shè)計(jì)并實(shí)現(xiàn)了一種根據(jù)負(fù)載值自動(dòng)控制集群規(guī)模的模型XCluster(Xen-Cluster),同時(shí)滿足虛擬機(jī)層與宿主機(jī)層的負(fù)載均衡需求。
負(fù)載均衡策略根據(jù)考慮的側(cè)重點(diǎn)不同,可以有多種分類方式。按調(diào)度方式有靜態(tài)調(diào)度和、動(dòng)態(tài)調(diào)度,按調(diào)度對(duì)象類型有基于任務(wù)的調(diào)度和基于資源的調(diào)度,按調(diào)度器的位置分有客戶端層、服務(wù)器層、網(wǎng)絡(luò)層。靜態(tài)調(diào)度[5]算法主要有輪詢法、加權(quán)法、先分組加權(quán),再組內(nèi)輪詢的混合法等,這些算法不需要監(jiān)控節(jié)點(diǎn)的實(shí)際負(fù)載,算法簡(jiǎn)單易于實(shí)現(xiàn),但負(fù)載均衡效果不佳;動(dòng)態(tài)調(diào)度[6]正好相反,根據(jù)Kameda H等人[7]的實(shí)驗(yàn)結(jié)果,動(dòng)態(tài)調(diào)度的性能效果比靜態(tài)調(diào)度要高30%~40%?;谌蝿?wù)的調(diào)度,將任務(wù)看做產(chǎn)生負(fù)載的根源,側(cè)重于通過(guò)合理分發(fā)任務(wù)達(dá)到平衡系統(tǒng)的整體負(fù)載的目的;基于資源的調(diào)度,將計(jì)算資源看做可以再分配的對(duì)象,如虛擬機(jī)遷移技術(shù)[8],通過(guò)預(yù)拷貝和后續(xù)拷貝將虛擬機(jī)的運(yùn)行狀態(tài)完整、快速地從原重載宿主機(jī)平滑地遷移到目標(biāo)輕載宿主機(jī)上。但是,它有一個(gè)限制,虛擬機(jī)上運(yùn)行的Web服務(wù)必須能夠兼容目標(biāo)宿主機(jī)的配置,比如一個(gè)32位的虛擬機(jī),再怎么遷移也無(wú)法使用超過(guò)4 GB的內(nèi)存。調(diào)度器運(yùn)行在服務(wù)器上是最常見(jiàn)的形式,屬于服務(wù)器層調(diào)度;也有一些特殊的瀏覽器,如Netscope[9]直接從自己的服務(wù)器上下載最佳路由,屬于在客戶端層實(shí)現(xiàn)調(diào)度的方法;還有將調(diào)度器放入網(wǎng)絡(luò)層甚至鏈路層設(shè)備[10]的,直接在網(wǎng)絡(luò)層將用戶請(qǐng)求地址替換成負(fù)載最低的服務(wù)器地址。
Figure 2 XCluster model
本文設(shè)計(jì)的XCluster需要控制多個(gè)Web集群,因此適合選擇在服務(wù)器層基于任務(wù)的動(dòng)態(tài)調(diào)度算法[6,7,11]。它有信息策略、轉(zhuǎn)移策略、啟動(dòng)策略、選擇策略、定位策略五個(gè)組成部分,集中式和分布式兩種實(shí)現(xiàn)方式。在文獻(xiàn)[6]設(shè)計(jì)的決策支持系統(tǒng)中,信息策略采用獨(dú)立服務(wù)器集中收集,稱為管理者,其他策略分散到各個(gè)節(jié)點(diǎn),采用分布式調(diào)度。各節(jié)點(diǎn)通過(guò)WebService向管理者查詢各節(jié)點(diǎn)負(fù)載表。WebService技術(shù)降低了集中式調(diào)度器的負(fù)載。文獻(xiàn)[12]設(shè)計(jì)了一種門限策略來(lái)量化負(fù)載,不同Web服務(wù)占用資源的比例是不同的。門限策略可以根據(jù)實(shí)際情況設(shè)定每種負(fù)載指標(biāo)的權(quán)重以及劃分負(fù)載狀態(tài)的閾值,為調(diào)度器提供量化手段。文獻(xiàn)[13]設(shè)計(jì)了一種監(jiān)控虛擬環(huán)境下分布式系統(tǒng)狀態(tài)的框架,它由中央監(jiān)視器和節(jié)點(diǎn)監(jiān)視器組成,節(jié)點(diǎn)監(jiān)視器借助Xen收集節(jié)點(diǎn)的實(shí)時(shí)數(shù)據(jù),減少對(duì)虛擬機(jī)資源的占用,然后將整合后的數(shù)據(jù)發(fā)送給中央監(jiān)視器分析。在信息策略中,節(jié)點(diǎn)監(jiān)控是必不可少的,Xen的性能監(jiān)視器在實(shí)時(shí)性上有所欠缺,而且也無(wú)法監(jiān)控進(jìn)程,所以每個(gè)節(jié)點(diǎn)上還是需要額外安裝監(jiān)視進(jìn)程。各個(gè)節(jié)點(diǎn)監(jiān)控?cái)?shù)據(jù)的傳輸必然會(huì)增加集群的網(wǎng)絡(luò)負(fù)載,收集的信息越詳細(xì),負(fù)載越重。文獻(xiàn)[14]利用Xen的管理工具,根據(jù)負(fù)載狀態(tài)修改虛擬機(jī)的配置,從而擴(kuò)展或縮小集群的服務(wù)能力,實(shí)現(xiàn)簡(jiǎn)單而且有效,不過(guò)虛擬機(jī)上的應(yīng)用程序必須能夠兼容新的配置。
本文所設(shè)計(jì)的XCluster要實(shí)現(xiàn)兩個(gè)目標(biāo):滿足單個(gè)集群系統(tǒng)節(jié)點(diǎn)的動(dòng)態(tài)擴(kuò)展,在虛擬機(jī)層面實(shí)現(xiàn)負(fù)載均衡;多個(gè)集群系統(tǒng)的節(jié)點(diǎn)在有限的宿主機(jī)上合理分布,在宿主機(jī)層面實(shí)現(xiàn)負(fù)載均衡。圖2展示了XCluster的整體結(jié)構(gòu),ClusterConfigurator是為集群管理員提供基本配置的應(yīng)用程序,包括集群規(guī)模的規(guī)劃、負(fù)載指標(biāo)及權(quán)重等。前端節(jié)點(diǎn)由XenMonitor、ClusterScheduler、VMController三個(gè)獨(dú)立功能的子系統(tǒng)組成,它們通過(guò)WebService進(jìn)行通信。XenMonitor負(fù)責(zé)收集宿主機(jī)、虛擬機(jī)信息以及負(fù)載情況;ClusterScheduler接收用戶請(qǐng)求,完成虛擬機(jī)層任務(wù)調(diào)度;VMController通過(guò)控制備用節(jié)點(diǎn)、活動(dòng)節(jié)點(diǎn)的數(shù)量和位置完成宿主機(jī)層的負(fù)載均衡。后端節(jié)點(diǎn)上ImmortalWeb是集群的業(yè)務(wù)系統(tǒng),為了方便測(cè)試,它被設(shè)計(jì)成制造虛擬機(jī)CPU、內(nèi)存以及IO壓力的Web應(yīng)用程序;VmClientMonitor負(fù)責(zé)監(jiān)控虛擬機(jī)以及ImmortalWeb實(shí)時(shí)狀態(tài),當(dāng)發(fā)現(xiàn)異常時(shí)通過(guò)WebService向ClusterScheduler報(bào)告。
3.1 信息策略
在XCluster中,后端節(jié)點(diǎn)的狀態(tài)由節(jié)點(diǎn)類型和量化負(fù)載值兩部分組成。節(jié)點(diǎn)類型分為空節(jié)點(diǎn)BN(Blank Node)、備用節(jié)點(diǎn)SN(Standby Node)和活動(dòng)節(jié)點(diǎn)AN(Active Node)三類??展?jié)點(diǎn)是僅在虛擬化環(huán)境中才會(huì)出現(xiàn)的一種新型節(jié)點(diǎn),它表示在一臺(tái)宿主機(jī)上已規(guī)劃但未部署虛擬機(jī)的節(jié)點(diǎn);備用節(jié)點(diǎn)表示該虛擬機(jī)已經(jīng)部署但處于停機(jī)狀態(tài),空節(jié)點(diǎn)和備用節(jié)點(diǎn)都沒(méi)有負(fù)載;活動(dòng)節(jié)點(diǎn)表示該虛擬機(jī)處于運(yùn)行狀態(tài),并根據(jù)管理員設(shè)定的閾值分為適載節(jié)點(diǎn)OptN(Optinum-load Node)、重載節(jié)點(diǎn)HvN(Heavy-load Node)和滿載節(jié)點(diǎn)FuN(Full-load Node)三類。活動(dòng)節(jié)點(diǎn)、備用節(jié)點(diǎn)以及空節(jié)點(diǎn)的總和代表了集群的最大規(guī)模,活動(dòng)節(jié)點(diǎn)代表集群的當(dāng)前規(guī)模,備用節(jié)點(diǎn)和空節(jié)點(diǎn)代表集群剩余的擴(kuò)展能力。量化負(fù)載值用于比較處于相同閾值區(qū)間活動(dòng)節(jié)點(diǎn)之間的負(fù)載大小。本系統(tǒng)提供了CPU利用率、內(nèi)存占用率、I/O利用率、磁盤利用率等常見(jiàn)的負(fù)載指標(biāo),并采用對(duì)負(fù)載指標(biāo)加權(quán)求和的策略量化。權(quán)重由系統(tǒng)管理員根據(jù)集群系統(tǒng)的特點(diǎn)自行設(shè)置(下文中負(fù)載值均指量化后的負(fù)載值)。
本文不涉及對(duì)宿主機(jī)電源的控制,因此所有宿主機(jī)都是活動(dòng)節(jié)點(diǎn),其狀態(tài)主要是指負(fù)載類型。由于各虛擬機(jī)之間具有良好的隔離性,相同閾值區(qū)間內(nèi)宿主機(jī)負(fù)載值高或者低對(duì)虛擬機(jī)的影響都非常小,可忽略不計(jì),所以只需要適載OptH(Optimum-load Host)和滿載FuH(Full-load Host)兩種即可。宿主機(jī)負(fù)載有兩種不同表現(xiàn),一種體現(xiàn)在部署虛擬機(jī)時(shí),當(dāng)宿主機(jī)的空閑塊設(shè)備或空閑內(nèi)存等不滿足部署虛擬機(jī)條件時(shí),視為滿載,反之為適載;另一種體現(xiàn)在啟動(dòng)虛擬機(jī)時(shí),當(dāng)宿主機(jī)的CPU或空閑內(nèi)存等不能滿足啟動(dòng)虛擬機(jī)條件時(shí),視為滿載,反之為適載。
3.2 系統(tǒng)均衡性判定
集群系統(tǒng)從啟動(dòng)的那一刻起就在擴(kuò)展、穩(wěn)定和收縮三種狀態(tài)之間轉(zhuǎn)換。VMController通過(guò)分別統(tǒng)計(jì)各類后端節(jié)點(diǎn)的數(shù)量來(lái)判斷集群系統(tǒng)是處于何種狀態(tài),只要不是穩(wěn)定狀態(tài)就會(huì)觸發(fā)相應(yīng)的操作讓系統(tǒng)回到穩(wěn)定狀態(tài)。圖3描述了這三種狀態(tài)的轉(zhuǎn)換過(guò)程,當(dāng)系統(tǒng)啟動(dòng)時(shí),所有節(jié)點(diǎn)都是空節(jié)點(diǎn),系統(tǒng)處于擴(kuò)展?fàn)顟B(tài),VMController執(zhí)行部署和啟動(dòng)虛擬機(jī)的操作增加活動(dòng)節(jié)點(diǎn)數(shù),直到適載節(jié)點(diǎn)數(shù)與重載節(jié)點(diǎn)數(shù)之和達(dá)到最小活動(dòng)節(jié)點(diǎn)數(shù)MinAN(Minimum Number of Active Nodes),并且備用節(jié)點(diǎn)數(shù)達(dá)到最小備用節(jié)點(diǎn)數(shù)MinSN(Minimum Number of Standby Nodes)。接著,系統(tǒng)進(jìn)入穩(wěn)定狀態(tài)。當(dāng)適載節(jié)點(diǎn)數(shù)大于最大適載節(jié)點(diǎn)數(shù)MaxOptN(Maximum Number of Optinum-load Node),或者備用節(jié)點(diǎn)數(shù)大于最大備用節(jié)點(diǎn)數(shù)MaxSN(Maximum Number of Standby Nodes)時(shí),系統(tǒng)進(jìn)入收縮狀態(tài),VMController執(zhí)行關(guān)閉或刪除虛擬機(jī)的操作,減少活動(dòng)節(jié)點(diǎn)和備用節(jié)點(diǎn),使系統(tǒng)再次回到穩(wěn)定狀態(tài)。
Figure 3 State transition diagram of XCluster
3.3 轉(zhuǎn)移策略與定位策略
宿主機(jī)層負(fù)載均衡的對(duì)象是虛擬機(jī),有四種操作用于處理六種場(chǎng)景。四種操作分別是:將虛擬機(jī)部署到宿主機(jī),使得空節(jié)點(diǎn)變?yōu)閭溆霉?jié)點(diǎn);刪除備用節(jié)點(diǎn),使之變?yōu)榭展?jié)點(diǎn);啟動(dòng)備用節(jié)點(diǎn)變?yōu)榛顒?dòng)節(jié)點(diǎn);關(guān)閉活動(dòng)節(jié)點(diǎn)變?yōu)閭溆霉?jié)點(diǎn)。六種場(chǎng)景如圖4所示。場(chǎng)景1是當(dāng)備用節(jié)點(diǎn)數(shù)小于MinSN,且存在有空節(jié)點(diǎn)的適載宿主機(jī)時(shí),將虛擬機(jī)隨機(jī)部署在一臺(tái)適載宿主機(jī)上。MinSN的取值表示宿主機(jī)層集群的機(jī)動(dòng)能力,值越大機(jī)動(dòng)性越強(qiáng),占用宿主機(jī)塊設(shè)備資源也越多。部署的方式有兩種,一種是將虛擬機(jī)鏡像文件導(dǎo)入到宿主機(jī)上,另一種類似虛擬機(jī)遷移,通過(guò)copy on write技術(shù)復(fù)制同一虛擬化池(Virtualized Pool)中其他宿主機(jī)上的虛擬機(jī)實(shí)現(xiàn)。場(chǎng)景2是當(dāng)備用節(jié)點(diǎn)數(shù)大于MaxSN時(shí),隨機(jī)刪除一個(gè)備用節(jié)點(diǎn),釋放所在宿主機(jī)的塊設(shè)備資源。MaxSN與MinSN的差表示宿主機(jī)層集群的敏感度,差值越小靈敏度越高,負(fù)載均衡活動(dòng)越頻繁。場(chǎng)景3是當(dāng)備用節(jié)點(diǎn)數(shù)在MinSN與MaxSN之間時(shí),如果最后一個(gè)被關(guān)閉的備用節(jié)點(diǎn)是在足夠長(zhǎng)的時(shí)間IdleTimeout(Idle Time Out)前關(guān)閉的,那么認(rèn)為集群目前處于一個(gè)十分穩(wěn)定的狀態(tài),可以將備用節(jié)點(diǎn)的數(shù)量逐步收斂到MinSN值。IdleTimeout值表示集群從穩(wěn)定過(guò)渡到空閑的時(shí)長(zhǎng),該值越大則說(shuō)明需要保持穩(wěn)定狀態(tài)的時(shí)間更長(zhǎng)。場(chǎng)景4是當(dāng)適載節(jié)點(diǎn)數(shù)與重載節(jié)點(diǎn)數(shù)之和小于MinAN時(shí),從適載宿主機(jī)上隨機(jī)啟動(dòng)一個(gè)備用節(jié)點(diǎn)上的虛擬機(jī)。該虛擬機(jī)負(fù)載會(huì)從0直接升至滿載再逐漸降為重載,最后穩(wěn)定在適載狀態(tài)。MinAN表示集群穩(wěn)定時(shí)的最小吞吐量(throughput),值越大最小吞吐量越大。場(chǎng)景5是當(dāng)適載節(jié)點(diǎn)數(shù)大于MaxOptN時(shí),通常是在集群負(fù)載下降的時(shí)候才會(huì)出現(xiàn)該情形,隨機(jī)關(guān)閉一個(gè)收到關(guān)機(jī)信號(hào)的適載節(jié)點(diǎn)。MaxOptN用于調(diào)節(jié)關(guān)閉適載節(jié)點(diǎn)的速度,值越大速度越慢。場(chǎng)景6是假設(shè)管理員讓MaxOptN的值大于MinAN的一種極端情況,當(dāng)適載節(jié)點(diǎn)數(shù)超過(guò)MinAN且小于MaxOptN時(shí),同樣認(rèn)為集群規(guī)模應(yīng)當(dāng)縮小,從而隨機(jī)關(guān)閉一個(gè)適載節(jié)點(diǎn)。
圖4 宿主機(jī)層轉(zhuǎn)移策略和定位策略
虛擬機(jī)層負(fù)載均衡的對(duì)象是任務(wù),任務(wù)的調(diào)度僅與活動(dòng)節(jié)點(diǎn)中的適載節(jié)點(diǎn)與重載節(jié)點(diǎn)有關(guān),而滿載節(jié)點(diǎn)由于負(fù)載已經(jīng)達(dá)到上限所以不再接收新的任務(wù),備用節(jié)點(diǎn)和空節(jié)點(diǎn)都缺少處于運(yùn)行狀態(tài)的虛擬機(jī),也不能接收任務(wù)。由于宿主機(jī)層的負(fù)載均衡能夠保證在集群達(dá)到最大規(guī)模,即所有剩余空節(jié)點(diǎn)以及備用節(jié)點(diǎn)所在的宿主機(jī)都為滿載宿主機(jī),所有活動(dòng)節(jié)點(diǎn)都為滿載節(jié)點(diǎn)之前,總能找到可以轉(zhuǎn)發(fā)任務(wù)的活動(dòng)節(jié)點(diǎn),因此虛擬機(jī)層的轉(zhuǎn)移和定位策略的目標(biāo)是在滿足任務(wù)并發(fā)的需求的前提下使用盡可能少的活動(dòng)節(jié)點(diǎn)。其核心體現(xiàn)在后端節(jié)點(diǎn)調(diào)度優(yōu)先級(jí)隊(duì)列PQ(Priority Queue of Back-End Nodes)上。該隊(duì)列按節(jié)點(diǎn)類型分為三段,第一段的優(yōu)先級(jí)最高,第二段次之,第三段最低。每一段都要按負(fù)載值排序,同一段內(nèi)排名越靠前,優(yōu)先級(jí)越高。第一段存儲(chǔ)負(fù)載值最大的前MinAN個(gè)適載節(jié)點(diǎn),負(fù)載值從大到小排序;第二段存儲(chǔ)所有重載節(jié)點(diǎn),負(fù)載值從小到大排序;第三段存儲(chǔ)除去第一段后剩下的適載節(jié)點(diǎn),負(fù)載值從大到小排序。PQ的長(zhǎng)度LPQ(Length of PQ)受宿主機(jī)層負(fù)載均衡的影響而動(dòng)態(tài)變化。在一次任務(wù)調(diào)度周期中,N個(gè)任務(wù)從任務(wù)隊(duì)列Qt(Queue of Tasks)中取出,逐一轉(zhuǎn)發(fā)至從PQ中選出的N個(gè)節(jié)點(diǎn)上。調(diào)度過(guò)程會(huì)出現(xiàn)兩種情況,第一種情況是當(dāng)N小于或等于LPQ時(shí),按優(yōu)先級(jí)從PQ逐一取出節(jié)點(diǎn)接收任務(wù),直到所有任務(wù)調(diào)度完畢。優(yōu)先級(jí)越高的節(jié)點(diǎn),獲得任務(wù)的概率越高,負(fù)載值增長(zhǎng)得越快。經(jīng)過(guò)實(shí)驗(yàn)證明,MinAN值設(shè)置得越大,系統(tǒng)抵抗訪問(wèn)量激增的能力就越強(qiáng)。第二種情況是當(dāng)N大于LPQ時(shí),采用輪詢法,反復(fù)遍歷PQ,直到所有任務(wù)調(diào)度完畢。若N遠(yuǎn)大于LPQ,隊(duì)列中所有節(jié)點(diǎn)獲得任務(wù)的概率趨于一致,負(fù)載值增長(zhǎng)速度也幾乎相同。
為了驗(yàn)證XCluster的性能,準(zhǔn)備了兩臺(tái)擁有4核CPU、4 GB內(nèi)存、千兆網(wǎng)絡(luò)的物理機(jī),上面安裝Xen,版本為3.4。集群節(jié)點(diǎn)鏡像文件ImmortalTestVm.xva,部署到宿主機(jī)后占用1VCPU、1 GB內(nèi)存,且自動(dòng)運(yùn)行ImmortalWeb,對(duì)外提供三種Web服務(wù):在內(nèi)存中申請(qǐng)一段500 KB的空間,維持15 s后釋放;計(jì)算100 000以內(nèi)的質(zhì)數(shù)個(gè)數(shù);從外部接收500 KB的隨機(jī)字符串,并存入本地,保存成功后刪除文件。它們分別用于增加節(jié)點(diǎn)的內(nèi)存、CPU以及IO的壓力。我們用Nginx與XCluster做對(duì)比,前者是由Igor Sysoev開發(fā)的高性能HTTP和反向代理服務(wù)器,通過(guò)簡(jiǎn)單配置就能夠?qū)⒂脩粽?qǐng)求隨機(jī)轉(zhuǎn)發(fā)到后端節(jié)點(diǎn)。
圖5和圖6分別是Nginx和XCluster在壓力測(cè)試下相同后端節(jié)點(diǎn)的量化負(fù)載曲線。兩幅圖的上半部分表示虛擬機(jī)的量化負(fù)載值隨時(shí)間的變化曲線,下半部分表示宿主機(jī)的量化負(fù)載值隨時(shí)間變化的曲線。橫坐標(biāo)表示時(shí)間,其中start標(biāo)記的位置是開始?jí)毫y(cè)試的時(shí)間,stop標(biāo)記的位置是停止壓力測(cè)試的時(shí)間,end標(biāo)記的位置是集群排空所有任務(wù)的時(shí)間。縱坐標(biāo)表示量化負(fù)載值,由于宿主機(jī)的網(wǎng)絡(luò)負(fù)載和塊設(shè)備讀寫負(fù)載對(duì)集群影響非常小,不計(jì)入負(fù)載值,所以宿主機(jī)的量化負(fù)載值要比虛擬機(jī)的小。
Figure 5 Back-end nodes’ load curves using Nginx
Figure 6 Back-end nodes’ load curves using XCluster
由于Nginx沒(méi)有控制虛擬機(jī)的權(quán)限,故測(cè)試之前所有節(jié)點(diǎn)都必須處于運(yùn)行狀態(tài)。在圖5中,從①、②處可以看出,當(dāng)外部壓力不大時(shí),負(fù)載變化非常小,若增大到一定程度時(shí),四個(gè)節(jié)點(diǎn)的負(fù)載值幾乎是一同飛快地上漲。這是因?yàn)镹ginx是隨機(jī)轉(zhuǎn)發(fā)請(qǐng)求的,當(dāng)請(qǐng)求很多時(shí),每個(gè)節(jié)點(diǎn)獲得任務(wù)的概率就趨于一致了。到了③處,1號(hào)節(jié)點(diǎn)因達(dá)到連接上限拒絕接受請(qǐng)求,從而被Nginx排除在轉(zhuǎn)發(fā)列表之外,之后不久另外三個(gè)節(jié)點(diǎn)接連故障,服務(wù)中斷。在④處,四個(gè)節(jié)點(diǎn)上的任務(wù)都已完成,負(fù)載降至最低。到⑤處,Nginx再次做連接測(cè)試,將它們重新加入到轉(zhuǎn)發(fā)列表中,服務(wù)恢復(fù)正常。
在圖6中,0至start是集群系統(tǒng)的啟動(dòng)階段,ClusterScheduler在2號(hào)宿主機(jī)上啟動(dòng)4號(hào)備用節(jié)點(diǎn),并在一個(gè)空節(jié)點(diǎn)處導(dǎo)入虛擬機(jī)作為新的備用節(jié)點(diǎn)(即2號(hào)節(jié)點(diǎn)),同時(shí)初始化XenMonitor,這些事件使得①處出現(xiàn)極大值。start至stop是壓力測(cè)試階段,在②處,測(cè)試壓力使得4號(hào)節(jié)點(diǎn)從適載節(jié)點(diǎn)變?yōu)橹剌d節(jié)點(diǎn),ClusterScheduler啟動(dòng)2號(hào)節(jié)點(diǎn),部署新的備用節(jié)點(diǎn)(1號(hào)節(jié)點(diǎn))。另外,虛擬機(jī)在啟動(dòng)時(shí),網(wǎng)絡(luò)負(fù)載不穩(wěn)定,因此量化負(fù)載值上下跳動(dòng)且范圍很大。這段時(shí)間新啟動(dòng)的虛擬機(jī)不能分擔(dān)壓力,所以4號(hào)節(jié)點(diǎn)的負(fù)載仍然增長(zhǎng)了一小段。在③處,2號(hào)節(jié)點(diǎn)達(dá)到適載狀態(tài),分擔(dān)了大量任務(wù),4號(hào)節(jié)點(diǎn)接著也回到適載狀態(tài),與2號(hào)節(jié)點(diǎn)交替接收任務(wù),所以在隨后的一段時(shí)間里它們負(fù)載增幅相似。隨著活動(dòng)節(jié)點(diǎn)數(shù)量的增加,測(cè)試程序并發(fā)的請(qǐng)求數(shù)也相應(yīng)增加,于是2號(hào)、4號(hào)節(jié)點(diǎn)再次變?yōu)橹剌d。在④處,ClusterScheduler啟動(dòng)1號(hào)節(jié)點(diǎn),部署最后一個(gè)備用節(jié)點(diǎn)(3號(hào)節(jié)點(diǎn)),因此宿主機(jī)負(fù)載值在這里出現(xiàn)拐點(diǎn)。stop至end是任務(wù)排空階段,在⑤處可以看到,所有節(jié)點(diǎn)的負(fù)載值都出現(xiàn)了下降的趨勢(shì)。在⑥處,2號(hào)節(jié)點(diǎn)第一個(gè)排空任務(wù),釋放內(nèi)存,宿主機(jī)負(fù)載值也出現(xiàn)相應(yīng)的跳躍。在end處,ClusterScheduler依次關(guān)閉了負(fù)載較低的2、3、1號(hào)節(jié)點(diǎn),只留下4號(hào)作為活動(dòng)節(jié)點(diǎn)。
對(duì)比兩次實(shí)驗(yàn)結(jié)果,XCluster可通過(guò)補(bǔ)充備用節(jié)點(diǎn)和活動(dòng)節(jié)點(diǎn)擴(kuò)展集群以適應(yīng)負(fù)載的增長(zhǎng)。當(dāng)負(fù)載變輕時(shí),又通過(guò)關(guān)閉空閑節(jié)點(diǎn)和刪除備用節(jié)點(diǎn)縮小集群釋放資源;Nginx從始至終都是固定的四個(gè)節(jié)點(diǎn)。XCluster通過(guò)監(jiān)聽虛擬機(jī)和宿主機(jī)的負(fù)載狀態(tài),在適當(dāng)?shù)臅r(shí)機(jī)擴(kuò)展或縮小集群,選擇合適的節(jié)點(diǎn)轉(zhuǎn)發(fā)請(qǐng)求,確保在保證服務(wù)不中斷的前提下,整體負(fù)載最??;而Nginx只是采用隨機(jī)轉(zhuǎn)發(fā)的方式,所以負(fù)載值要么長(zhǎng)時(shí)間沒(méi)有變化,要么大起大落。當(dāng)然,XCluster擴(kuò)展集群是需要過(guò)渡時(shí)間的,如果負(fù)載增長(zhǎng)過(guò)快,也會(huì)出現(xiàn)服務(wù)中斷的現(xiàn)象,只能通過(guò)增加MinAN值解決,當(dāng)MinAN值等于后端節(jié)點(diǎn)數(shù)時(shí),就和Nginx一樣失去擴(kuò)展和收縮能力了。
負(fù)載均衡本是分布式計(jì)算機(jī)系統(tǒng)研究方向的一個(gè)關(guān)鍵和經(jīng)典的問(wèn)題,而虛擬化技術(shù)的出現(xiàn)改變了人們的傳統(tǒng)觀念,重新從虛擬機(jī)層和宿主機(jī)層兩個(gè)不同的角度去看待這一問(wèn)題。本文設(shè)計(jì)的XCluster系統(tǒng)以Xen為虛擬化平臺(tái),利用其對(duì)虛擬機(jī)管理的靈活性,根據(jù)負(fù)載值自動(dòng)控制集群規(guī)模從而實(shí)現(xiàn)負(fù)載均衡。實(shí)驗(yàn)表明,系統(tǒng)能夠根據(jù)負(fù)載狀態(tài),在宿主機(jī)層控制備用節(jié)點(diǎn)的數(shù)量;在虛擬機(jī)層控制適載節(jié)點(diǎn)的數(shù)量,使得它們剛好滿足需要。
[1] Barroso L A,Dean J,Holzle U.Web search for a planet:The Google cluster architecture[J]. Micro, IEEE, 2003, 23(2):22-28.
[2] Hadavandi E, Shavandi H, Ghanbari A, et al.Developing a hybrid artificial intelligence model for outpatient visits forecasting in hospitals[J]. Applied Soft Computing, 2012, 12(2):700-711.
[3] Zhao Chun-yan.Research and implementation of job scheduling algorithm in cloud computing[D].Beijing:Beijing Jiaotong University,2009.(in Chinese)
[4] Barham P, Dragovic B, Fraser K, et al. Xen and the art of virtualization[C]∥Proc of the 19th ACM Symposium on Operating Systems Principles (SOSP’03), 2003:164-177.
[5] Zhang Cong-ping,Yin Jian-wei. Dynamic load balancing algorithm of distributed file system [J]. Journal of Chinese Computer Systems,2011,32(7):1424-1426.(in Chinese)
[6] Liu Han-ling.Research and implementation of dynamic load balancing strategy in distributed system based on web service[D]. Harbin:Harbin Engineering University,2010.(in Chinese)
[7] Kameda H, Fathy S, Ryu I, et al.A performance comparison of dynamic vs.static load balancing policies in a mainframe-personal computer network model[C]∥Proc of IEEE CDC2000, 2000:1415-1420.
[8] Zhang Bin-bin, Luo Ying-wei, Wang Xiao-lin, et al.Whole-system live migration mechanism for virtual machines[J]. Acta Electronica Sinica, 2009,37(4):894-899.(in Chinese)
[9] Mosedole W D,McCool F R. Lessons learned administering netscope’s internet site[J].IEEE Internet Computing,1997,1(2):28-35.
[10] Bryhni H, Klovning E, Kure O.A comparison of load balancing techniques for scalable web servers[J].IEEE Network,2000,14(4):58-64.
[11] Kunz T.The influence of different workload descriptions on a heuristic load balancing scheme[J].IEEE Transactions on Software Engineering,1991, 17(7):725-730.
[12] Lin F C H, Keller R M.The gradient model load balancing method[J].IEEE Transactions on Software Engineering,1987, 13(1):32-38.
[13] Mehrotra R,Dubey A,Abdelwahed S,et al.Large scale monitoring and online analysis in a distributed virtualized environment[C]∥Proc of IEEE International Conference and Workshops on Engineering of Autonomic and Autonomous Systems (EASe),2011:1-9.
[14] Monteiro A F,Azevedo M V,Sztajnberg A.Virtualized web server cluster self-configuration to optimize resource and power use[J].Journal of Systems and Software,2013,86(11):2779-2796.
附中文參考文獻(xiàn):
[3] 趙春燕.云環(huán)境下作業(yè)調(diào)度算法研究與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2009.
[5] 張聰萍,尹建偉.分布式文件系統(tǒng)的動(dòng)態(tài)負(fù)載均衡算法[J]. 小型微型計(jì)算機(jī)系統(tǒng),2011,32(7):1424-1426.
[6] 劉漢玲.基于WebService的分布式系統(tǒng)中動(dòng)態(tài)負(fù)載均衡策略的研究與實(shí)現(xiàn)[D]. 哈爾濱:哈爾濱工程大學(xué),2010.
[8] 張彬彬,羅英偉,汪小林,等.虛擬機(jī)全系統(tǒng)在線遷移[J].電子學(xué)報(bào),2009,37(4):894-899.
劉勝楠(1981-),男,湖南長(zhǎng)沙人,碩士生,研究方向?yàn)樵朴?jì)算。E-mail:nanjixing@126.com
LIU Sheng-nan,born in 1981,MS candidate,his research interest includes cloud computing.
Improved dynamic load-balancing strategy of web servers in virtual environment
LIU Sheng-nan1,WANG Shi-lin2
(1.College of Computer,National University of Defense Technology,Changsha 410073;2.Informatization Office,National University of Defense Technology,Changsha 410073,China)
In order to improve the scalability and automation of web cluster servers, we study many cluster systems from the aspects of virtualization and load balancing, propose a load information collection algorithm based on the Xen server virtualization platform, design and implement a modeling system called XCluster which can automatically control the cluster scale according to the load status. A monitoring service in the new model collects and quantifies the loads of the hosts and active nodes in real time. VM controllers will be notified to deploy more VMs from an optimum-load host when light-load nodes are in short supply; however, when there are too many light-load nodes, a number of VMs will be shutdown to release more hardware resources. Theoretical analysis and experimental results show that the XCluster can make full use of the unique capabilities of the virtualization platform which can manage all back-end nodes in an economical way. By scheduling VMs, the clusters can avoid resource waste, yet maintaining the application’s quality of service within an acceptable size.
virtualization;web server;dynamic load-balancing;automation control;cluster;task scheduling
1007-130X(2015)09-1607-07
2014-09-15;
2014-11-11
TP393.027
A
10.3969/j.issn.1007-130X.2015.09.001
通信地址:410073 湖南省長(zhǎng)沙市國(guó)防科學(xué)技術(shù)大學(xué)信息中心總體部
Address:Information Center,National University of Defense Technology,Changsha 410073,Hunan,P.R.China