はじめに
例年、ZOZOでは新春セールに向けて大規模な負荷試験を実施しています。
使用する負荷試験ツールとしては、2023年までは自社で開発した Gatling Operatorでしたが、昨年 2024年からは Akamai CloudTestを採用しています。
Akamai CloudTestとは
Akamai CloudTest は、現在利用可能な負荷テストプラットフォームの中でトップレベルの堅牢性を誇る製品です。テスト環境や本番環境において、数百から数百万まであらゆる規模の仮想ユーザー数でパフォーマンスを検証できます。CloudTest は、Web サイト、モバイルアプリ、API、データベース、オンラインサービスに加え、継続的統合と継続的展開(CI/CD)のプロセスにも対応しています。
実際のユーザが UIを操作する流れをシミュレーションすることができます。
- e.g. ボタンクリック、フォーム入力、ぺージ遷移
ページ全体の読み込みや JavaScript実行など、より現実のユーザに近い負荷をかけられます。
CloudTestを採用した理由
Gatling Operatorでの大規模な負荷試験には課題がありました。
- 意図しない実行環境起因の問題が発生(一例)
- Gatling Operator が稼働する EKSクラスタ上での問題
- EKSクラスタが存在する AWS環境におけるネットワークの問題
- シナリオの複雑化
- マイクロサービス化によるエンドポイントの増加
- シナリオにおける上記の追従にかかる工数
- シナリオの不具合発生
CloudTestはこれらの課題を解決してくれます。
負荷試験ツールの比較
CloudTestではシナリオ作成以降の工程を全て Akamaiに一任することが可能です。
そのため Gatling Operatorでの負荷試験で発生していた『実行環境起因の問題』と『シナリオの複雑化』を解決することができました。
| 項目 | Gatling Operator | Akamai CloudTest |
|---|---|---|
| シナリオ 作成 | 弊社 | 弊社 |
| シナリオ 実行コード作成 | 弊社 | Akamaiに一任できる |
| 環境構築 | 弊社 | Akamaiに一任できる |
| 負荷試験ツールの操作 | 弊社 | Akamaiに一任できる |
| 試験結果のレポート作成 | 弊社 | Akamaiに一任できる |
メリット
負荷試験ツールの操作を Akamaiに一任できるため、試験対象のサービスにおけるモニタリングやエラーの原因調査など、より重要なタスクに人員を割くことができます。
また、心理的負荷も下げられます。負荷試験は Google Meetを使ってオンラインで実施します。Gatling Operatorではツールを操作する人が画面を共有し、ファシリテートの役割も担っていました。負荷試験には数十人が参加しますので、かなり心理的負荷が高かったといえます(特に問題が発生したときは大変です...)。
採用効果
特に問題なく、期待する負荷をかけることができました。
新春セールに万全の状態で臨み、大きな障害が起きることなく無事に乗り越えられました。
最も大きな効果としては、負荷試験の日数削減です。
先述した通り、以前までは実行環境起因の問題やシナリオの不具合が発生しており、その影響で負荷試験が長引いていました。参加者の工数やインフラの拡張に発生するコストを抑えることができました。
以降のセクションについて
以下について説明します。CloudTestの利用イメージがつき、参考になればと思います。
- 実行環境
- シナリオ
- UU(ユーザ)数
- CloudTest
- 費用感
実行環境
Akamai Cloudを利用します。
そこに Linodeインスタンス(仮想マシン)を構築し、インスタンスに CloudTestをインストールします。かける負荷が高い場合はインスタンスのスケールアウトが必要です。
以下は実行環境のイメージです。
シナリオ
CloudTestは実際のユーザの UI操作をもとにしたシナリオを実行することができます。
そのためシナリオ作成も UIベースで行います。
例えばカート機能のシナリオでは、
- XXX という商品ページにアクセス
- 「カートに入れる」をクリック
- カートTOPページに遷移
のようにシナリオを作成します。
実際には URLやパラメータ、期待する HTTP Statusなど、より詳細な情報を追加します。
UU数
繰り返しになりますが、CloudTestは実際のユーザの UI操作を再現します。
そのため負荷はリクエスト数 (req/sec)ではなく、UU(仮想ユーザ)数で決めます。
例えば 100UUの場合、100の仮想ユーザがシナリオを実行します。
各ユーザ、シナリオが 1周して終わると、再び最初からシナリオを実行し、それを CloudTestが停止するまで繰り返します。
負荷の目標値はリクエスト数 (req/sec)で算出することが多いです。
リクエスト数から必要な UU数は以下で見積もります。
- リクエスト数 (req/sec) = UU数 × シナリオが 1周するのにかかる時間
※あくまでも参考値なので、実際にシナリオを実行してみて調整する必要があります
CloudTest
仮想マシンにセットアップした CloudTestの GUIにアクセスします。
以下は CloudTestの結果のレポート画面です。
シナリオ実行中はリアルタイムで各情報が更新されていきます。
シナリオは即時停止、再開が可能です。
各シナリオの実行時間やレイテンシ、エラー数などが確認できます。
実行ユーザ数やリクエスト数が確認できます。
費用感
CloudTestを利用する際に費用が発生するものは以下の通りです。
金額は負荷試験の内容や規模で異なるため詳細は記載できません。また項目も弊社のケースなので参考程度に見てください。
| 項目 | 説明 |
|---|---|
| Akamaiの作業工数 | - 主にシナリオ作成にかかるもの - シナリオ数や内容で変動する - あとは負荷試験を実施する人件費 |
| Linodeインスタンスの料金 | - メインサーバ:1台 - 負荷サーバ:スケールした台数分 - ref. https://www.linode.com/pricing/ |
| UU(ユーザ)数 | - 料金表が存在しないため Akamaiと要相談 |
最後に
ZOZOTOWNの新春セールに向けた負荷試験で採用した Akamai CloudTestについてご紹介しました。
大規模な負荷試験において有効なツールだと思いますので検討してみてはいかがでしょうか。







