負荷テストの基本計画 - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

負荷テストの基本計画

負荷テストに適したツールとセットアップを決定するために、テストを実行する理由を明確にします。以下の質問に対応する、適切な種類のテストを実行する必要があります。

  • アプリケーションはどのくらいの負荷に耐えられますか?

  • アプリケーションは X 負荷を処理できますか?

  • アプリケーションは自動的にスケールアップとスケールダウンを行いますか?

  • X 量の負荷がかかると、アプリケーションの動作が経時的に低下しますか?

  • アプリケーションは動作していますか? (これは一般的な負荷テストではありませんが、負荷テストツールを使用して、アプリケーションが想定どおりに機能しているかどうかを確認できます。)

テストの複雑性の決定

テストの複雑性は、評価がどのように完了するかによって決まります。Heyab などの基本的なツールでは、1 つのアプリケーション URI に対してリクエストを実行できます。これらのツールは最も効率的ですが、テストできるのはアプリケーションの 1 つの側面だけです。場合によっては、これで十分かもしれません。例えば、スケーリングをテストする場合は、エンドポイントを呼び出し、テストするディメンションに負荷をかけるだけで十分です。例えば、CPU 負荷が巨大なペイロードであったり、集中的な計算によって CPU に負荷がかかる場合などです。分散システムでは、複雑かつ分散したプロセスを開始するエンドポイントを呼び出したい場合があります。

また、複雑な動作を実行するテストが必要な場合もあります。例えば、プロセスを開始する前にログインする必要がある場合や、アイテムの選択と購入の実行を含む注文プロセスをテストする場合などです。これはシナリオとして理解できます。テストシナリオには、実際の状況に合わせてワークロードを調整できる、より複雑な負荷テストツールが必要です。これにより、エンドユーザーが体験するパフォーマンスについてアサーションするための結果が得られます。

複雑なテストでは、負荷を発生するシステムにより多くの負荷がかかります。負荷テストを実行するには、ツールだけでなく、ツールを実行するシステムも考慮する必要があります。CPU とネットワーク帯域幅が最も重要な要素です。負荷テストコンピュータシステムの設計が不適切な場合、誤った結果につながる可能性があります。例えば、パフォーマンスの高いターゲットに負荷をかけるには、1 台のマシンでは不十分です。この場合は、分散負荷テストをセットアップする必要があります。一方、パフォーマンスの高いツールでは、1 台のサーバーでより多くの負荷が発生する可能性があります。これについては、テストのセットアップで詳しく説明します。

測定とセットアップ

テスト環境の表現可能性を考慮する必要があります。何千台ものサーバーがある巨大なショッピングサイトを運営している場合、エンドユーザーに影響を及ぼすことなく本番環境をテストしたり、サイトのサイズを再現するテスト環境を作成したりすることが難しい可能性があります。さらに、このスケールでシステムに負荷をかけるために十分なトラフィックを作成するには、高度な負荷テストのセットアップも必要です。このため、負荷テストは通常、本番環境に関する仮定を導き出すために使用できる、比較的小規模な同等のセットアップで実行されます。ベースラインや機能要件を確立するためのテストは、本番環境で実行できます。

今後のテストに備えてテスト環境を文書化し、ターゲット環境のサイズから想定できる結果に応じた仕様を明確に定義しておくことがグッドプラクティスです。

負荷テストの影響を受けるインフラストラクチャのすべての要素を検討してください。多くの場合、テストではホストの CPU とメモリを調査しますが、他にも考慮するべき副作用があります。

一般的な副作用は、サービス間の通信のネットワーク帯域幅が限界に達する可能性があることです。インターネット経由で接続されるサービスや分散システムの場合、通信は通常、ネットワークに基づいて行われます。アプリケーションに負荷をかける負荷テストを採用すると、基盤となるネットワークインフラストラクチャにも負荷がかかります。

負荷モデリングと段階的テスト

さまざまなテストについて、テスト中に発生する負荷量をモデル化できます。基本的な方法は、経時的に負荷を徐々に増加させる段階的な進行を作成することです。これにより、段階ごとに異なるデータポイントが作成され、1 回のテストでより詳細な結論を導き出すことができます。アプリケーションの限界を知るには、最高のパフォーマンスを期待できる通常の使用量を下回る負荷で、テストを開始するとよいでしょう。負荷を徐々に増やしていくと、アプリケーションのパフォーマンスが低下する限界が見えてきます。テストの結果は、想定される動作が有効であるかどうか、アプリケーションが障害のある状況でも想定どおりに動作するかどうかを示します。例えば、テストが限界を超えたとき、想定ではアプリケーションが負荷を軽減します。

複雑なツールを使用して、テスト用の設定としてパターンをセットアップできます。これにより、一定期間にどのくらいの負荷を発生させて、どのくらい増加または減少させるかを定義します。

基本的なツールのほとんどはコマンドラインツールであり、ソリューションを自分でスクリプト化する必要があります。独自のスクリプトを作成するときは、保持するメトリクスを誤って上書きしないように注意してください。前のイテレーションの結果が上書きされないように、出力ファイルにはイテレーションごとに新しいサフィックスを付ける必要があります。