一、什麼是彈性擴展
彈性擴展最早是亞馬遜提出的概念,彈性擴展針對的是雲應用本身的一種動態的擴展,在雲應用運行期間實現支撐雲應用的虛擬機器實例個數的動態增加或者減少,通俗點就是在負載較高的時候啟動較多的實例,負載較低的情況停止一些實例。 彈性擴展為雲應用實現了真正意義上的資源按需分配。 彈性擴展並不是簡簡單單的憑空複製,對於應用服務來說,增加伺服器個數只是增加資源計算能力,還需要傳統意義上的「集群」技術將它聯合成一個整體對外提供服務。 對於IaaS來說,它不會因為特殊的商務規則對應用進行限制,導致應用做相應的更改,這違背了它產生的本意,它更多的是關注整體行為,無論什麼應用都可以在其運行,並享受它一致各種服務。 由此可見彈性擴展中對應用部署所需的虛擬機器是預先創建的,並由應用實施者通過內網組建一個集群,這些虛擬機器放入到一個pool中,按照策略進行啟動所需的虛擬機器實例,說白了IaaS管理服務只關注池裡面有多少虛擬機器, 然後按策略停止或者啟動這些虛擬機器。
二、彈性擴展實現
首先雲使用者通過管理portal,可以定義一個pool,將需要實現彈性擴展的虛擬機器加入到pool,原則上是一個應用對應一個pool,並設置彈性擴展策略,主要是IaaS管理服務調度演算法涉及的參數有關,如下所示:
Pool max size:這與雲使用者加入的虛擬機器個數有關;
Pool min size:該值缺省為1,表示最小運行情況下的虛擬機器個數;
High load limit:表示整體運行負載超過該值時,就需要投運新虛擬機器;
Lower load limit:表示整體運行負載低於該值時,就需要停運虛擬機器,將虛擬機器放入到閒置的pool中。
Step start count:該值缺省為1,表示每次投運的個數
Step stop count: 該值缺省為1,表示每次停運的個數
然後對於雲使用者來說還需要一個動態監控的介面,監控該pool動態變化。
對於IaaS平臺來說要實現彈性擴展,首先要實現性能監控模組,對池中的投運的虛擬機器進行性能監控,根據監控資料,即時的cpu利用率計算整體運行負載,然後按策略進行調度。 下面我講詳細的講解彈性擴展演算法。
三、 彈性擴展演算法
假設前提:
閒置池:freePool={V1,V2,......}
投運池:usedPool={...}
池中虛擬機器:V1,V2,......
物理機:P1,P2,......,Pn
按照物理機性能設置每個物理機權值:LD1,LD2,......,LDn
平均化計算週期:T
High load limit:HLL
Lower load limit:LLL
彈性計算資源調度週期:T1
演算法描述:
1、 平均法去掉暫態尖峰值計算所有物理機,以及虛擬機器某段時長的平均cpu利用率;
注:平均法要防止因為暫態峰值引起雲計算內部頻繁調度,導致雲計算內部的「顫動」
計算方式如下:每個資源(物理機或者虛擬機器)擁有一個佇列,保存T週期的m個效能資料,每次新的監控資料cpu利用率進入後,將最久的監控資料移出,將新資料加入到佇列裡,計算佇列中剩餘值,計算公式如下:資源負載=(SUMi-1+ DATAnew-DATAlast)/m;
注:如果佇列中沒有保存一個T週期的資料不做計算,不列入本次計算範圍內。
2、 計算所有投運虛擬機器的實際佔有負載:
計算方式:虛擬機器的性能監控資料代表的相對計算能力,因此需要通過物理機效能資料折算成絕對的負載值,計算公式如下:
其中Vcpu表示虛擬創建時cpu個數;
表示虛擬機器相對負載;
該計算公式表示該物理機上運行m個虛擬機器
3、 選擇一個需要調度的pool,綜合虛擬機器負載計算整個投運的所用虛擬機器平均負載:
其計算公式如下:
m表示該pool中已投運的虛擬機器個數。
4、 計算該pool中是否需要投運或者停運:
n Pool整體負載〉HLL,表示需要投運新的虛擬機器,從free pool中選擇Step start count個虛擬加入到待啟動佇列中,如果free pool中虛擬機器個數不足,則將剩餘的全部取出。
n Pool整體負載<LLL,表示需要停運新的虛擬機器,
如果Pool中虛擬機器個數-Step stop count>=Pool min size,則從used pool中選擇Step stop count個負載最低的虛擬機器加入到待停止佇列中;
如果Pool中虛擬機器個數-Step stop count<Pool min size,則從used pool中選擇Pool中虛擬機器個數- Pool min size個負載最低的虛擬機器加入到待停止佇列中;
n 否則:該虛擬機器不做任何調度
5、 從待啟動中依次啟動虛擬機器或則從待停止佇列中依次停止虛擬機器,並清除pool中所有虛擬機器T1週期的資料,防止該pool在T1週期不被再次調度。
6、 依次從poollist取一個pool,按照3-5進行操作。
演算法其他說明:
該演算法只關注對於pool需要啟動多少個虛擬機器,在理論上虛擬機器多少代表其應用在IaaS上佔有的計算能力,從而改善應用性能,並使應用按需被分配資源。 但實際資源配置還包含了很多因素,例如物理機資源群還剩餘多少計算資源,資源利用是否被均分到各個物理機上(這個需要資源均衡的智慧遷移進行支撐)。