衣料品EC(電子商取引)モール「ZOZOTOWN(ゾゾタウン)」。2023年は1月1日から1月9日にかけて新春セールを実施した。年間を通して最大級のアクセスが押し寄せる新春セールでは、通常時と比べ約1.8倍の負荷がシステムにかかる。この負荷に耐える目的で、ZOZOは2022年11月中旬から本番環境を利用した負荷テストを実施し、無事にセールを乗り越えた。大規模ECサイトに対する負荷テストの勘所を見ていこう。
新春セールに向けた負荷対策を始めたのは、2021年のセールを控えた2020年11月だ。きっかけは、2020年1月の新春セールで開始直後のアクセス増加にサイトが耐えきれず、一部のユーザーがZOZOTOWNにアクセスしづらい状況が発生したことだった。この反省から、新春セールに向けた負荷対策を毎年実施するようにした。
負荷テストを実行する環境はAmazon Web Services(AWS)上に構築した。ECサイトへ大量の負荷をかけるために、オープンソースソフトウエア(OSS)の負荷テストツール「Gatling」を採用。これをAWS上のコンテナで動かす。コンテナ管理にはAmazon Elastic Kubernetes Service(EKS)を使用した。「Gatlingを使ってシステムに負荷をかけ、どこがボトルネックになるかを探った」(ZOZO 技術本部SRE部ZOZOSREブロックの秋田海人氏)。
2023年の新春セールに向けた負荷テストでは、1秒当たり2万8000程度のアクセスを目標値に設定した。この値は、2021年1月1日の午前0時から午前1時のアクセス数から算出した。2022年の同日・同時間帯のアクセス数と比較した結果、よりアクセス数が多かった2021年の値を基準として採用した。
ユーザーの購買行動を模したテストシナリオは、毎年50~80パターン程度用意している。2023年の新春セール向けには約70パターンのシナリオを用意。Gatling上で実行するこれらシナリオは、Scalaで記述した。
どれくらいの負荷をかけるかは、コンテナの数で調整した。まずGatlingで1つのコンテナが実行するリクエスト数を調整する。コンテナは約80用意し、EKSでコンテナを増減させることで目標に近いアクセス負荷がかかるようにした。