互聯(lián)網(wǎng)架構(gòu),如何進(jìn)行容量設(shè)計(jì)?
一、需求緣起
互聯(lián)網(wǎng)公司,這樣的場(chǎng)景是否似曾相識(shí):
場(chǎng)景一:pm要做一個(gè)很大的運(yùn)營(yíng)活動(dòng),技術(shù)老大殺過(guò)來(lái),問(wèn)了兩個(gè)問(wèn)題:
(1)機(jī)器能抗住么?
(2)如果扛不住,需要加多少臺(tái)機(jī)器?
場(chǎng)景二:系統(tǒng)設(shè)計(jì)階段,技術(shù)老大殺過(guò)來(lái),又問(wèn)了兩個(gè)問(wèn)題:
(1)數(shù)據(jù)庫(kù)需要分庫(kù)么?
(2)如果需要分庫(kù),需要分幾個(gè)庫(kù)?
技術(shù)上來(lái)說(shuō),這些都是系統(tǒng)容量預(yù)估的問(wèn)題,容量設(shè)計(jì)是架構(gòu)師必備的技能之一。常見(jiàn)的容量評(píng)估包括數(shù)據(jù)量、并發(fā)量、帶寬、CPU/MEM/DISK等,今天分享的內(nèi)容,就以【并發(fā)量】為例,看看如何回答好這兩個(gè)問(wèn)題。
二、容量評(píng)估的步驟與方法
【步驟一:評(píng)估總訪問(wèn)量】
如何知道總訪問(wèn)量?對(duì)于一個(gè)運(yùn)營(yíng)活動(dòng)的訪問(wèn)量評(píng)估,或者一個(gè)系統(tǒng)上線后PV的評(píng)估,有什么好的方法?
答案是:詢問(wèn)業(yè)務(wù)方,詢問(wèn)運(yùn)營(yíng)同學(xué),詢問(wèn)產(chǎn)品同學(xué),看對(duì)運(yùn)營(yíng)活動(dòng)或者產(chǎn)品上線后的預(yù)期是什么。
舉例:58要做一個(gè)APP-push的運(yùn)營(yíng)活動(dòng),計(jì)劃在30分鐘內(nèi)完成5000w用戶的push推送,預(yù)計(jì)push消息點(diǎn)擊率10%,求push落地頁(yè)系統(tǒng)的總訪問(wèn)量?
回答:5000w*10% = 500w
【步驟二:評(píng)估平均訪問(wèn)量QPS】
如何知道平均訪問(wèn)量QPS?
答案是:有了總量,除以總時(shí)間即可,如果按照天評(píng)估,一天按照4w秒計(jì)算。
舉例1:push落地頁(yè)系統(tǒng)30分鐘的總訪問(wèn)量是500w,求平均訪問(wèn)量QPS
回答:500w/(30*60) = 2778,大概3000QPS
舉例2:主站首頁(yè)估計(jì)日均pv 8000w,求平均訪問(wèn)QPS
回答:一天按照4w秒算,8000w/4w=2000,大概2000QPS
提問(wèn):為什么一天按照4w秒計(jì)算?
回答:一天共24小時(shí)*60分鐘*60秒=8w秒,一般假設(shè)所有請(qǐng)求都發(fā)生在白天,所以一般來(lái)說(shuō)一天只按照4w秒評(píng)估
【步驟三:評(píng)估高峰QPS】
系統(tǒng)容量規(guī)劃時(shí),不能只考慮平均QPS,而是要抗住高峰的QPS,如何知道高峰QPS呢?
答案是:根據(jù)業(yè)務(wù)特性,通過(guò)業(yè)務(wù)訪問(wèn)曲線評(píng)估
舉例:日均QPS為2000,業(yè)務(wù)訪問(wèn)趨勢(shì)圖如下圖,求峰值QPS預(yù)估?

