俗話說,"人無遠慮,必有近憂",容量規劃就是"遠慮"。所謂容量規劃,是一個產品滿足用戶目標需求而決定生產能力的過程。當產品發展到一個較為穩定成熟的階段,產品的整體處理能力的把控自然是不可或缺,盡管我們在線下做性能測試能夠獲得一些數據,其參考價值終究有限。但是我們常常被問到以下一些問題而無以應對。
(1)單臺節點到底最大處理能力是多少?
(2)目前線上有多少容量正在被使用?
(3)在一次大促前當前的機器數是否能夠支撐?
(4)什么時候需要增加機器?加多少?
這時候,容量規劃就顯得格外必要了。通過集體組織的容量規劃學習,談談自己對容量規劃的認識和理解。
什么樣的集群適合做容量規劃?只有線性可水平擴展的集群,我們才能通過獲取一個節點的處理能力,計算出集群的處理能力,否則將會費很大物力和人力。
怎么做容量規劃?一句話概括:線上壓測到單節點的某一指標達到臨界值,從而計算出集群的最大處理能力,再根據線上歷史監控獲得當前集群實際運行負荷,通過計算即可求出理論機器。
容量規劃能指導我們做什么?如果計算出集群當前的負荷快達到極限處理能力時,我們可以垂直擴展(加CPU/內存/磁盤)和水平擴展(加機器)兩種方式來增加集群容量。
容量規劃六步走
Step1 明確目標
容量規劃和計算,我們可以用運籌學中的優化命題來定義,優化命題的目標是集群實際負荷 <=集群理想負荷,求解這樣一個不等式優化命題,同時系統需要滿足一定的不等式約束條件。
目標:
約束條件:
當然滿足目標的同時,集群的狀態是受到約束的,資源是不可能無限供應,終會有一項資源會達到臨界值
Step2 了解集群特點
不同的集群在選取容量指標和約束條件時是完全不同的,容量指標在后面會介紹,主要用于衡量集群的處理能力,而約束條件是壓測停止的信號。舉例說明,對于 CPU密集型的集群,我們常常會選擇TPS(每秒處理請求書)作為集群的容量指標來衡量集群的處理能力,而約束條件中則會重點關注CPU的使用率是否率先成為瓶頸;對于存儲型的集群,選擇流量(MB/S)作為容量指標,存儲型的集群TPS依賴于業務數據大小,所有流量更適合作為表征集群的處理能力,而約束條件最先成為瓶頸的是網絡流量或者IO。
而判斷集群式何種類型則可以通過線下的性能測試結果來判斷,線下的性能測試可以作為線上壓測的參考依據。
Step3 選取容量指標
容量指標主要用作衡量服務器的處理能力。容量指標的選取原則:1)線上數據可采集2)能夠客觀反映服務器處理能力
作為容量指標,需要通過線上監控獲取統計數據,其歷史數據用于計算集群的實際負荷,而通過壓測獲得集群的最大處理能力。如上所說,CPU密集型集群常選TPS作為容量指標,而存儲型集群常選流量作為容量指標。
Step4 明確約束條件
約束條件的存在主要是作為線上壓測停止的信號,常常會包括業務指標和資源指標。其中只要有一項指標達到臨界值,則停止壓測將當前容量指標的值作為集群的最大處理能力,例如某項服務質量要求響應時間不超過100ms,那當響應時間達到臨界值時,盡管其它指標并沒有達到極限但是也把此時作為集群最大處理能力。因此服務指標的選取原則:1)業務需求 2)資源使用瓶頸。一則保證產品的服務質量,二來保證系統的安全。
Step5 線上壓測
線上壓測的主要目的主要用于獲取集群的最大處理能力,而對于線上壓測的手段主要介紹三種,針對不同的集群系統架構特點和業務類型選取不同的壓測手段。
模擬請求
模擬請求,即是模擬客戶端的調用方式向壓測服務器發起請求,簡單易操作。
測試數據:可以通過分析線上日志分析,根線上業務配比建立壓測模型,對于HTTP請求業務還有一種簡單的方式,通過提取線上日志數據URL直接用于壓測請求數據。
原文轉自:http://www.uml.org.cn/Test/201406132.asp?artid=1801