3

我有一個PHP應用程序,我在亞馬遜的Web服務上運行。這是一個相對簡單的PHP腳本,它基本上可以簡單地寫入SQL數據庫。這個數據庫是一個Xtra Large RDS實例。 PHP運行在負載平衡器後面的大型EC2實例中。測試亞馬遜EC2,RDS和ELB性能

我想要做的是壓力測試我的腳本,以模擬大約800位用戶同時連接的所有連接(是的,這是真正的估計)。

我聽說過圍攻,但我不確定如何去使用它來測試我的應用程序。如果我嘗試從家裏的連接中運行它,我不確定我的PC/ADSL是否足夠快以創建足夠的流量來模擬攻擊EC2(即RDS)的800個用戶。

建議在另一個區域啓動另一個EC2實例來簡單地「圍攻」我的應用程序?或者可能運行2個EC2實例,每個實例都有400個用戶!?

有人希望這會徹底地測試負載平衡,RDS和EC2s。

有沒有人有這種高併發用戶測試的經驗?

安迪

回答

7

我寫了一個腳本,可能有助於你需要什麼,詳情here,來源here

但首先,實際上,這是最重要的事情,您需要考慮什麼定義了「用戶」。儘管從描述性的角度來看它看起來很明顯,但從技術角度而言,您需要開始談論每秒的請求。

現在,BUG熊已經不存在了,爲了使用ELB對亞馬遜運行負載測試,有幾件事情你可能想知道。

  1. 在這種負載情況下,您很可能需要向亞馬遜詢問「預熱」的事情。上次我研究這個時,我發現ELB本質上是一個運行在簡單實例上的軟件負載均衡器。就像所有的事情一樣,這些實例有一個吞吐量限制,並且往往會在每秒40個請求周圍(非常模糊)發生。他們會自動縮放,但是這種算法不適合加載測試,所以預熱是亞馬遜事先旋轉X ELB的地方,其中X基於您在請求中提供給他們的信息(請參閱我的第一個關於每秒請求的點,而不是用戶)。

  2. ELB可以緩存負載測試中可能導致問題的DNS。如果您的測試工具是基於(如JMeter的)的Java使用:-Dsun.net.inetaddr.ttl = 0

無論你選擇的解決方案,很清楚,你的測試本身可能成爲瓶頸,你應該在指責你正在測試的應用程序之前先檢查它。

3

有許多可用的基於雲的負載測試服務,包括

http://blazemeter.com http://www.neustar.biz/enterprise/web-performance

他們可以得到相當昂貴的,但再次,因此可以旋轉一些ec2實例來測試(加上你的工程時間)。

1

有許多工具可以從雲中生成負載 - 這可能是您想要做的事情(這比設置自己的負載引擎容易得多)。一定要選擇一個能夠處理DNS負載平衡的功能......許多人在測試過程中無法處理新的DNS條目,因此不能準確測試ELB應用程序。以上JMeter的建議有助於,但仍不完全準確,因爲更大比例的VU將在可用時立即切換到新的IP。真正的用戶將繼續使用他們開始使用的IP,只有新用戶纔會去新添加的IP。

我來皮條客我們的軟件,它準確地測試ELB網站 - Web Performance Load Tester。您可以在這裏試用免費版本:http://www.webperformance.com/load-testing/free-load-tester-lite.html,如有任何問題,請隨時與我們聯繫。

1

不要放棄圍攻。它是簡單但非常強大的負載測試工具。基本用法示例可能是:

siege -d 1 -c 10 http://url 

這將模擬10個同時連接(用戶)每隔1秒發出一次請求。 如果您的HTTP請求和響應的大小足夠小,那麼您可能會很好 - 即使使用您的DSL連接。 Siege將向您顯示統計數據,包括平均響應大小,因此您應該能夠輕鬆估算出您的限制。如果您的連接規模很大,使用單獨EC2實例的想法絕對可行。也許一個例子就夠了,但你可能要增加真實乳寧攻城機器上的文件描述符限制(否則你會跑了出來):

sysctl -w fs.file-max=100000 

如果你想與大家能多要測試的網址把它們放在一個文本文件,並告訴攻城用它作爲目標:

siege -d 1 -c 800 -i -t 2m -f urls.txt 

將模擬800個用戶做出請求每1秒2分鐘。網址將從urls.txt文件中隨機選擇(-i)。

我會建議運行幾個測試,逐漸增加連接的數量。

你應該在完成時得到很好的統計數據,或者你用ctrl + C手動終止它。 如果測試產生的流量遠遠超過您目前的流量,您將不得不請求支持AWS的ELB預熱。響應流量峯值,ELB緩慢擴展吞吐量。

默認情況下,Siege使用HTTP 1.1,所以如果您的服務器使用持久連接 - 它將起作用。

+0

偉大的工具!我喜歡你可以延遲每個用戶每秒鐘只有1次,這是我對ab的問題,它只是轟炸了服務器並將其崩潰。 – soote 2015-03-24 00:28:13