1. 程式人生 > >Web伺服器的效能估計

Web伺服器的效能估計

在給客戶做方案的時候,或者在軟體設計的時候,或者在軟體測試的時候,我們經常會估算我們的web應用程式的效能。這樣,我們才能正確的設計方案。
如果估算誤差太大,你給客戶的方案是10臺伺服器,實際部署時確需要20臺機器,客戶絕對要瘋了。同樣對我們的程式碼設計和測試方案影響重大。
那麼在頻寬和記憶體都很充足的情況下我們如何大致估算出一個web應用程式的效能呢?

首先,我們看一張Tengine/Nginx的效能圖,根據這個例子來演示一下效能的估算。此圖摘自Tengine & Nginx Benchmark
reuseport

可以看到Tengine的 RPS (requests per seconds)可以達到90000多,併發數大一點的時候RPS會大一點,隨後隨之併發數的增大RPS並沒有隨之增大,而是略微減小。這也可以理解,對大部分web應用來說,連線數增多了,資源佔用和維護的花費也增多了。
作為粗略的估算方法,我們忽略併發數的影響,可以大致Tengine可以達到90000請求每秒。
這個測試是利用apache ab訪問一個gif檔案進行測試的:

1 ab -r -n 10000000 -c 100 http://ip:81/empty.gif

測試環境是:

1 2 3 4 5 6 7 8 CPU: Intel(R)Xeon(R)E5-2650[email protected]2.60GHz 32core Memory: 128GB NIC: Intel Corporation 82599EB 10-Gigabit SFI/SFP+ Network Connection Kernel: Linux-3.17.2.x86_64 Tengine-2.1.0 Nginx-1.6.2 ApacheBench-2.3

這是一臺32個core的伺服器,10G頻寬。

基本上每個core可以達到90000/32 ≈ 2800 請求每秒。 因此我們可以估算8個core的伺服器可以達到2800 * 8 ≈ 22000請求每秒。
當然這些是大致估算,實際RPS並不和core的數量成嚴格正比關係,但在請求之間沒有影響或者影響不大(比如資料庫操作)的情況下誤差應該不是很大。
平均每個請求的花費的時間大約為1000 / 2800 ≈ 0.36ms。

根據上面的估算方法,我們可以得出估算的公式:

  1. 在頻寬和記憶體不是問題的時候,全部的core都用來處理請求的情況下,
    如果一個請求花費的時間是 t毫秒,
    單個core的RPS可以達到 1000 /t
    n個core的RPS可以達到 n * 1000 /t
  2. 在頻寬和記憶體不是問題的時候,全部的core都用來處理請求的情況下,
    如果n
    個core的RPS是 N,
    單個core的RPS是 N /n,
    一個請求的平均花費是 1000 * n / N毫秒。

舉個例子,如果我們的業務比較複雜,每個請求大約需要100ms才能,完成,那麼單個core所能達到的RPS = 1000/100 = 10 requests/s,在32個core的伺服器
上也只能達到32 * 10 =320 requests/s。 如果我們能將業務處理時間壓縮到 10ms, 32個core的伺服器能夠達到3200 requests/s。
因此業務處理的時間和我們伺服器的效能息息相關

原文出處:http://colobu.com/2015/07/01/web-server-performance-estimate/