虛擬機(jī)的資源分配方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及云計算領(lǐng)域,具體來說,涉及一種虛擬機(jī)的資源分配方法和裝置。
【背景技術(shù)】
[0002]資源調(diào)度是云計算中的關(guān)鍵技術(shù)之一,資源調(diào)度可分為靜態(tài)調(diào)度和動態(tài)調(diào)度,其中,靜態(tài)調(diào)度指在虛擬機(jī)啟動時,按照一定的調(diào)度策略選擇目標(biāo)云主機(jī),只執(zhí)行一次;而動態(tài)調(diào)度則指調(diào)度任務(wù)在后臺定時查看資源負(fù)載情況,并根據(jù)調(diào)度策略執(zhí)行迀移虛擬機(jī)、關(guān)閉或者啟動云主機(jī)操作。
[0003]資源調(diào)度實(shí)現(xiàn)的好壞從很大程度上能夠決定一個云計算系統(tǒng)的成敗。創(chuàng)建、啟動虛擬機(jī)的過程就是資源分配的過程;在系統(tǒng)運(yùn)行過程中,資源調(diào)度不斷動態(tài)地根據(jù)系統(tǒng)負(fù)載情況調(diào)整資源,以達(dá)到系統(tǒng)的負(fù)載均衡和節(jié)能等需求。
[0004]而在批量啟動虛擬機(jī)時,由于啟動一臺虛擬機(jī)需要一個時間過程,在下一臺虛擬機(jī)啟動時,前面的虛擬機(jī)可能正在啟動前的校驗(yàn)中,因此在統(tǒng)計云主機(jī)上正在運(yùn)行的虛擬機(jī)個數(shù)時,只能得到已經(jīng)啟動的虛擬機(jī)個數(shù),而正在啟動的虛擬機(jī)個數(shù)獲取不到,這就容易造成啟動結(jié)果混亂,比如原本不能在云主機(jī)上啟動的虛擬機(jī)在云主機(jī)上啟動了,導(dǎo)致云主機(jī)上啟動的虛擬機(jī)個數(shù)超出用戶的設(shè)置;或者原本希望批量啟動的虛擬機(jī)在各個云主機(jī)上是負(fù)載均衡的,但實(shí)際上可能所有虛擬機(jī)都啟動在一臺云主機(jī)上,根本沒有達(dá)到負(fù)載均衡的效果等。
[0005]具體的,如圖1所示,在現(xiàn)有技術(shù)中,在應(yīng)用負(fù)載均衡資源調(diào)度批量啟動虛擬機(jī)時,在資源池I中有3個云主機(jī),要啟動3臺虛擬機(jī)vm7、vm8、vm9,在啟動過程中可能出現(xiàn)3臺虛擬機(jī)均啟動在云主機(jī)I上的情況,因?yàn)樵趩觱m8、vm9的時候,vm7還沒有進(jìn)入啟動狀態(tài),導(dǎo)致后面調(diào)度執(zhí)行判斷的時候,始終認(rèn)為云主機(jī)I上運(yùn)行虛擬機(jī)個數(shù)最少,最終結(jié)果是所有虛擬機(jī)都啟動在同一個云主機(jī)上,顯然并沒有達(dá)到負(fù)載均衡的目標(biāo)。
[0006]由此可見,在現(xiàn)有技術(shù)中,資源調(diào)度無法很好地處理批量啟動虛擬機(jī)的并發(fā)事件。批量啟動虛擬機(jī)一般會同時創(chuàng)建多個異步任務(wù),這就導(dǎo)致批量啟動多臺虛擬機(jī)時可能都選擇了相同的目標(biāo)云主機(jī),造成云主機(jī)瞬間負(fù)載過大,可能會有一些虛擬機(jī)因?yàn)橘Y源不足無法啟動,同時也無法更好的分配使用云主機(jī)資源。
[0007]針對相關(guān)技術(shù)中的上述問題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0008]針對相關(guān)技術(shù)中的上述問題,本發(fā)明提出一種虛擬機(jī)的資源分配方法和裝置,能夠使云主機(jī)資源得到均衡分配。
[0009]本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
[0010]根據(jù)本發(fā)明的一個方面,提供了一種虛擬機(jī)的資源分配方法。
[0011]該資源分配方法包括:
[0012]獲取云主機(jī)列表中每個云主機(jī)的正在運(yùn)行虛擬機(jī)的個數(shù)X和鎖定虛擬機(jī)的個數(shù)Y,其中,鎖定虛擬機(jī)為正在啟動的虛擬機(jī);
[0013]根據(jù)云主機(jī)的預(yù)定分配需求對云主機(jī)列表中的每個云主機(jī)按照正在運(yùn)行虛擬機(jī)的個數(shù)X和鎖定虛擬機(jī)的個數(shù)Y之和X+Y進(jìn)行排序;
[0014]從排序后的云主機(jī)列表中選擇最優(yōu)云主機(jī)并分配虛擬機(jī)至最優(yōu)云主機(jī)。
[0015]其中,在獲取云主機(jī)列表中每個云主機(jī)的鎖定虛擬機(jī)個數(shù)Y時,可通過查詢預(yù)定的資源緩沖區(qū)中是否包含該云主機(jī),在包含該云主機(jī)的情況下,獲取該云主機(jī)的鎖定虛擬機(jī)個數(shù)Y,其中,預(yù)定的資源緩沖區(qū)用于存儲云主機(jī)與該云主機(jī)鎖定虛擬機(jī)的個數(shù)的對應(yīng)關(guān)系O
[0016]此外,該資源分配方法進(jìn)一步包括:在根據(jù)云主機(jī)的預(yù)定分配需求對云主機(jī)列表中的每個云主機(jī)按照正在運(yùn)行虛擬機(jī)的個數(shù)X和鎖定虛擬機(jī)的個數(shù)Y之和X+Y進(jìn)行排序后,將云主機(jī)列表中每個云主機(jī)的正在運(yùn)行虛擬機(jī)的個數(shù)X和鎖定虛擬機(jī)的個數(shù)Y之和X+Y與該云主機(jī)能夠運(yùn)行虛擬機(jī)的最大個數(shù)進(jìn)行比較;
[0017]將云主機(jī)列表中的正在運(yùn)行虛擬機(jī)的個數(shù)X和鎖定虛擬機(jī)的個數(shù)Y之和X+Y小于該云主機(jī)能夠運(yùn)行虛擬機(jī)的最大個數(shù)的云主機(jī)的鎖定虛擬機(jī)的個數(shù)Y+1。
[0018]其中,在將云主機(jī)列表中的正在運(yùn)行虛擬機(jī)的個數(shù)X和鎖定虛擬機(jī)的個數(shù)Y之和X+Y小于該云主機(jī)能夠運(yùn)行虛擬機(jī)的最大個數(shù)的云主機(jī)的鎖定虛擬機(jī)的個數(shù)Y+1時,可將資源緩沖區(qū)中該云主機(jī)的鎖定虛擬機(jī)的個數(shù)Y+1。
[0019]另外,該資源分配方法進(jìn)一步包括:在將云主機(jī)列表中每個云主機(jī)的正在運(yùn)行虛擬機(jī)的個數(shù)X和鎖定虛擬機(jī)的個數(shù)Y之和X+Y與該云主機(jī)能夠運(yùn)行虛擬機(jī)的最大個數(shù)進(jìn)行比較之前,查詢預(yù)定的資源緩沖區(qū)中是否包含該云主機(jī),在不包含該云主機(jī)的情況下,將該云主機(jī)添加至預(yù)定的資源緩沖區(qū)。
[0020]此外,該資源分配方法進(jìn)一步包括:
[0021 ]將云主機(jī)列表中的正在運(yùn)行虛擬機(jī)的個數(shù)X和鎖定虛擬機(jī)的個數(shù)Y之和X+Y小于該云主機(jī)能夠運(yùn)行虛擬機(jī)的最大個數(shù)的云主機(jī)構(gòu)成新的云主機(jī)列表;
[0022]從排序后的云主機(jī)列表中選擇最優(yōu)云主機(jī)并分配虛擬機(jī)至最優(yōu)云主機(jī)包括:從新的云主機(jī)列表中選擇最優(yōu)云主機(jī)并分配虛擬機(jī)至最優(yōu)云主機(jī)。
[0023]可選的,在從排序后的云主機(jī)列表中選擇最優(yōu)云主機(jī)時,可從云主機(jī)列表中查詢是否存在預(yù)定最優(yōu)Ζ5Γ主機(jī);
[0024]在存在預(yù)定最優(yōu)云主機(jī)的情況下,將云主機(jī)列表中該預(yù)定最優(yōu)云主機(jī)作為最優(yōu)云主機(jī);
[0025]在不存在預(yù)定最優(yōu)云主機(jī)的情況下,將排序后的云主機(jī)列表中排序第一的云主機(jī)作為最優(yōu)云主機(jī)。
[0026]另外,該資源分配方法進(jìn)一步包括:
[0027]將云主機(jī)列表中未被選擇的云主機(jī)在資源緩沖區(qū)中該云主機(jī)的鎖定虛擬機(jī)的個數(shù) Y-1。
[0028]此外,云主機(jī)的預(yù)定分配需求包括以下至少之一:
[0029]用戶需求優(yōu)先;
[0030]負(fù)載均衡優(yōu)先;
[0031]綠色節(jié)能優(yōu)先。
[0032]根據(jù)本發(fā)明的另一方面,提供了一種虛擬機(jī)的資源分配裝置。
[0033]該資源分配裝置包括:
[0034]獲取模塊,用于獲取云主機(jī)列表中每個云主機(jī)的正在運(yùn)行虛擬機(jī)的個數(shù)X和鎖定虛擬機(jī)的個數(shù)Y,其中,鎖定虛擬機(jī)為正在啟動的虛擬機(jī);
[0035]排序模塊,用于根據(jù)云主機(jī)的預(yù)定分配需求對云主機(jī)列表中的每個云主機(jī)按照正在運(yùn)行虛擬機(jī)的個數(shù)X和鎖定虛擬機(jī)的個數(shù)Y之和X+Y進(jìn)行排序;
[0036]選擇模塊,用于從排序后的云主機(jī)列表中選擇最優(yōu)云主機(jī)并分配虛擬機(jī)至最優(yōu)云主機(jī)。
[0037]本發(fā)明通過將云主機(jī)的運(yùn)行虛擬機(jī)個數(shù)和鎖定虛擬機(jī)個數(shù)相加并作出排序處理,從而使得云主機(jī)上的虛擬機(jī)的啟動情況完全與真實(shí)的情況一致,能夠?qū)崿F(xiàn)真正的負(fù)載均衡。
【附圖說明】
[0038]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0039]圖1是根據(jù)現(xiàn)有技術(shù)的批量啟動虛擬機(jī)的結(jié)果示意圖;
[0040]圖2是根據(jù)本發(fā)明實(shí)施例的虛擬機(jī)的資源分配方法的流程圖;
[0041]圖3是根據(jù)本發(fā)明實(shí)施例的資源總緩沖區(qū)的查詢設(shè)置流程圖;
[0042]圖4是根據(jù)本發(fā)明實(shí)施例的獲取最優(yōu)云主機(jī)的流程圖;
[0043]圖5是根據(jù)本發(fā)明實(shí)施例的批量啟動虛擬機(jī)的結(jié)果示意圖;
[0044]圖6是根據(jù)本發(fā)明實(shí)施例的虛擬機(jī)的資源分配裝置的框圖。
【具體實(shí)施方式】
[0045]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0046]根據(jù)本發(fā)明的實(shí)施例,提供了一種虛擬機(jī)的資源分配方法。
[0047]如圖2所示,根據(jù)本發(fā)明實(shí)施例的資源分配方法包括:
[0048]步驟S201,獲取云主機(jī)列表中每個云主機(jī)的正在運(yùn)行虛擬機(jī)的個數(shù)X和鎖定虛擬機(jī)的個數(shù)Y,其中,鎖定虛擬機(jī)為正在啟動的虛擬機(jī);
[0049]步驟S203,根據(jù)云主機(jī)的預(yù)定分配需求對云主機(jī)列表中的每個云主機(jī)按照正在運(yùn)行虛擬機(jī)的個數(shù)X和鎖定虛擬機(jī)的個數(shù)Y之和X+Y進(jìn)行排序;
[0050]步驟S205,從排序后的云主機(jī)列表中選擇最優(yōu)云主機(jī)并分配虛擬機(jī)至最優(yōu)云主機(jī)。
[0051 ]下面結(jié)合具體實(shí)例來對本發(fā)明的上述技術(shù)方案進(jìn)行詳細(xì)闡述。
[0052]在本發(fā)明的資源分配方法中,調(diào)度的資源調(diào)是有范圍的,調(diào)度范圍稱為資源池,資源池是一組云主機(jī)的集合。調(diào)度的資源有一些顯式的參數(shù)要求,包括CPU使用率、內(nèi)存使用率、運(yùn)行的虛擬機(jī)個數(shù),同時,調(diào)度的資源還有一些隱式的需求,如CPU兼容性、存儲、網(wǎng)絡(luò)的要求等。本發(fā)明中的上述云主機(jī)列表是已經(jīng)根據(jù)顯式調(diào)度參數(shù)中CPU使用率、內(nèi)存使用率,以及隱式的CPU兼容性、存儲、網(wǎng)絡(luò)等需求對資源池中的云主機(jī)進(jìn)行了篩選,得到的滿足條件的云主機(jī)列表,本發(fā)明的主要方案是對篩選之后的云主機(jī)進(jìn)行二次處理,得到滿足運(yùn)行的虛擬機(jī)個數(shù)要求,且真正實(shí)現(xiàn)了負(fù)載均衡的最優(yōu)云主機(jī)。篩選過程與本發(fā)明無關(guān),這里不再贅述。下面描述本發(fā)明的上述技術(shù)方案。
[0053]首先,為了實(shí)現(xiàn)上述技術(shù)方案,需要開辟一塊內(nèi)存緩沖區(qū)(即上述資源緩沖區(qū)),用于存放云主機(jī)與鎖定虛擬機(jī)的對應(yīng)關(guān)系,稱之為資源總緩沖區(qū)。對資源總緩沖區(qū)可以進(jìn)行查詢設(shè)置、清除操作。
[0054]查詢設(shè)置函數(shù)為:getAndSet(hyperId ,maxVmNum, runningVmNum):其中,參數(shù)hyperID為云主機(jī)ID,參數(shù)maxVmNum為該云主機(jī)能夠運(yùn)行虛擬機(jī)的最大個數(shù),參數(shù)runn ingVmNum為該云主機(jī)正在運(yùn)行的虛擬機(jī)的個數(shù)。該函數(shù)的工作流程如圖3所示,如果資源總緩沖區(qū)中包含指定云主機(jī)(ID為hyperID的云主機(jī)),則獲取該云主機(jī)鎖定虛擬機(jī)個數(shù)Y,否則將該云主機(jī)添加到資源總緩沖區(qū)(即X = O);然后將鎖定虛擬機(jī)個數(shù)Y和正在運(yùn)行的虛擬機(jī)個數(shù)X (即參數(shù)runn ingVmNum)相加并與該云主機(jī)最大可運(yùn)行虛擬機(jī)個數(shù)(S卩參數(shù)maxVmNum)比較,如果云主機(jī)鎖定虛擬機(jī)個數(shù)和運(yùn)行虛擬機(jī)個數(shù)之和X+Y小于最大可運(yùn)行虛擬機(jī)個數(shù)maxVmNum,則將該云主機(jī)在該資源總緩沖區(qū)的鎖定虛擬機(jī)個數(shù)Y加I,并返回true,否則返回false。
[0055]清除函數(shù):clear(hyperld):用于如果資源總緩沖區(qū)中有指定云主機(jī)(ID為hyperID的云主機(jī)),則獲取該云主機(jī)的鎖定虛擬機(jī)個數(shù),如果鎖定虛擬機(jī)個數(shù)大于I,則將鎖定虛擬機(jī)個數(shù)減I,否則,從資源總緩沖區(qū)中移除該云主機(jī)。
[0056]在開辟了上述資源總緩沖區(qū)(和下文的資源緩沖區(qū)相同)后