架構與思維:設計容量,到底有多重要 ?
背景
單位每年都會舉行運動會,有一個2000m長跑的項目,大約每年報名人員為男選手40人,女選手20人,只有一條橡膠跑道。一次比賽10人齊跑,所以至少需要6場比賽。
2000米的完成時間要求是20分鐘,超過20分鐘不計數,所以比賽耗時我們計算為20分鐘,加上比賽前的動員組織,比賽後的清場,我們假定每場比賽耗時30分鐘。
現在我們預估下耗時:
1、60人/10人每場 = 6場,至少需要舉行6場
2、總耗時 = 6場 * 0.5h = 3h
所以每年把這個比賽安排在下午3點到6點,是最後一個比賽項目,晚上7點舉行頒獎晚會。這個預估容量也算合理。
但是今年比較特別,取消了4000米的長跑,所以2000米報名人員激增50人。時間還是下午3點到6點,
這個就有問題了,最後為了保證晚會的正常進行,一半的人員的比賽時間推遲到另外一周的周末,搞得怨聲四起,大罵舉辦的行政部門不講武德。
這個是我們單位真實的故事,這就是設計容量,當你的業務場景的容量發生了變化時候,沒有預估到他的變化,以及變化可能產生的影響,沒有按照這個影響及時的做調整
(比如將比賽時間提前,拉長整個比賽的過程時間,或者增加比賽跑到,同時進行兩場比賽),就會造成災難。
概念
何為設計容量,從技術上說就是運用一些策略對系統容量進行預估的過程。容量設計是架構師必備的技能之一。
他要求我們分析系統設計容量要求,儘可能給出具體數據描述的:數據量、並發量、頻寬、註冊用戶規模、活躍用戶規模、在線用戶規模、消息長度,圖片大小、網盤空間容量,記憶體CPU容量等。
下面的內容,我們以 並發 為例子,看看看具體的分析過程。
分析過程
理解一些原理
TPS(Transactions Per Second):每秒事務數
QPS(Query Per Second):每秒請求數,QPS其實是衡量吞吐量的一個常用指標,就是說伺服器在一秒的時間內處理了多少個請求。
並發數:並發數是指系統同時能處理的請求數量,這個也是反應了系統的負載能力。
峰值QPS計算:
1、原理:每天80%的訪問集中在20%的時間裡,這20%時間叫做峰值時間
2、公式:( 總PV數 * 80% ) / ( 每天秒數 * 20% ) = 峰值時間每秒請求數(QPS)
PV(Page View):頁面訪問量,即頁面瀏覽量或點擊量,用戶每次刷新即被計算一次
UV(Unique Visitor):獨立訪客,統計1天內訪問某站點的用戶數(以cookie為依據)
吐吞量:吞吐量是指系統在單位時間內處理請求的數量
響應時間(RT):響應時間是指系統對請求作出響應的時間,一般取平均響應時間
QPS(每秒查詢數)、TPS(每秒事務數)是吞吐量的常用量化指標,另外還有HPS(每秒HTTP請求數)。
QPS(TPS)、並發數、響應時間它們三者之間的關係是:
1、QPS(TPS)= 並發數 / 平均響應時間
2、並發數 = QPS * 平均響應時間
系統容量評估時機
主要在三種業務場景下需要及時考慮對系統容量進行評估。
1、臨時的流量變化:比如 618、雙11,新年大促搞活動等場景,預估我們的流量會大漲,甚至到原來的數倍。這時候要做好應對的措施。
2、初始系統容量評估:假設我們開發了某個系統,這個系統初始上線,我們預估他的容量和負載會是多少。
3、容量基數的變化:比如某個系統,他的功能模組越來越多,數據流量越來越大,日活指數越來越高,迎來了第二波的增長曲線。我們原來定好的系統容量漸漸的不滿足我們的需求,這時候我們也要重新評估和擴容。
我們系統容量評估包括數據量、並發量、頻寬、CPU、MEMORY、DISK等。以並發量為案例,我們來說明系統容量評估的方法和步驟。
評估的步驟
1、分析日總訪問量
2、評估平均訪問量QPS
QPS是每秒請求量,假設我們一天正常活動時間一般是11個小時多一點,那一天的時間長度以秒為單位:60*60*11 ≈ 4W, 我們再使用日訪問時間再去除以4W總時間即可.
3、評估高峰區間的QPS

4、評估單實例極限承受的QPS
可以使用壓測(nGrinder 或者 jmeter)方式來獲取單個系統實例的QPS極限值,我們團隊的標準是當請求響應時間超過2S的時候,已經達到了瓶頸值,並影響使用,需要進行優化和擴容。

5、根據線上冗餘度最終確認
案例分析
Pessimism 悲觀
|
30%
|
80
|
Normal 標準
|
40%
|
100
|
Optimism 樂觀
|
30%
|
300
|
總結
系統設計容量評估時機:
1、臨時的流量變化:比如 618、雙11,新年大促搞活動等場景,預估我們的流量會大漲,甚至到原來的數倍。這時候要做好應對的措施。
2、初始系統容量評估:假設我們開發了某個系統,這個系統初始上線,我們預估他的容量和負載會是多少。
3、容量基數的變化:比如某個系統,他的功能模組越來越多,數據流量越來越大,日活指數越來越高,迎來了第二波的增長曲線。我們原來定好的系統容量漸漸的不滿足我們的需求,這時候我們也要重新評估和擴容。
系統設計容量評估的步驟:
1、分析日總訪問量:產品、運營的評估和線上數據的收集
2、評估日平均訪問量QPS:評估運營時間內的平均QPS
3、評估高峰區間的QPS:流量曲線計算 或 28 法則估算
4、性能壓力測試:評估實例能夠承受的極限吞吐量
5、根據線上冗餘度,與實際的差值進行調整,評估出能承載容量的實際結果值
顯然,開頭的運動會如果子報名結束後能夠根據報名的人數對比,重新做容量設計,提早做好準備,情況就不會那麼糟糕。