こんにちは。よっしーです(^^)
今日は、Spike testing についてご紹介します。
背景
Dockerで構築したWebアプリの開発環境において、k6を利用した負荷テストについて調査したときの内容を備忘として残しました。
開発環境のソースは下記のリポジトリにあります。
スパイクテスト(Spike testing)
スパイクテストは、システムが急激で大規模な利用ラッシュの状況下で生存し、パフォーマンスを発揮するかどうかを検証するテストです。
スパイクテストは、システムが急激で大規模なトラフィックを経験する可能性がある場合に有用です。このようなイベントの例には、チケット販売(テイラー・スウィフトのコンサートチケット)、製品の発売(PS5)、広告の放送(スーパーボウル)、期限切れのプロセス(納税申告)、季節のセール(ブラックフライデー)などが含まれます。また、トラフィックの急増はラッシュアワー、特定のタスク、またはユースケースなど、より頻繁なイベントによっても引き起こされる可能性があります。
スパイクテストは、非常に短いまたは存在しないランプアップ時間で非常に高い負荷まで増加させます。通常、スパイクテストにはプラトー期間がないか、非常に短いです。実際のユーザーは、通常、これらの状況で追加の手続きを行うことはありません。同様に、ランプダウンも非常に速いか存在しないため、プロセスは一度だけ繰り返されます。
このテストでは、前のテストタイプと異なるプロセスを含めることがあります。なぜなら、スパイクは通常、プロダクションの通常の日常の一部ではないからです。また、イベント中に高需要のプロセスを許可または優先させるために、スパイクテストがシステムの見直しを必要とする場合もあります。
スパイクテストを実行するタイミング
このテストは、システムが急激なアクティビティのラッシュを予想しているときに実行する必要があります。
システムがこの種の振る舞いを予想している場合、スパイクテストはシステムの振る舞いと急激な負荷ラッシュに耐えられるかどうかを特定するのに役立ちます。負荷は平均値を大幅に上回り、他のテストタイプとは異なる一連のプロセスに焦点を当てるかもしれません。
考慮事項
スパイクテストの準備をする際に、以下の点を考慮してください:
- このテストタイプで重要なプロセスに焦点を当てます。 このテストのトラフィックスパイクが、他のテストタイプと同じプロセスをトリガーするか、異なるプロセスをトリガーするかを評価し、それに応じてテストロジックを作成します。
- テストがしばしば完了しないことがあります。 これらのシナリオではエラーが一般的です。テストを実行し、調整し、繰り返します。
- システムがスパイクイベントのリスクにさらされている場合、チームは複数回のスパイクテストを実行し、システムを調整する必要があります。
- モニタリング。 このテストの成功にはバックエンドのモニタリングが不可欠です。
Spike testing in k6
スパイクテストの主な特徴は、急激で非常に高い負荷をシミュレートすることです。通常、フルロード(負荷のピーク)の期間がないか、非常に短いことがあります。
場合によっては、テストに一時的なフルロードが必要なこともありますが、その期間は通常短いです。ランプダウンも速いか不要なことがあり、目標はシステムの負荷を急激に増加させることです。
import http from 'k6/http';
import {sleep} from 'k6';
export const options = {
// Key configurations for spike in this section
stages: [
{ duration: '2m', target: 2000 }, // fast ramp-up to a high point
// No plateau
{ duration: '1m', target: 0 }, // quick ramp-down to 0 users
],
};
export default () => {
const urlRes = http.get('https://test-api.k6.io');
sleep(1);
// MORE STEPS
// Add only the processes that will be on high demand
// Step1
// Step2
// etc.
};
スパイクテストでは、負荷が急速に極端なレベルまで増加します。その後、テストが最大に達したときに続いてランプダウン期間があり、負荷が急速に0に戻ります。
スパイクテストは、負荷がグラフで表現されたときの形状からその名前を得ています。
注意してください。負荷は0からピークまで3分で急激に増加します。
結果の分析
スパイクテストで評価するべきいくつかのパフォーマンスメトリックには、ポッドの速度、負荷ラッシュ後の回復時間、正常状態への戻り時間、または過負荷時の重要なシステムプロセスの挙動が含まれます。
システムが急激なラッシュにどのように応答するか(生存する場合)を見つけることは、実際のイベント中にシステムがパフォーマンスを発揮できることを保証するために最適化するのに役立ちます。一部のイベントでは、負荷が非常に高いため、主要なプロセスを処理するためにシステム全体を最適化する必要があるかもしれません。このような場合には、システムの信頼性が高まるまでテストを繰り返します。
おわりに
今日は、Spike testingについてご紹介しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント