作者:趙磊
你想建設一個能承受500萬PV/每天的網站嗎? 500萬PV是什麼概念?伺服器每秒要處理多少個請求才能應對?如果計算呢?
PV是什麼:
PV是page view的簡寫。PV是指頁面的通路次數,每打開或重新整理一次頁面,就算做一個pv。
計算模型:
每台伺服器每秒處理請求的數量=((80%*總PV量)/(24小時*60分*60秒*40%)) / 伺服器數量 。
其中關鍵的參數是80%、40%。表示一天中有80%的請求發生在一天的40%的時間内。24小時的40%是9.6小時,有80%的請求發生一天的9.6個小時當中(很适合網際網路的應用,白天請求多,晚上請求少)。
簡單計算的結果:
((80%*500萬)/(24小時*60分*60秒*40%))/1 = 115.7個請求/秒
((80%*100萬)/(24小時*60分*60秒*40%))/1 = 23.1個請求/秒
初步結論:
現在我們在做壓力測試時,就有了标準,如果你的伺服器一秒能處理115.7個請求,就可以承受500萬PV/每天。如果你的伺服器一秒能處理23.1個請求,就可以承受100萬PV/每天。
留足餘量:
以上請求數量是均勻的分布在白天的9.6個小時中,但實際情況并不會這麼均勻的分布,會有高峰有低谷。為了應對高峰時段,應該留一些餘地,最少也要x2倍,x3倍也不為過。
115.7個請求/秒 *2倍=231.4個請求/秒
115.7個請求/秒 *3倍=347.1個請求/秒
23.1個請求/秒 *2倍=46.2個請求/秒
23.1個請求/秒 *3倍=69.3個請求/秒
最終結論:
如果你的伺服器一秒能處理231.4--347.1個請求/秒,就可以應對平均500萬PV/每天。
如果你的伺服器一秒能處理46.2--69.3個請求,就可以應對平均100萬PV/每天。
說明:
這裡說明每秒N個請求,就是QPS。因為我關心的是應用程式處理業務的能力。
實際經驗:
1、根據實際經驗,采用兩台正常配置的機架式伺服器,配置是很常見的配置,例如一個4核CPU+4G記憶體+伺服器SAS硬碟。
2、個人武斷的認為在伺服器CPU領域Intel的CPU要優于AMD的CPU,有反對的就反對吧,我都說我武斷了(請看CPU性能比較),不要太相信AMD的廣告,比較CPU性能簡單辦法就是比價格,不要比頻率與核心數,價格相差不多的性能也相差不多。
3、硬碟的性能很重要,由其是資料庫伺服器。一般的伺服器都配1.5萬轉的SAS硬碟,進階一點的可以配SSD固态硬碟,性能會更好。最最最最重要的名額是“随機讀寫性能”而不是“順序讀寫性能”。(本例還是配置最常見的1.5萬轉的SAS硬碟吧)
4、一台伺服器跑Tomcat運作j2ee程式,一台伺服器跑MySql資料庫,程式寫的中等水準(這個真的不好量化),是論壇類型的應用(總有回帖,不太容易做緩存,也無法靜态化)。
5、以上軟硬體情況下,是可以承受100萬PV/每天的。(已留有餘量應對突然的通路高峰)
注意機房的網絡帶寬:
有人說以上條件我都滿足了,但實際性能還是達不到目标。這時請注意你對外的網絡的帶寬,在國内伺服器便宜但帶寬很貴,很可能你在機房是與大家共享一條100M的光纖,實際每個人可分到2M左右帶寬。再好一點5M,再好一點雙線機房10M獨享,這已經很貴了(北京價格)。
一天總流量:每個頁面20k位元組*100萬個頁面/1024=19531M位元組=19G位元組,
19531M/9.6小時=2034M/小時=578K位元組/s 如果請求是均勻分布的,需要5M(640K位元組)帶寬(5Mb=640KB 注意大小寫,b是位,B是位元組,差了8倍),但所有請求不可能是均勻分布的,當有高峰時5M帶寬一定不夠,X2倍就是10M帶寬。10M帶寬基本可以滿足要求。
以上是假設每個頁面20k位元組,基本不包含圖檔,要是包含圖檔就更大了,10M帶寬也不能滿足要求了。你自已計算吧。
(全文完)