??? 云計算平臺中允許客戶依據應用的負載進行云計算資源的彈性動態伸縮(理想的情況是實現一個用多少付費多少的模型,最大限度地降低用戶的運營成本)
??? 在進行討論之前,先對幾個名詞進行定義
?????? 1)客戶:使用云服務的人,在云上部署他的應用
?????? 2)用戶: 使用部署在云上的應用的人
???
Auto-scaling的基礎
??? 云計算的一個關鍵特點是彈性伸縮,但它是一把雙刃劍,因為它允許應用依據負載動態地申請和釋放資源,但是確定一個合適的資源量并不容器,那么需要一個系統自動地依據負載來調整資源量(盡可能得減少人工的干預)。
??? 資源的伸縮主要有兩種:
1)垂直伸縮:簡單的說就是伸縮的時候以虛擬機為單位,直接增加或減少虛擬機的數量
2)水平伸縮:對虛擬機的內部的資源(如CPU、存儲等)進行伸縮
??? 但大多數操作系統在水平擴容時都需要重新啟動虛擬機,因此很多云服務商都只提供垂直伸縮。
??? 那怎么樣來判斷一個一個auto-scaling系統是否合格呢:
1)在客戶(應用的部署者)和終端用戶之間的Service Level Agreement (SLA),比如說滿足一定的響應時間
2)在云服務提供商和客戶之間的SLA,比如說滿足云平臺的一定的資源利用率
??? Auto-scaling的實現主要面臨幾個問題:
1)Under-provisioning:即應用沒有獲得足夠的資源來應對用戶的請求,不能滿足SLA,需要增加更多的資源
2)Over-provisioning:即應用在滿足SLA后還有過多的資源,客戶付出了不必要的成本
3)Oscillation:當伸縮的動作執行的過快時,可能會出現資源波動的現象(剛剛擴容又縮容)。可以伸縮后添加一個懶惰時間(此時不進行任何伸縮擴容)來避免波動
???? Auto-scalin系統一般包含四個部分:
?????????????? 1)Monitoring:監控系統主要是獲得系統和應用的狀態信息
???????????????????????? 硬件信息: CPU利用率,存儲利用率,網絡接口
???????????????????????? 操作系統進程:缺頁,CPU調度
???????????????????????? 負載均衡: 請求訪問隊伍的長度,當前對話的進程數量,拒絕請求的數量
?????????????? 2)Analysis: 分析監控系統的信息估計未來的資源使用情況和需求
? ? ?reactive:使用從監控系統獲得的最后的系統值進行判斷。不做任何預測,僅僅當檢測到系統負載變化時才會做出響應。難以應對突發的負載
? ? ? ? ? ? proactive:著重通過預測未來的需求來完成對資源的分配
?????????????? 3)Planning: 制定一個合適的資源伸縮計劃
???????????????4)Execution:執行
?
?Auto-scaling技術
??????? 1? static threshold-based rule
云服務提供商大多僅僅使用基于閾值的規則提供 reactive的自動伸縮 。這種方法是預先設定一個閾值,當系統狀態到達這個閾值時,就會觸發自動伸縮的功能。
這種auto-scaling方法因其比較簡單,這對于客戶來說很有吸引力。但是它也有缺點:第一是為應用設定一個閾值需要對應用負載的趨勢有一個很深的認識,第二在面對突發的負載時,這種方法的時效性比較低,反應比較慢
基于閾值的規則一般會設定最少兩個規則,一個用來擴容,一個用來縮容,例如:
例子中x是系統狀態的值,thrU是設置的上閾值,thrL是設置的下閾值,durU的時間是在遇到這種情況是多少秒內會觸發,S是每次擴容的值,inU是這伸縮執行后多少時間內不進行任何伸縮(用于防止波動)
舉一個簡單例子是,當平均的CPU資源利用率超過70%的時間持續超過5分鐘時,擴充兩個虛擬機,并且在接下來的10分鐘內不做任何伸縮
?
? ? ? ? 2? control theory
控制變量u(例如 虛擬機的數量)目標系統的輸入,受控變量y(如CPU負載)是目標系統的輸出。
控制器通過調整控制變量u來保持受控變量y接近期望的值或者預先設定?的yref。為了實現這個目的,就要構建輸入與輸出之間的模型,它決定了輸入如何影響輸出的值。
? ? ? ? ? ? ?
常見的控制器有以下幾種:
? 1)Fixed gain controllers(固定增益控制器):這類控制器比較簡單,在確定參數后,參數在控制器運行時間內不變
? 2)Adaptive controllers(自適應控制器):能夠依據條件的變化在線自動調整參數,適用于緩慢變化的負載環境,不適用與突變的環境
? ? ? ? ? ? ? ? ? ? ? 3)Model predictive controllers (模型預測控制器):基于模型和當前的輸出預測系統未來的行為
? ? ? ? ? ? ? ?控制論的效率取決于控制器的種類和目標系統的動態變化,構建一個可靠的映射輸入和輸出變量的模型并不容易
?
? ? ? ? 3? reinforcement? learning
加強學習的方法無需任何先驗的知識,就能夠為每一個應用狀態設計一個最優的伸縮策略。它著重學習機構(例如,auto-scaler)和它的環境(例如應用)之間的直接交互
? ? ? ? ? 其中α是學習率(learning rate),γ 是貼現因子(discount factor)
加強學習的方法主要有幾個缺點:
1)初始的性能很差并且需要很長的訓練時間
比較好的解決方法是在前期先用其他的代替方法來控制auto-scaling的系統,同時加強學習的模型也進行訓練,待訓練好時再使用加強學習 模型控制系統
? ? ? ? ? ? ? ? ? ? ?2)需要很大的狀態空間,在最簡單的形式中,查找表用于為每一個可能的狀態動作對存儲一個單獨的值,這些狀態是成指數級增長的,所以當查找表很大時,每一次訪問都可能需要很長的時間
用查找表來表示Q函數并不高效,可以使用其他非線性的函數(如?neural networks, CMACs (Cerebellar Model Articulation Controllers), regression trees, support vector machines)
3)最佳模型的適應性比較差,加強學習方法能夠很好地解決相對緩和的變化,但是對于突發的負載變化表現并不好,因為它需要尋找新的最佳策略
?
? ? ? ? 4? queuing theory
排隊論可以用來估計系統的性能指標(例如隊伍的長度、請求的平均等待時間),可以分為簡單的隊列模型和復雜的隊列網絡
排隊論的基礎機構如上圖所示,請求到達系統后將入隊,直到它們執行完才出隊。
在一個標準的auto-scaling系統中,一個隊伍可由A/B/C/K/N/D(如:例如: M/M/1/?∞/?∞/FIFO?)來表示,其中K,N,D是可選的
A:Inter-arrival time distribution(到達時間間隔分布)
B:?Service time distribution. (服務時間分布)
常見的A和B的值有:M,D,G
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? M:表示Markovian(馬爾可夫鏈),它指的是一個泊松分布的過程,它的特征是一個參數單位λ (表示每個時間單位到達的請求),因此到達時間或者服務時間將服從指數分布
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? D:表示為一個固定的值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? G:對應于具有已知參數的一般分布
? ?C:Number of servers.(服務器數量)
? ? ? ? ? ? ? ? K:System capacity or queue length(系統能力或隊伍長度):即系統最多能服務的用戶數量
? ? ? ? ? ? ? ? ? ? ? ? ? ? N:?Calling population (要求服務的總體)
? ? ? ? D:?Service discipline or priority order(服務紀律或優先次序): 先來先服務……
? ?隊列模型通常被用在一些固定的系統結構中,因為任何系統結構或者參數需求的變化都需要重新構建模型。此外隊列模型是一個分析工具,它還需要另外的一個組件來完成auto-scale。
? ? ? ? ? ? ? ? ? ? 總的來說排隊論在設計一個通用的auto-scaling系統時可能并不是一個最好的選擇。
?
?????? ?5? timeseries analysis
時間序列是在一個固定的時間間隔(如每分鐘)采集系統的性能指標(如平均CPU負載)。它得到的結果X包含一組w(時間序列的長度)個觀察值
時間序列方法可以基于最新的q(滑動窗口值,q<=w)預測未來的時間序列的值。時間序列分析技術嘗試識別時間序列所遵循的模式,然后使用這種模式來推斷未來的價值。
時間序列模式可以用四種特性來描述:趨勢(trend),季節性(seasonality),周期性(cyclical),隨機性(randomness)。系統性能指標總體的趨勢(上升或者下降)的變化會在一個時間序列上重復出現(例如,日、周、月或季節)。趨勢主要表明系統性能指標的總體變化,季節性和周期性分別決定在一個特定的時間點上短期和長期的峰值。
?
?
?參考文章:A Review of Auto-scaling Techniques for Elastic Applications in Cloud Environments