Skip to content
Latchkey

ストレステストとは?

ストレステストは、システムを想定された限界を超えて意図的に追い込み、どこでどのように壊れるかを見つけます。

負荷テストは、システムが想定されたトラフィックに耐えることを確認します。ストレステストはより難しい問いを投げかけます。需要がそれを超えたとき何が起きるのか? トラフィックを設計上の限界を超えて引き上げることで、ストレステストは破綻点を見つけ、同じくらい重要なこととして、システムが優雅に壊れるのか壊滅的に壊れるのかを明らかにします。

ストレステストの目的

ストレステストはシステムを意図的に圧倒します。構築された想定を超えた、より多くのユーザー、より多くのリクエスト、より多くのデータです。目的は合格することではなく学ぶことです。どの時点でパフォーマンスが崩壊するのか、そして何が最初に壊れるのか、データベースか、キューか、メモリか?

優雅な失敗と壊滅的な失敗

よく設計されたシステムはストレス下で優雅に劣化し、負荷を切り捨て、明確なエラーを返し、圧力が和らぐと回復します。脆弱なシステムはクラッシュし、データを破損し、あるいは全面的な障害へと連鎖します。ストレステストは実際にどちらの挙動を持っているかを明らかにします。

簡単な例

ストレスプロファイルは並行数を想定ピークをはるかに超えて引き上げ、latencyとエラーが急増する箇所を見つけます。

Pushing past the limit
export const options = {
  stages: [
    { duration: "2m", target: 2000 }, // well past normal peak
  ],
};

注視すべき点

  • latencyが急激に劣化するthroughput。
  • 圧力下で最初に壊れるコンポーネント。
  • エラーが処理されるのか連鎖するのか。
  • 負荷が下がった後にシステムが回復するかどうか。

CI/CDにおけるストレステスト

ストレステストは重く破壊的なため、通常は毎回のpushではなく、隔離された環境に対してスケジュールで実行されます。極端な負荷を確実に生成するには、一貫した能力の高いcomputeが必要です。負荷ジェネレーターを高速な専用runnerで実行することで、実行間での破綻点の測定を意味のあるものに保てます。

重要なポイント

  • ストレステストはシステムを限界を超えて追い込み、破綻点を見つけます。
  • 失敗が優雅なものか壊滅的なものかを明らかにします。
  • 毎回のpushではなく、隔離された環境に対してスケジュールで実行されます。

関連ガイド