我想應該不少網站主都會有這樣的疑問,自己的網站需要什麼樣等級的伺服器才能承受網站的流量呢?
到底應該租什麼等級的伺服器呢? 主機出租商的方案所寫的CPU、RAM、月流量到底要挑選哪一個?

Aidec最近也在想這個問題,於是上網搜尋了一番,發現到論壇上的答案幾乎都是[不同情況結果不一樣],不然就只有一些很零散的資訊。

在我閱讀數十篇國內外相關文章,提取有用的部分,並自行實驗後得出一些評估的小心得,供大家參考看看。
當然,的確像論壇所說的一樣,不同的情況環境,結果不一樣。這邊是以一般購物網站、形象網站作為評估。

伺服器評估方式

這邊提供幾種評估方式,例如:需要多少的CPU、記憶體(RAM)、頻寬、在線人數、併發量。

在評估以前我們必須要有幾項參數才能進行計算:

  1. 每日瀏覽量(PV)

  2. 平均瀏覽時間

  3. 平均瀏覽頁數

假如網站是自己的,這幾個參數可以用google analytics 查詢,或者可以用similarweb來查詢。

需要多少記憶體

如果你是用nginx + php-fpm 的話,一個連線約占12~35MB,一般來說佔25MB左右,所以假設有100個連線,就約佔2.5GB的記憶體。(Apache也差不多是這個數字)

除了連線會佔記憶體外,系統本身內建的服務大約會耗50MB的記憶體,其他服務也會消耗記憶體,例如mysql、redis...。如果網站流量太大的話,建議將mysql、redis這類服務單獨使用伺服器,不要跟web server放一起。

圖片最好也不要跟web server放在一起,畢竟一個網站請求最頻繁的就是圖片了。

需要多少頻寬

根據我(很隨意)的統計,一個電商網站瀏覽一頁大概平均需要消耗4MB的流量,一般我們網速都會用Mbps來表示。
1Mbps = 0.125MB/s ,根據這公式可得知,假如你的頻寬有32Mbps的話,可以在1秒內處理一個使用者。

所以假如你想要可以承受100個使用者同時瀏覽的話,需要32*100=3200Mbps的頻寬。

頻寬會影響網站讀取速度,所以頻寬太小的會網站讀起來會越慢,若太多人同時訪問,還會塞車。

一個好的網站,在未開啟快取的情況下,一頁最好不要超過1.5MB。

(優化技巧:可以使用壓縮圖片或快取來降低網站流量,可以通過CDN、圖片分流來加速)

需要多少流量

假如你是租用虛擬主機或VPS,主機商都會告訴你可以用多少流量,例如:100GB/月
這個就很好計算了,根據我們上面的範例電商網站一頁平均消耗4MB流量,也就是說一個訪客瀏覽一頁就消耗4MB的流量,一天有1000個訪客,每人瀏覽3頁的話

每日流量 = 1000(人)*3(頁)*4(MB) = 12000MB (大約12GB)

需要多少併發量

併發量 = 1秒內能同時處理多少個請求

併發量計算公式(80/20法則)

公式論點:一天8成的流量會集中在2成的時間。

舉例:假設一天有1W訪客,每位平均訪問5頁,等於一天有5W PV(page views)(瀏覽量)

接著我們用小學數學將數值套用公式,可以得出

一天集中訪問時間 = 24 * 0.2 = 4.8 小時
(5W(瀏覽量) * 0.8) / 4.8 = 8333 併發/小時 = 2.31 併發/秒

峰值併發約為平常的3倍 (根據經驗,實際依系統應用不同)

峰值併發 = 2.31 * 3 = 6.93

假如你的系統有做秒殺活動或是訂票系統、課程報名系統,這種短時間內有大量人湧入的,併發量會遠遠大於此值。
例如:返鄉搶票,可能1分鐘就會有數十萬併發了。

需要多少CPU

我們可以通過以下公式估算CPU的處理能力

每秒最大處理請求 = CPU(核心數) / 平均響應(秒)

平均響應可以用chrome的console Network 去查看響應時間。(如圖)

網站伺服器CPU

平均響應建議可以用10次的平均值來算,應該會比較準確。

實際舉例:

以上圖來看響應時間為64ms,等於 0.064 秒。假設我們的伺服器有2核的話

每秒最大處理請求 = 2 / 0.064 = 31.25

以這公式來看,核心數越多能處理的請求就翻倍,但實際上不是這樣的。
譬如說8個8核的伺服器處理能力,會比1個64核的伺服器能處理更多請求。

根據上一段併發量所推導出 5萬PV 大約需要2.31併發,因此我們可用這樣去回推出我們所需的CPU。

響應時間的決定因素

響應時間的快慢,主要取決於CPU的性能、程式的複雜度(是否需要很多計算、連線資料庫...)

同時在線人數估算

公式: 

同時最大在線人數 = 每秒最大處理請求 * 60 * 每分鐘點擊的頻率

在剛剛我們已經得知如何計算每秒最大處理請求,現在只差每分鐘點擊的頻率公式

每分鐘點擊的頻率 = 平均在線時間 / 平均訪問頁面 

實際舉例:

假設平均在線時間為 5分10秒,平均訪問頁面為4.1頁。

每分鐘點擊頻率 = ( ((5*60)+10)/60 ) / 4.1 = 1.26

我們以剛剛CPU那段的參數套入公式,可得出

同時最大在線人數 = 31.25 * 1.26 *60 = 2362


寫了這麼多想必你大概有個底了,但這些公式實際會受你系統的影響,也會受木桶理論(短板理論)影響。

也就是說,實際性能會以CPU、RAM、頻寬...的某項最低值為主。


補充一點,如果訪問量過多的話,就得用附載均衡的方式,來分散處理。如果都集中一台的話,很容易會造成伺服器崩潰。至於為什麼?大概是伺服器也有情緒吧~ 就像都把工作丟給同一個人做,就算他處理的來,他心情可能也會不好 哈~ (隨便說的)


如果您有更好的評估方式,歡迎告訴我^^



文章轉載或引用,請先告知並保留原文出處與連結!!(單純分享或非營利的只需保留原文出處,不用告知)

原文連結:
https://blog.aidec.tw/post/server-needed-for-your-website