私は最近、Web アプリケーションを公開する前に、そのパフォーマンスをテストする方法を考えていました。このテストは新しい機能であるため、実際のユーザー アクティビティを再現できないことはわかっています。ログを見てユーザー アクティビティを推測し、それに応じてテストを作成することはできますが、これが何を達成するのだろうかと思います。
私はどのようにできるか知りたいです:
- 負荷を決定し、
- 行動を決定する
現実世界のシナリオと比較して、これはどの程度まであなたを導きますか?
私は最近、Web アプリケーションを公開する前に、そのパフォーマンスをテストする方法を考えていました。このテストは新しい機能であるため、実際のユーザー アクティビティを再現できないことはわかっています。ログを見てユーザー アクティビティを推測し、それに応じてテストを作成することはできますが、これが何を達成するのだろうかと思います。
私はどのようにできるか知りたいです:
現実世界のシナリオと比較して、これはどの程度まであなたを導きますか?
広大な質問。私の会社では、主に HTTP ベースで、数年間ベンチマークと負荷テストを実行してきました。
複雑なシナリオに入る前に、 Apache Bench (Apache にバンドルされている「ab」コマンド) に基づく簡単なベンチマークから始めることがよくあります。これは負荷テストではなく、パフォーマンス テストです。生成されたクライアントは実際には HTTP クエリの完了を待ってから次に進むためです。基本的な考え方は、(たとえば) N=1,2,4,8,50,100 で 'ab -c N -t 30' を試すことです。予想されるスケーラビリティと最大スループットがすぐにわかります。
注: テスト サーバーの近くで (理想的には同じ LAN 上で) 'ab' コマンドを実行します。そうしないと、ネットワークのベンチにもなります (ここでの主な問題は遅延です)。しかし、一部のビジネス ケースでは、これは実際にテストすることを意図したシステム全体 (サーバー + ネットワーク) です。
ここから、結果が良さそうに見える場合 (つまり、スループットがサーバー側のプロセッサの数まで拡大し、エラー率が低いかゼロである場合)、負荷テストに進みます。それ以外の場合、負荷テストはスケーラビリティの問題のみを確認し、負荷がサポートされているスループットを超えると恐ろしい結果を示す可能性が高いため、ボトルネックを検索します (500 の内部エラーの 100%、接続のドロップ、大きなタイムアウト、サーバーのスラッシングなど) 。
ところで、負荷テストとは、特定のサーバー/アプリに任意の負荷、特にサーバーが処理できない負荷 (例: Jmeter、Tsung) を適用できるツールを使用することを意味します。負荷テストで非常に興味深いのは、サーバーが過負荷になったときに何が起こっているかを観察することです。サーバーが処理できる最大負荷を決定するのは、パフォーマンスが許容できないと見なされる正確なテスト ポイントを選択するときです。
次に、既存のパターンを推測または観察することです。多くの場合、新しい Web サイトの負荷テストを実行するように求められますが、明らかに実際の動作は観察されていません。それ以外の場合は、分析を使用して上位 10 ページを観察できます。シナリオでは、少なくともそれらを横断する必要があります。次のようないくつかのナビゲーション パスが必要になります。
その他のヒント:
全体的な考え方は、単純なテストから始めて段階的に行うことです。そうしないと、完全なスケーラビリティ曲線に適合していない場合、結果を解釈するのに苦労します。そして、何を推測しますか?完全なスケーラビリティ曲線に適合することはありません...