本地和遠端執行ab有什麼區別?
我正在用 apache ab 對我的站點進行基準測試,我注意到在伺服器上執行 ab 和在客戶端機器上遠端執行 ab 時響應時間有很大差異。
那麼在伺服器上執行ab和遠端執行ab最大的區別是什麼。時間是在網路運輸上消耗的嗎?
延遲和網路容量。
我們寫了一篇關於使用 Siege(與 AB 非常相似)進行並發/負載測試的好文章,特別提到了本地與遠端測試。
你可以在這裡閱讀完整版:
測試遠端伺服器幾乎沒有意義,因為它是一個並發測試(即可以重複滿足多少請求),直接的瓶頸是兩台機器之間的網路連接。延遲和 TCP/IP 成本使測試遠端站點完全沒有意義,兩台伺服器之間的對等點之間最輕微的網路擁塞將立即顯示性能下降。因此,真正開始發揮作用的是 TCP 3 次握手可以多快完成——被測試的伺服器可以提供動態頁面或靜態 0 字節文件——你可以看到完全相同的性能速率,如連通性是瓶頸。
我們可以使用簡單的 ping 來顯示這一點。我們的數據中心位於英國曼徹斯特,因此我們將嘗試 ping 英國的伺服器,然後嘗試 ping 美國的伺服器並顯示差異。兩台伺服器都通過 100Mbit 連接連接到網際網路。
從英國ping到英國
[~]$ ping www.bytemark.co.uk -c4 PING www.bytemark.co.uk (212.110.161.177) 56(84) bytes of data. 64 bytes from extapp-front.bytemark.co.uk (212.110.161.177): icmp_seq=1 ttl=57 --- www.bytemark.co.uk ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 2.515/2.641/2.869/0.142 mstime=2.86 ms
從英國ping到美國
[~]$ ping www.mediatemple.net -c 4 PING www.mediatemple.net (64.207.129.182) 56(84) bytes of data. 64 bytes from mediatemple.net (64.207.129.182): icmp_seq=1 ttl=49 time=158 ms --- www.mediatemple.net ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 154.155/155.282/158.321/1.802 ms
您可以立即看到性能上的差異。對於從英國到美國的單個 TCP/IP 連接,它需要 156 毫秒,是英國伺服器的 62 倍。這意味著,在您嘗試任何事情之前,您在 Siege 上在一秒鐘內可以實現的最大吞吐量將是每秒大約 6 個事務,這僅是由於延遲。
讓我們來測試一下……
[~]$ siege http://www.wiredtree.com/images/arrow.gif -c 1 -t 10S -b ** SIEGE 2.66 ** Preparing 1 concurrent users for battle. The server is now under siege... Lifting the server siege...done. Transactions: 50 hits Availability: 100.00 % Elapsed time: 9.89 secs Data transferred: 0.00 MB Response time: 0.20 secs Transaction rate: 5.06 trans/sec Throughput: 0.00 MB/sec Concurrency: 1.00 Successful transactions: 50 Failed transactions: 0 Longest transaction: 0.20 Shortest transaction: 0.19
略低於 6 TPS 的預測數字。但不幸的是,情況總是如此。即使遠端伺服器有更多的能力,延遲總是會破壞任何並發測試。讓我們在美國的伺服器上重複完全相同的測試,看看延遲是如何真正影響測試的。首先快速ping,
[~]$ ping www.mediatemple.net -c 4 PING www.mediatemple.net (64.207.129.182) 56(84) bytes of data. 64 bytes from mediatemple.net (64.207.129.182): icmp_seq=1 ttl=52 time=62.8 ms --- www.mediatemple.net ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3067ms rtt min/avg/max/mdev = 62.872/62.922/62.946/0.029 ms [~]$ siege http://mediatemple.net/_images/searchicon.png -c 1 -t 10S -b ** SIEGE 2.72 ** Preparing 1 concurrent users for battle. The server is now under siege... Lifting the server siege... done. Transactions: 73 hits Availability: 100.00 % Elapsed time: 9.62 secs Data transferred: 0.22 MB Response time: 0.13 secs Transaction rate: 7.59 trans/sec Throughput: 0.02 MB/sec Concurrency: 0.99 Successful transactions: 73 Failed transactions: 0 Longest transaction: 0.14 Shortest transaction: 0.12
所以你有它,我們已經設法將每秒交易量增加一倍,而無需任何伺服器端更改,只需使用更靠近測試站點的伺服器 - 顯示 Siege 對網路延遲的敏感程度。
Siege 將受到測試伺服器和遠端伺服器上可用頻寬的限制。因此,一旦您開始達到更高水平的吞吐量,正在下載的內容量就會開始增加。在我們上面的範例中,10 秒內下載了 0.02MB - 這是一個微小的 0.16 Mbps(兆比特每秒)。但是當你開始增加並髮使用者的數量時,情況可能會發生根本性的變化,並且很容易使網路連接飽和——早在伺服器本身達到其容量之前。
因此,如果您正在測試的伺服器只有 20Mbit 的可用頻寬,您可能會在前面提到的 4Kb 資源上看到最多約 500 個請求/秒。