負荷テストのガイドライン
最終更新日 2024年12月03日(火)
Table of Contents
Heroku プラットフォームで本番アプリを実行する過程で、負荷テストを実行する必要に迫られる場合があります。このドキュメントでは、Heroku で許容されるテストについてのいくつかのガイドラインを規定します。
負荷テストの実行と結果の解釈についてのガイダンスは、「アプリケーションの負荷テスト」を参照してください。
Common Runtime の制限
実行する負荷テストの規模に応じて制限は変化します。このセクションでは、さまざまなテストボリュームに適用される制限の概要を示します。
小規模から中規模までのテスト
低~中規模のテストは、1 つのアプリに対して 1 秒あたり 10,000 個までのリクエストであれば、Heroku からの許可を受けずに実行できます。これは Common Runtime のすべてのリージョンに適用されます。これらのテストは予告なくいつでも実行できますが、一度に 1 つのテストに制限するものとし、1 秒あたり 10,000 個のリクエストのテストを同時に複数実行しないでください。この規模のテストは、あらゆる dyno サイズで実行できます。
- RPS 制限: < 10,000 リクエスト/秒
- 許容される dyno サイズ: 任意 (推奨: Performance 層以上)
- 許可の必要性: なし
大規模なテスト
Heroku からの許可を受けた後、1 秒あたり 10,000 個を超えるリクエストのトラフィック量を含むテストを実行できます。テストを実行する少なくとも 2 営業日前までに Heroku サポートに連絡してください。
Heroku のアーキテクチャは、自然なトラフィックの増加に対応できるように設計されています。ただし、特に突発的な大量のトラフィックを伴うベンチマークの場合、Heroku のシステムはトラフィックの急激な流入に十分な速さで対応できない場合もあります。あらかじめ Heroku に通知しておくと、システムを事前にウォームアップでき、ベンチマークで正確かつ信頼性の高い結果を得ることができます。
この規模のテストは、Performance 層の dyno に制限されます。
- RPS 制限: > 10,000 リクエスト/秒
- 許容される dyno サイズ: Performance 層のみ
- 許可の必要性: あり
許可を受けない場合に起こりうる影響
適切な準備を行わない場合、1 秒あたり 10,000 個のリクエストを超える負荷テストはほとんどの場合に正確な結果が得られません。また、最悪の場合、負荷テストを不正なアプリと誤認し、調査中に誤ってアプリケーションを停止してしまう可能性があります。
Private Spaces の制限
Private Space では、Heroku のどちらの世代でも、事前の許可を受けずにあらゆるトラフィック量を含むテストを実行できます。ここでは完全に隔離された環境とルーティングを備えているため、ここから負荷テストを実行しても他のお客様への影響はありません。お客様に影響する唯一の制限は、環境で利用可能なスループットに直接関係します。スペース内のすべてのアプリケーションは ELB の背後に配置されています。初期のリクエスト率が 1 秒あたり 150 個を超えるか、既存の 1 秒あたりのリクエスト数が 5 分以内に倍増する場合、テスト前に Heroku サポートに連絡して ELB の事前ウォームアップをリクエストしてください。このようなリクエストを行う場合は、少なくとも 2 営業日前までに連絡してください。
- RPS 制限: なし
- 許可される dyno サイズ: あらゆるサイズ
- 許可の必要性: なし
事前ウォームアップを行うには、少なくとも 3 つの Web dyno を実行する必要があります。
その他の考慮事項
テストの規模と、必要な場合に許可を受けること以外に、負荷テストを行う前に考慮することが望ましい事項がいくつかあります。
データストア接続制限
ほとんどのデータストアには接続制限があり、ユーザーがアプリケーションの負荷テストにおいてスケーリングするときに影響を受ける可能性があります。データストアの接続制限を確認し、テスト時にスケールアップするときに制限を超えないよう注意してください。詳細は、こちらを参照してください。これは Ruby および ActiveRecord に限定したものですが、多くの概念は他の言語や ORM でも類似しています。