回答:從圖中可以看出,峰值QPS大概是均值QPS的2.5倍,日均QPS為2000,于是評(píng)估出峰值QPS為5000。
說(shuō)明:有一些業(yè)務(wù)例如“秒殺業(yè)務(wù)”比較難畫(huà)出業(yè)務(wù)訪問(wèn)趨勢(shì)圖,這類(lèi)業(yè)務(wù)的容量評(píng)估不在此列。
【步驟四:評(píng)估系統(tǒng)、單機(jī)極限QPS】
如何評(píng)估一個(gè)業(yè)務(wù),一個(gè)服務(wù)單機(jī)能的極限QPS呢?
答案是:壓力測(cè)試
在一個(gè)服務(wù)上線前,一般來(lái)說(shuō)是需要進(jìn)行壓力測(cè)試的(很多創(chuàng)業(yè)型公司,業(yè)務(wù)迭代很快的系統(tǒng)可能沒(méi)有這一步,那就悲劇了),以APP-push運(yùn)營(yíng)活動(dòng)落地頁(yè)為例(日均QPS2000,峰值QPS5000),這個(gè)系統(tǒng)的架構(gòu)可能是這樣的:

(1)訪問(wèn)端是APP
(2)運(yùn)營(yíng)活動(dòng)H5落地頁(yè)是一個(gè)web站點(diǎn)
(3)H5落地頁(yè)由緩存cache、數(shù)據(jù)庫(kù)db中的數(shù)據(jù)拼裝而成
通過(guò)壓力測(cè)試發(fā)現(xiàn),web層是瓶頸,tomcat壓測(cè)單機(jī)只能抗住1200的QPS(一般來(lái)說(shuō),1%的流量到數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)500QPS還是能輕松抗住的,cache的話QPS能抗住,需要評(píng)估cache的帶寬,假設(shè)不是瓶頸),我們就得到了web單機(jī)極限的QPS是1200。一般來(lái)說(shuō),線上系統(tǒng)是不會(huì)跑滿到極限的,打個(gè)8折,單機(jī)線上允許跑到QPS1000。
【步驟五:根據(jù)線上冗余度回答兩個(gè)問(wèn)題】
好了,上述步驟1-4已經(jīng)得到了峰值QPS是5000,單機(jī)QPS是1000,假設(shè)線上部署了2臺(tái)服務(wù),就能自信自如的回答技術(shù)老大提出的問(wèn)題了:
(1)機(jī)器能抗住么? -> 峰值5000,單機(jī)1000,線上2臺(tái),扛不住
(2)如果扛不住,需要加多少臺(tái)機(jī)器? -> 需要額外3臺(tái),提前預(yù)留1臺(tái)更好,給4臺(tái)更穩(wěn)
除了并發(fā)量的容量預(yù)估,數(shù)據(jù)量、帶寬、CPU/MEM/DISK等評(píng)估亦可遵循類(lèi)似的步驟。
三,總結(jié)
互聯(lián)網(wǎng)架構(gòu)設(shè)計(jì)如何進(jìn)行容量評(píng)估:
【步驟一:評(píng)估總訪問(wèn)量】 -> 詢問(wèn)業(yè)務(wù)、產(chǎn)品、運(yùn)營(yíng)
【步驟二:評(píng)估平均訪問(wèn)量QPS】-> 除以時(shí)間,一天算4w秒
【步驟三:評(píng)估高峰QPS】 -> 根據(jù)業(yè)務(wù)曲線圖來(lái)
【步驟四:評(píng)估系統(tǒng)、單機(jī)極限QPS】 -> 壓測(cè)很重要
【步驟五:根據(jù)線上冗余度回答兩個(gè)問(wèn)題】 -> 估計(jì)冗余度與線上冗余度差值
個(gè)人一些經(jīng)驗(yàn)分享,大伙輕拍,有更好的建議歡迎回復(fù),下篇文章會(huì)將好的經(jīng)驗(yàn)share給更多的同學(xué)。
【本文為51CTO專(zhuān)欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】