はじめに

2024/9/4 に株式会社グッドスマイルカンパニー様における EC サイトのリニューアル事例、およびデータ分析基盤の導入事例が公開されました。

複数システムに跨っていた EC サイトをフルスクラッチ開発でリニューアル。一元管理を可能とした EC サイトのインフラ構築・開発・運用保守をワンストップで提供
売上データのリアルタイム分析・可視化を実現!Google Cloud Datastream を活用したデータ分析基盤構築

アイレットでは開発、インフラ構築・運用をご支援させていただきました。
今回はインフラ構築に関する詳細について解説する記事となります。
複数回に分けて公開させていただいており、当該記事では負荷テスト部分について解説します。

解説記事の一覧はこちら:
グッドスマイルカンパニー様事例に関する技術解説(構成編)
グッドスマイルカンパニー様事例に関する技術解説(監視編)
グッドスマイルカンパニー様事例に関する技術解説(データ分析編)

概要

インフラチームでは、プロジェクト全体のテスト計画の一環として、負荷テストを実施しました。
基本的に、Google Cloud および各種 SaaS 製品を対象としております。

負荷テスト

負荷テストでは、主に Cloud Run や Cloud SQL、Elastic Cloudのパフォーマンスを確認し、スペックを決定することを目的として行いました。
テストシナリオは以下を想定し、過去のアクセス数などを基にして目標 RPS を決定しました。

  • 人気商品の案内やバズる告知を行なった際の高アクセスや購入処理に耐えられるか
  • 同時に検索が重なった場合に耐えられるか

テストツールは Locust を利用し、負荷掛け環境は GKE で構築しています。
詳しくはこちらのブログをご覧ください。

テストの結果では、以下の赤枠のサービスについてのボトルネックを解消できました。
※Cloud Run や Cloud SQL の性能を正確に測るため、Fastly のキャッシュや WAF は無効化して実施しております。

Cloud NAT

Cloud NAT のメトリクスである OUT_OF_RESOURCES が発生しており、レスポンスタイムアウトによる 503 エラーが多発しておりました。
デフォルト値であるポート数が少ないことが原因だったため、最小ポート数の増加を行うことで解消しました。
また、動的ポートを有効にすることで、柔軟にポートの自動スケーリングができる設定としました。

参考:リソース不足によってパケットがドロップされる

Serverless VPC Access

Serverless VPC Access のメトリクスを確認したところ、CPU が最大 300% まで上昇し、データベースへのコネクションに時間がかかっている状態でした。
スループットの向上も必要でしたので、インスタンスタイプを増強することで解消しました。
なお、Serverless VPC Access は、スケールアウトは可能ですが、スケールインはできない仕様のため、過剰なコストを防ぐためにスケールアウトの上限を低く設定しております。

参考:スループットとスケーリング

Cloud Run

Cloud Run は、主にメモリと同時実行数の調整を行いました。
アプリケーションによって、1 コンテナで処理できる同時実行数は異なるため、まずはどのくらい処理ができるのかを見極めることが、最適なパフォーマンスを出すために重要と考えています。
また、同時実行数の値に合わせてメモリを調整することで、過剰なメモリ割り当てを防いでいます。

参考:同時実行を最適化する

また、24/365で稼動するサービスであることから、コンテナのコールドスタートを防ぐために最小コンテナ数を一定値で設けております。

参考:インスタンスをアイドル状態にしてコールド スタートを最小限に抑える

Cloud SQL

Cloud SQL では、Query Insight を活用したクエリのチューニングを開発チームにて実施し、過剰にスペックを上げることなく負荷を抑えました。

Memorystore/Elastic Cloud

Memorystore、Elastic Cloud については、当初の構成で適切な負荷が掛かっていましたので、特に調整の必要はありませんでした。

おわりに

負荷テストを通じて、Google Cloud や各種 SaaS 製品の安定性を検証することができました。
これにより、予期せぬ負荷が発生した際にも迅速に対応できる基盤が整備されたため、現在も安定して運用ができております。
しかし、テスト結果に拘らず、今後も継続的な改善を行ってサービスの信頼性向上に努めたいと思います。