3

AmazonのWebサービスで実行しているPHPアプリケーションがあります。これは比較的単純なPHPスクリプトであり、基本的にSQLデータベースへの単純な書き込みを行います。このデータベースは、エクストララージRDSインスタンスです。PHPは、ロードバランサーの背後にある大きなEC2インスタンスで実行されています。

私がやりたいのは、スクリプトのストレステストを行って、同時に接続している約800人のユーザーをシミュレートすることです(そうです、それは本当の見積もりです)。

Siegeについて聞いたことがありますが、Siegeを使用してアプリケーションをテストする方法がわかりませんでした。自宅の接続から実行しようとすると、PC / ADSLが、EC2(つまりRDS)を一度に攻撃する800人のユーザーをシミュレートするのに十分なトラフィックを作成するのに十分な速度であるかどうかはわかりません。

アプリケーションを単に「包囲」するために、別のゾーンで別のEC2インスタンスを開始することをお勧めしますか?または、2つのEC2インスタンスを実行していて、どちらもそれぞれ400人のユーザーを包囲しています!?

これにより、負荷分散、RDS、およびEC2が徹底的にテストされることを期待しています。

この種の同時ユーザーテストの経験がある人はいますか?

アンディ

4

4 に答える 4

8

私はあなたが必要とするものを助けるかもしれないスクリプトを書きました、ここで詳細ここでソース。

しかし、まず第一に、そして実際には、これが最も重要なことです。「ユーザー」を定義するものを検討する必要があります。説明的な用語では明白に見えるかもしれませんが、技術的な用語では、1秒あたりのリクエストについて話し始める必要があります。

バグベアが邪魔にならないようになったので、ELBを使用してAmazonに対して負荷テストを実行するには、知っておくべきことがいくつかあります。

  1. この種の負荷では、Amazonに「事前にウォームアップ」するように依頼する必要があります。前回これを調べたところ、ELBは本質的に単純なインスタンスで実行されるソフトウェアロードバランサーであることがわかりました。すべてのものと同様に、これらのインスタンスにはスループット制限があり、1秒あたり約(非常にあいまいな)40リクエストで最大になる傾向があります。それらは自動スケーリングしますが、このアルゴリズムは負荷テストには適していないため、事前ウォーミングはAmazonが事前にX ELBをスピンアップします。ここで、Xはリクエストで提供された情報に基づいています(ユーザーではなく、1秒あたりのリクエストに関する私の最初のポイントを参照してください) )。

  2. ELBはDNSをキャッシュできますが、これは負荷テストで問題を引き起こす可能性があります。テストツールがJavaベース(JMeterなど)の場合は、-Dsun.net.inetaddr.ttl=0を使用します。

どのソリューションを選択する場合でも、テスト自体がボトルネックになる可能性があることに十分注意してください。テストしているアプリケーションのせいにする前に、まずこれを確認する必要があります。

于 2012-08-01T21:16:45.640 に答える
3

利用可能なクラウドベースの負荷テストサービスは多数あります。

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

それらは非常に高価になる可能性がありますが、それでも、テストするために多数のec2インスタンスを起動する可能性があります(さらにエンジニアリング時間)。

于 2012-07-30T18:09:56.453 に答える
2

まだ包囲をあきらめないでください。シンプルですが、非常に強力な負荷テストツールです。基本的な使用例は次のとおりです。

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

これは、約1秒ごとにリクエストを行う10の同時接続(ユーザー)をシミュレートします。HTTPリクエストとレスポンスのサイズが十分に小さい場合は、DSL接続を使用していても問題ない可能性があります。Siegeは平均応答サイズを含む統計を表示するので、制限が何であるかを簡単に見積もることができるはずです。接続のサイズが大きすぎる場合は、個別のEC2インスタンスを使用するというアイデアが確実に機能します。おそらく1つのインスタンスで十分ですが、siegeを実行しているマシンのファイル記述子の制限を増やす必要がある場合があります(そうしないと、ファイル記述子が不足します)。

sysctl -w fs.file-max=100000

複数のURLでテストしたい場合は、それらをテキストファイルに入れて、siegeにターゲットとして使用するように指示できます。

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

1秒ごとに2分間リクエストを行う800人のユーザーをエミュレートします。URLは、urls.txtファイルからランダムに選択されます(-i)。

接続数を徐々に増やしながら、いくつかのテストを実行することをお勧めします。

終了するか、ctrl + Cを使用して手動で終了すると、優れた統計が得られるはずです。テストで現在よりもはるかに多くのトラフィックが生成される場合は、AWSサポートを使用してELBの事前ウォーミングをリクエストする必要があります。ELBは、トラフィックの急増に応じてスループットを拡張するのに時間がかかります。

デフォルトでは、SiegeはHTTP 1.1を使用するため、サーバーが持続的接続を使用している場合は機能します。

于 2013-03-14T20:16:12.307 に答える
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 そして質問があればお気軽にお問い合わせください。

于 2012-08-06T14:10:25.143 に答える