張凱旋 顧春華 萬 峰
(華東理工大學(xué)信息科學(xué)與工程學(xué)院 上海 200237)
云環(huán)境下基于Agent協(xié)商的宿主機(jī)容錯策略
張凱旋 顧春華 萬 峰
(華東理工大學(xué)信息科學(xué)與工程學(xué)院 上海 200237)
云計算平臺中大量使用了廉價的設(shè)備,使得宿主機(jī)出現(xiàn)故障概率大大增加。針對因宿主機(jī)故障而導(dǎo)致的虛擬機(jī)實例失效問題,提出一種宿主機(jī)容錯策略。通過對宿主機(jī)集群分組和對宿主機(jī)進(jìn)行Agent建模,在每個小組內(nèi)利用Agent協(xié)商來快速重建虛擬機(jī)實例。仿真實驗表明,所提出的策略能夠自動重建失效的虛擬機(jī)實例,提出的容錯策略在耗時上小于其他策略。
云環(huán)境 宿主機(jī) Agent協(xié)商 容錯
隨著互聯(lián)網(wǎng)和云計算的不斷發(fā)展,云計算平臺作為基礎(chǔ)服務(wù)變得越來越流行?,F(xiàn)在的云計算平臺,其底層是基于虛擬化技術(shù)實現(xiàn)的[1]。云計算平臺最典型的實現(xiàn)是在大量的的物理機(jī)構(gòu)成的集群上運行虛擬機(jī),通過虛擬機(jī)向用戶提供服務(wù)。在云計算平臺中,稱這種物理機(jī)為宿主機(jī),虛擬機(jī)為客戶機(jī)或者實例。
作為衡量云計算平臺服務(wù)質(zhì)量的重要標(biāo)準(zhǔn),云計算平臺的高可用性越來越得到重視[2]。云計算平臺的高可用性是指虛擬機(jī)實例正常運行的時間占虛擬機(jī)實例總時間的百分比。云計算平臺的最大優(yōu)勢是大量使用了廉價的標(biāo)準(zhǔn)計算機(jī),而這種普通的計算機(jī)和專用服務(wù)器相比,出現(xiàn)故障的概率則大大增加。當(dāng)宿主機(jī)出現(xiàn)故障,宿主機(jī)上運行的虛擬機(jī)實例便會失效,從而造成租用該虛擬機(jī)實例的用戶服務(wù)中斷。當(dāng)宿主機(jī)出現(xiàn)斷電、硬件損壞等故障時,對宿主機(jī)上運行的虛擬機(jī)進(jìn)行恢復(fù)重建才能恢復(fù)云計算平臺的服務(wù)。因此,云計算平臺需要有一定的容錯能力,才能保證云計算服務(wù)的高可用性。
云計算平臺的出現(xiàn)的錯誤分布在三個層面:應(yīng)用層、虛擬機(jī)層和宿主機(jī)層[3]。其中應(yīng)用層面,是指應(yīng)用程序在運行過程中出現(xiàn)的錯誤,例如Web服務(wù)器數(shù)據(jù)庫服務(wù)故障。虛擬機(jī)層面是指某一些虛擬機(jī)出現(xiàn)故障,如虛擬機(jī)網(wǎng)絡(luò)中斷等。而宿主機(jī)層面的錯誤是指宿主機(jī)出現(xiàn)硬件故障。在應(yīng)用層容錯方面,傳統(tǒng)的容錯方案能夠滿足需求,如通過Web服務(wù)器集群和反向代理技術(shù)實現(xiàn)對Web服務(wù)器的容錯。因此,目前在云計算平臺的容錯方面研究的重點在于虛擬機(jī)層面的容錯和宿主機(jī)層面的容錯,而本文研究的是宿主機(jī)層面的容錯策略。
在宿主機(jī)層的容錯方面,Wang等提出了一種主備份的容錯調(diào)度策略用于對宿主機(jī)的錯誤容忍[4]。這種策略使用了主從宿主機(jī)結(jié)構(gòu),當(dāng)宿主機(jī)出現(xiàn)故障,啟用備用的宿主機(jī),這種策略需要設(shè)置多個宿主機(jī)作為備份宿主機(jī),對宿主機(jī)資源浪費比較嚴(yán)重。Nogueira等將宿主機(jī)故障問題描述為一個拜占庭故障模型[5],提出了一種副本組的策略,使得對于有2m+1個宿主機(jī)集群,最多可以容忍m個宿主機(jī)出現(xiàn)錯誤。這種策略改進(jìn)了傳統(tǒng)的拜占庭故障模型,提高了容忍錯誤的數(shù)量。但是,由于它的決策在全局中進(jìn)行迭代,當(dāng)集群規(guī)模比較大的時候,這種策略在效率上會變得很慢。
很多云計算廠商將宿主機(jī)的錯誤當(dāng)作虛擬機(jī)錯誤來處理[6-7],其做法是,通過實時監(jiān)測所有的虛擬機(jī),并對虛擬機(jī)進(jìn)行周期性快照。監(jiān)控程序一旦檢測到虛擬機(jī)出現(xiàn)問題,則從最近的一次快照重新新建一個虛擬機(jī)取代失效的虛擬機(jī)。這種策略由于要定期做快照,保存快照增大了存儲資源的開銷。
在宿主機(jī)容錯方面存在著資源開銷大、效率低的問題。針對這些問題,本文提出了一種基于Agent協(xié)商的宿主機(jī)容錯策略,在不額外使用宿主機(jī)的前提下,能夠快速自動重建因宿主機(jī)故障而失效的虛擬機(jī),提高了云計算平臺的容錯性。下文將介紹這種基于多Agent協(xié)商的容錯策略。
把宿主機(jī)看作Agent,利用Agent的自治性、協(xié)商來處理Agent故障[8]。
2.1 系統(tǒng)架構(gòu)
在云計算平臺中,宿主機(jī)的數(shù)量成千上萬,因此Agent的數(shù)量也成千上萬。如果把整個集群中的Agent視為一個多Agent系統(tǒng),則對于規(guī)模較大的多Agent系統(tǒng),其用于通信的系統(tǒng)開銷也很大,并且Agent之間的協(xié)商時間開銷也很大。為了避免因多Agent系統(tǒng)規(guī)模太大造成的策略的收斂速度慢的問題,把集群中宿主機(jī)劃分成規(guī)模較小的組,每個組內(nèi)有5到10個宿主機(jī)。每個組內(nèi)的宿主機(jī)構(gòu)成了規(guī)模較小的多Agent系統(tǒng),組內(nèi)的Agent之間通過交互來互相彼此狀態(tài)信息。當(dāng)某個宿主機(jī)出現(xiàn)故障時,即Agent失效時,同一個組內(nèi)的其他活動的Agent通過協(xié)作來處理失效Agent上正在運行的任務(wù),即重建失效的虛擬機(jī)。由于故障處理策略作用在組內(nèi),從而加快了決策的收斂速度。圖1是多Agent系統(tǒng)的分組模型,其中Agent在邏輯上被分到一個個的組內(nèi)。
圖1 多Agent的分組模型
同一個組內(nèi)的Agent構(gòu)成了一個規(guī)模較小的多Agent系統(tǒng),它們形成了一種聯(lián)盟。它們之間通過周期性的信息更新,來獲取組內(nèi)成員Agent的任務(wù)信息和狀態(tài)信息。假設(shè)某時刻t某個Agent失效,則其他Agent檢測到該Agent失效后,由于失效Agent的狀態(tài)信息和任務(wù)信息在其他Agent上留有副本,因此,其余Agent通過協(xié)商來共同處理失效Agent正在處理的任務(wù)。如圖2所示。
圖2 組內(nèi)Agent通過協(xié)商處理任務(wù)
2.2 Agent結(jié)構(gòu)
按問題求解能力劃分,Agent分為三種類型[9],即反應(yīng)型Agent,能響應(yīng)環(huán)境的變化或來自其他Agent的消息;慎思型Agent,能夠針對意圖和信念進(jìn)行推理,建立行為計劃,并執(zhí)行這些計劃;社會型Agent,除具有慎思型Agent的能力外,還具有關(guān)于其他主體的明確模型[10]。本文的Agent代表了宿主機(jī),則CPU利用率、內(nèi)存利用率等是Agent本身能夠感知的信息,且這些信息隨著外部環(huán)境如負(fù)載的變化而變化。Agent除了能感知自身的信息之外,還通過其他Agent交互獲取其它Agent的狀態(tài)、任務(wù)信息,例如運行的虛擬機(jī)實例的個數(shù)、類型、虛擬機(jī)的配置信息等。慎思型的Agent其會維護(hù)一個內(nèi)部可識別的世界模型,該模型描述了自身可感知的信息和外界環(huán)境信息。而當(dāng)環(huán)境發(fā)生變化,Agent根據(jù)預(yù)設(shè)的目標(biāo)作出不同的反應(yīng)。本文的Agent需要維護(hù)自身和其他Agent的狀態(tài),當(dāng)外部環(huán)境改變即發(fā)現(xiàn)有Agent失效,就會做出反應(yīng)。因此,慎思型Agent的結(jié)構(gòu)最適合構(gòu)造本文的Agent。如圖3所示。
圖3 慎思型Agent的結(jié)構(gòu)
2.3 Agent世界模型
Agent的世界模型(WM,World Model)是Agent內(nèi)部可識別的狀態(tài),是對外部環(huán)境和自身信息經(jīng)過加工、推理而建立的世界狀態(tài)[10]。Agent通過與其他Agent交互來獲取外部環(huán)境信息,通過自身的感知來獲取自身信息。虛擬化軟件啟動虛擬機(jī)的流程如下:虛擬機(jī)化軟件根據(jù)用戶指定的虛擬機(jī)配額生成一個xml文件,該文件描述了虛擬機(jī)的配置情況。接下來,虛擬機(jī)化軟件會根據(jù)上面生成的xml文件啟動虛擬機(jī)。虛擬機(jī)化軟件則根據(jù)鏡像文件和配置文件在計算節(jié)點啟動虛擬機(jī)。通過分析虛擬化軟件啟動虛擬機(jī)的流程可知,啟動一個虛擬機(jī)所必需的輸入條件是基礎(chǔ)鏡像和配置文件。其中基礎(chǔ)鏡像是虛擬機(jī)操作系統(tǒng)的鏡像,配置文件指定了虛擬機(jī)的核數(shù)、內(nèi)存大小、硬盤大小、網(wǎng)卡設(shè)備等信息。用戶在虛擬機(jī)的過程中,會產(chǎn)生用戶數(shù)據(jù),如用戶存放的文件等。一般地,用戶數(shù)據(jù)會單獨保存在云硬盤上,而云硬盤由塊服務(wù)提供,通過遠(yuǎn)程掛載的方式掛載在虛擬機(jī)上。
Agent的世界模型由Agent自身周期性的進(jìn)行更新。世界模型的信息按照信息變化的頻率可以劃分為靜態(tài)信息和動態(tài)信息。靜態(tài)數(shù)據(jù)是指Agent在初始化后,不經(jīng)常改變的數(shù)據(jù),如CPU核數(shù)、內(nèi)存總大小、鏡像文件、虛擬機(jī)配置文件等。動態(tài)信息是指在Agent正常活動時,會時刻發(fā)生改變的數(shù)據(jù),如CPU利用率、內(nèi)存利用率、組內(nèi)其他Agent運行的虛擬機(jī)信息和緩存的鏡像信息等。靜態(tài)信息的更新周期較長,相反的,動態(tài)信息的更新周期則要短。Agent的世界模型用一個二元組表示,其中StaticInfo表示靜態(tài)信息,DynamicInfo表示動態(tài)信息。
WM=
(1)
為了簡化描述,靜態(tài)信息用一個三元組表示。其中CPUtotle表示總的CPU核數(shù),MEMORYtotle表示總的內(nèi)存總大小,Disktotle表示總的硬盤總?cè)萘俊?/p>
StaticInfo=
(2)
動態(tài)信息用一個五元組表示,分別表示宿主機(jī)的CPU剩余核數(shù)、內(nèi)存剩余大小、硬盤剩余容量、所運行的虛擬機(jī)信息、緩存的鏡像信息、Agent所在的分組信息。
DynamicInfo=
(3)
所運行的虛擬機(jī)信息是Agent上所有運行的虛擬機(jī)的摘要信息,每一個虛擬機(jī)的摘要信息為虛擬機(jī)的id和鏡像id。虛擬機(jī)的id是由虛擬化軟件在啟動虛擬機(jī)虛擬機(jī)時分配的一個唯一的id,Agent用虛擬機(jī)的id作為該虛擬機(jī)配置文件的文件名保存到自身的文件系統(tǒng)中。
(4)
(5)
分組信息用一個三元組表示,其中MemberList是Agent所在組的其他Agent的集合。IsMaster表示Agent自身是不是管理Agent。
GroupInfo=
(6)
成員列表MemberList用一個二元組集合表示,其中Agentm表示組內(nèi)第m個成員,Addressm表示Agentm的通信地址。
MemberList={
(7)
Agent在初始化后,從分組信息中獲知和它同一個組的其他Agent的通信地址,接下來Agent會周期性的更新自己的世界狀態(tài)。為了在啟動虛擬機(jī)時,節(jié)省鏡像從鏡像服務(wù)器傳輸?shù)紸gent的時間,Agent主動的將從已經(jīng)緩存的鏡像文件平均的分發(fā)到組內(nèi)其他Agent。因此,針對鏡像文件,Agent采取的更新策略是主動的將自己的鏡像文件平均的推到組內(nèi)其他Agent上。而鏡像的描述信息以及其他摘要信息的更新采用拉的模式。
Agent周期性地更新自身世界模型時,如果存在無響應(yīng)的Agent,則認(rèn)為該Agent失效了。當(dāng)檢測到Agent失效時,同一組內(nèi)的其他活動的Agent就會通過協(xié)商來協(xié)助失效Agent重建正在運行的虛擬機(jī)。Agent協(xié)商中經(jīng)典的協(xié)調(diào)策略是由RandallDevis等提出的合同網(wǎng)協(xié)議,合同網(wǎng)協(xié)議是為了解決Agent之間的任務(wù)分配而進(jìn)行的一種合約協(xié)商過程[10]。
3.1Agent的協(xié)商過程
合同網(wǎng)協(xié)議中的Agent有兩種類型[11],一種是管理Agent(MA,MasterAgent),另一種是執(zhí)行Agent(EA,ExecuteAgent)。MA是協(xié)商過程的組織者,EA是執(zhí)行任務(wù)的工作Agent。MA組織協(xié)商的過程如下:①MA向所有的EA發(fā)布任務(wù);②EA收到任務(wù)信息后,根據(jù)任務(wù)要求和自己的能力,計算自己能夠完成的任務(wù),并提交標(biāo)書給MA進(jìn)行競標(biāo);③MA選擇一個或多個EA進(jìn)行作為最終的中標(biāo)者,并與競標(biāo)者簽訂問題求解合同;④MA負(fù)責(zé)監(jiān)視整個任務(wù)的執(zhí)行,EA將求解的結(jié)果提交給MA;⑤MA整合最終的處理結(jié)果。
3.2MA的選舉
傳統(tǒng)的合同網(wǎng)模型會指定某個Agent充當(dāng)一種角色,而實際上每個Agent都有可能失效,如果MA自身失效,則會導(dǎo)致Agent之間因缺少組織者而無法協(xié)商。為了避免這個問題,本文的MA由所有Agent選舉產(chǎn)生,并且Agent可以充當(dāng)多個角色,即Agent可以同時具備兩個角色。初始化時,每一個Agent都是EA,第一個檢測到存在失效的Agent,首先將失效Agent和當(dāng)時的時間戳記錄下來,然后將帶時間戳的失效消息告知到組內(nèi)其他Agent,并選舉自己為MA。當(dāng)收到超過一半的Agent同意后則,把自己標(biāo)記為Agent。如圖4所示。
圖4 Group內(nèi)的不同角色的Agent
在這個過程中,為了避免多個Agent競爭MA,規(guī)定每個Agent在一次失效中只能投一次票。Agent投票之前,Agent分兩種情況來決定是否選舉自己為MA:① 如果它還沒有檢測到有失效Agent,就收到失效通知信息,說明自己不是第一個發(fā)現(xiàn)存在失效Agent。那么它將發(fā)送一個探測包給失效Agent,來確認(rèn)Agent是否真的失效。確認(rèn)后,則發(fā)送確認(rèn)信息給發(fā)布失效通知的Agent,并且同意其成為MA;② 如果它自己也探測到有失效Agent并且自己沒來得及發(fā)出通告,則它就不再發(fā)出通告,避免多個Agent爭奪MA,接下來它按照①的方式繼續(xù)處理。Agent在發(fā)出選舉自己為在收到超過半數(shù)的投票后,把自己標(biāo)記為MA,并告知其他Agent自己成為MA。
3.3 任務(wù)模型
當(dāng)MA選舉成功后,由MA生成和發(fā)布任務(wù)。由前面的分析可知,該任務(wù)就是重建失效Agent上所運行的n個虛擬機(jī)。根據(jù)重建虛擬機(jī)所需的必要條件,任務(wù)的內(nèi)容可以用一個待重建的虛擬機(jī)列表來表示。由于每個Agent的世界模型中都能保存了組內(nèi)其他任意一個Agent運行虛擬機(jī)的摘要信息。因此,當(dāng)故障出現(xiàn)時,其他活動Agent都可能具備失效Agent的完整信息。由于每個Agent更新世界狀態(tài)并不是同步的,所以并不能保證每個Agent在某一時刻對同一個對象的認(rèn)知和描述都是一樣的。為了獲得失效Agent在失效的時刻最準(zhǔn)確的信息,MA需要向所有活動EA詢問誰的信息是最新的。EA將自己最近一次更新世界狀態(tài)的時間戳發(fā)送給MA,MA對比所有EA發(fā)來的時間戳,就能確定最準(zhǔn)確的信息在哪里。MA確定了最準(zhǔn)確的信息之后制作任務(wù)清單,任務(wù)清單用一個二元組表示:
Task=
(8)
其中Agentadd表示失效的Agent的地址,InfoAgentadd描述了要失效的Agent在失效時的最準(zhǔn)確的狀態(tài)信息所在的Agent地址。
3.4MA組織協(xié)商
MA在制作完任務(wù)清單后,將清單發(fā)送給所有的EA。EA收到MA發(fā)來的任務(wù)清單后,根據(jù)任務(wù)清單中的描述,從指定的Agent那里獲得失效Agent失效時的虛擬機(jī)信息VMInfo。EA按照約定的存儲方式,根據(jù)VMInfo提供的信息可以推算出要恢復(fù)的虛擬機(jī)所需的鏡像以及配置文件。
EA獲取到虛擬機(jī)的信息后,根據(jù)自身當(dāng)前的負(fù)載和已經(jīng)保存的信息來評估自己恢復(fù)每一個VM所耗費的時間,并制作標(biāo)書發(fā)送給MA,標(biāo)書用一個五元組表示,它描述了該Agent能夠?qū)χ亟恳粋€VM所耗費的時間:
VMBid=
(9)
其中Agentadd表示該Agent的地址,VMid表示VM的id,Tschedule表示啟動這個虛擬機(jī)的調(diào)度耗時,TtransImage表示傳輸鏡像耗時,Tlaunch表示加載虛擬機(jī)耗時。
MA根據(jù)每個EA的提交的標(biāo)書,求出最優(yōu)的解。為了提高云計算服務(wù)的高可用性,就要盡量縮短恢復(fù)故障的時間,即MA求解的目標(biāo)是使得在最短的時間內(nèi)完成任務(wù)。從單個Agent來看,重建一個虛擬機(jī)的耗時包括三個方面:一是調(diào)度耗時,二是鏡像傳輸耗時,三是啟動耗時。其中一包含了控制器轉(zhuǎn)發(fā)請求時間和選擇合適的宿主機(jī)時間。這部分耗時對于Agent協(xié)商這種模型是不需要控制轉(zhuǎn)發(fā),也不需要去遍歷所有的宿主機(jī)節(jié)點。針對第二點,Agent協(xié)商模型中每個Agent都會緩存其他Agent的信息,這其中包含啟動鏡像的配置文件和鏡像文件,因此傳生成配置文件的時間為0,啟動已經(jīng)緩存過鏡像的虛擬機(jī)鏡像傳輸?shù)暮臅r為0。針對第三點,通過實踐可知,大多數(shù)的虛擬機(jī)化技術(shù)啟動一個虛擬機(jī)的耗時很少且恒定。雖然Agent協(xié)商模型會帶來額外的協(xié)商時間開銷,但是由于組內(nèi)的Agent數(shù)目有限,且合同網(wǎng)協(xié)議處理一個任務(wù)是一次協(xié)商,而不是多次協(xié)商。因此,Agent協(xié)商耗時相對于其節(jié)約的調(diào)度耗時和鏡像傳輸耗時要小得多,因此通過理論分析,Agent協(xié)商模型能減小故障恢復(fù)的時間。
而另一方面,要重建的虛擬機(jī)可能不止一個,MA在分配任務(wù)時,讓EA盡可能并行地去處理任務(wù),從而縮短任務(wù)處理的時間。在啟動虛擬機(jī)時,鏡像傳輸是最耗時的一個環(huán)節(jié),因此首先將虛擬機(jī)分配給那些不需要傳輸鏡像的Agent。如果任務(wù)沒有分配完成,再將剩下的虛擬機(jī)平均地分配到每個Agent上,算法保證了每個EA獲取到任務(wù)量是相等的,下面給出該算法的偽代碼。
算法1 任務(wù)分配算法
輸入數(shù)據(jù):標(biāo)書列表BidList,要重建的虛擬機(jī)列表VMList。
結(jié)果:任務(wù)分配結(jié)果Result。
0 int Average= VMList.size() / BidList.size();
//每個Agent平均獲得的任務(wù)數(shù)目
1 /*首先嘗試將任務(wù)分配給不需要傳輸鏡像的Agent*/
1 for ( vmi:VMList ){
2 for ( bidj:BidList ){
3 currentAgent = bidj.agent();
//當(dāng)前報價的Agent
4 if( bidj.T_transImage = = 0 )
//已經(jīng)緩存該鏡像
5 if( currentAgent.acceptVm < Average)
//小于平均值
6 Result.add(vmi,currentAgent);
//將vmi分配給currentAgent
7 currentAgent.acceptVm += 1;
8 break;
9 else
//當(dāng)前Agent已經(jīng)獲得的任務(wù)書達(dá)到期望值
10 continue;
//嘗試分配給下一個Agent
11 }
12 }
13 /*一輪分配后,如果還存在未分配的任務(wù),則平均分配給每個Agent*/
14 if( Result.size() < VMList.size() ){
15 List UnallocateVMList;
//沒有分配出去的VM
16 for( bidj:BidList ){
17 currentAgent = bidj.agent();
18 while(currentAgent.acceptVm < Average){
19 vm = UnallocateVMList.take();//分配一個VM
20 Result.add(vm,currentAgent);
21 currentAgent.acceptVm += 1;
22 }
23 }
24 }
該任務(wù)分配算法,使得整個任務(wù)平均分?jǐn)傇诿總€EA上,并且盡可能優(yōu)先考慮最優(yōu)分配。最后MA將計算出來的最終中標(biāo)結(jié)果發(fā)送個每一個EA,中標(biāo)結(jié)果中包含了整個中標(biāo)結(jié)果。EA收到中標(biāo)結(jié)果后,向MA發(fā)送一個確認(rèn)回復(fù),表示接收任務(wù),即簽訂了合同,并開始執(zhí)行任務(wù)。EA執(zhí)行任務(wù)結(jié)束后將執(zhí)行結(jié)果發(fā)送給MA。MA確定協(xié)商結(jié)果后,將去掉自己的MA角色,并告知其他Agent,任務(wù)處理結(jié)束,系統(tǒng)恢復(fù)正常。
FIPA是Agent領(lǐng)域制定Agent之間互操作標(biāo)準(zhǔn)的國際組織[12],本文采用JADE進(jìn)行仿真實驗室。JADE是一個完全由Java語言實現(xiàn)的Agent開發(fā)框架,它通過中間件的方式實現(xiàn)符合FIPA規(guī)范的多Agent系統(tǒng),并支持通過一組圖形工具支持調(diào)試和部署[13]。
4.1 實驗設(shè)計
以O(shè)penStack云計算架構(gòu)作為實驗的參考架構(gòu),OpenStack是一個由NASA和Rackspace合作并發(fā)起的開源云計算管理平臺[14]。OpenStack啟動虛擬機(jī)的流程為:控制節(jié)點接收請求,啟用調(diào)度器,調(diào)度器根據(jù)各個宿主機(jī)的負(fù)載和資源使用情況,在所有的宿主機(jī)集群中選擇合適的宿主機(jī),并將任務(wù)發(fā)送給計算節(jié)點的計算服務(wù)。計算節(jié)點首先從鏡像服務(wù)器請求鏡像,再調(diào)用底層虛擬機(jī)化軟件啟動虛擬機(jī)。
為了便于仿真實驗,定義一些預(yù)設(shè)前置條件:① 宿主機(jī)是同構(gòu)的且物理資源是足夠大的;② 網(wǎng)絡(luò)傳輸?shù)淖畲笏俣葹?000 MB/s,且傳輸鏡像時以網(wǎng)絡(luò)最大速度傳輸;③ 設(shè)定5種規(guī)格的鏡像文件;④ 以鏡像的最低配置要求啟動虛擬機(jī);⑤ 假設(shè)Agent失效時,Agent之間已經(jīng)完成了數(shù)據(jù)的同步。如表1所示。
表1 預(yù)設(shè)的鏡像文件列表
現(xiàn)有的調(diào)度策略都是全局類調(diào)度策略,因此設(shè)計兩個實驗做對比:全局調(diào)度類的策略和本文基于組內(nèi)Agent協(xié)商的策略。兩個實驗啟動虛擬機(jī)流程都是模擬OpenStack啟動虛擬機(jī)的流程,兩個實驗假設(shè)都是一個宿主機(jī)出現(xiàn)故障,針對兩個實驗分別構(gòu)造20組實驗,故障宿主機(jī)上運行的虛擬機(jī)個數(shù)從1到20個。當(dāng)虛擬機(jī)個數(shù)小于等于鏡像種類時虛擬機(jī)使用不同的鏡像,當(dāng)虛擬機(jī)個數(shù)大于鏡像種類時,隨機(jī)選擇一個鏡像。本文策略的實驗構(gòu)造一個Agent Group,當(dāng)Agent之間完成數(shù)據(jù)同步后,通過JADE的GUI界面隨機(jī)殺死一個Agent,輸出中間的協(xié)商過程,并統(tǒng)計協(xié)商耗時、重建虛擬機(jī)耗時等。
4.2 結(jié)果分析
1) Agent協(xié)商效率分析
本文使用CNP作為協(xié)商的協(xié)議,由于本文改進(jìn)了傳統(tǒng)的CNP協(xié)議,增加了管理Agent選舉的過程,使得整個協(xié)商過程的耗時會增加。為了減少選舉管理Agent的耗時,本文通過規(guī)定每個Agent在一次選舉中只能投一次票、投票前的分析等原則使得選舉在一輪即可得到結(jié)果。實驗表明,選舉過程對協(xié)商過程的協(xié)商效率影響很小,只有在參與協(xié)商的Agent數(shù)目非常多的時候才會有明顯的影響。實際上,參與協(xié)商的Agent處于同一個組內(nèi),而每個組的Agent數(shù)量又是比較小的。所以,增加了選舉過程的CNP協(xié)議在效率上是可以接受的。如圖5所示。
圖5 改進(jìn)的CNP協(xié)商和經(jīng)典的耗時對比
2) 恢復(fù)故障的耗時分析
從實驗結(jié)果可以看出,隨著虛擬機(jī)個數(shù)的增加,兩種策略的耗時都在增加,但在一定的范圍內(nèi)本文策略的耗時是小于全局調(diào)度策略的耗時。如圖6所示。
圖6 重建虛擬機(jī)耗時隨著失效Agent運行的虛擬機(jī)個數(shù)的變化曲線
這是因為Agent已經(jīng)緩存了數(shù)據(jù),在重建虛擬機(jī)時候,不需要傳輸鏡像和重新生成虛擬機(jī)的配置文件,并且任務(wù)分配算法又保證了每個Agent的任務(wù)是相同的,因此極大提高了處理任務(wù)的并行度。全局調(diào)度的算法在失效Agent運行的虛擬機(jī)個數(shù)達(dá)到鏡像種類個數(shù)相等的時候,由于OpenStack在短時間內(nèi)會緩存鏡像,所以會存在一個拐點。在實際的云計算環(huán)境中,一個宿主機(jī)上運行的虛擬機(jī)實例個數(shù)是有限個的且數(shù)目在幾十個之內(nèi)。因此,本文的策略在實際的環(huán)境中是有效的。
從仿真實驗可以得出,提出的基于Agent協(xié)商的容錯策略是可行的。它具備以下的優(yōu)點:① 不額外增加宿主機(jī),減小了資源浪費;② 容錯機(jī)制作用在Agent組內(nèi),策略收斂速度較全局調(diào)度策略快。
[1] 林利, 石文昌. 構(gòu)建云計算平臺的開源軟件綜述[J]. 計算機(jī)科學(xué), 2012, 39(11):1-7,28.
[2] 陳康, 鄭緯民. 云計算:系統(tǒng)實例與研究現(xiàn)狀[J]. 軟件學(xué)報, 2009, 20(5):1337-1348.
[3] Tchana A, Broto L, Hagimont D. Approaches to cloud computing fault tolerance[C]//Computer, Information and Telecommunication Systems (CITS), 2012 International Conference on. IEEE, 2012:1-6.
[4] Wang J, Zhu X, Bao W. Real-Time Fault-Tolerant Scheduling Based on Primary-Backup Approach in Virtualized Clouds[C]// High Performance Computing and Communications & 2013 IEEE International Conference on Embedded and Ubiquitous Computing (HPCC_EUC), 2013 IEEE 10th International Conference on. IEEE, 2013:1127-1134.
[5] Nogueira R, Araujo F, Barbosa R. CloudBFT: Elastic Byzantine Fault Tolerance[C]//2014 IEEE 20th Pacific Rim International Symposium on Dependable Computing (PRDC). IEEE Computer Society, 2014:180-189.
[6] Microsoft. Windows azure: Microsoft's cloud services platform[EB/OL]. http://www.microsoft.com/windowsazure/.
[7] Bakshi K. Cisco cloud computing-data center strategy, architecture, and solutions point of view white paper for U.S. public sector[EB/OL]. http://www.cisco.com/web/strategy/docs/gov/CiscoCloudComputing WP.pdf.
[8] 黃楠, 劉斌. 多Agent技術(shù)綜述[J]. 微處理機(jī), 2010, 31(2):1-4.
[9] 黃關(guān)山, 徐冬梅. Agent的理論與結(jié)構(gòu)模型分析[J]. 微型機(jī)與應(yīng)用, 2004(2):6.
[10] 徐燕妮. 基于合同網(wǎng)協(xié)議的多Agent協(xié)作技術(shù)研究[D]. 青島:山東科技大學(xué), 2006.
[11] 宋海剛, 陳學(xué)廣. FIPA合同網(wǎng)協(xié)議的一種改進(jìn)方案[J]. 華中科技大學(xué)學(xué)報(自然科學(xué)版), 2004, 32(7):31-33.
[12] FIPA. Welcome to FIPA[OL]. http://www.fipa.org/.
[13] JADE. Introduction to Jade[EB/OL]. http://jade.tilab.com/documentation/tutorials-guides/introduction-to-jade/.
[14] OpenStack. Document for Mitaka[EB/OL]. http://docs.openstack.org.
FAULT TOLERANCE STRATEGY BASED ON AGENT NEGOTIATION IN A CLOUD ENVIRONMENT
Zhang Kaixuan Gu Chunhua Wan Feng
(CollegeofInformationScienceandEngineering,EastChinaUniversityofScienceandTechnology,Shanghai200237,China)
In the cloud computing platform,a large number of low-cost devices are used,which greatly increases the failure probability of host computers.To deal the problem of virtual machine instance failure caused by host failure,a kind of fault tolerant strategy of host is proposed.The virtual machines are rebuilt in each group using Agent negotiation by clustering,grouping and Agent modeling the host computers.The simulation experiment shows that the proposed method is able to rebuild the disabled virtual machine instances automatically,and take less time than other strategies.
Cloud Host Agent negotiation Fault tolerance
2015-10-12。張凱旋,碩士生,主研領(lǐng)域:云計算方向。顧春華,教授。萬峰,高工。
TP3
A
10.3969/j.issn.1000-386x.2017.01.005