Nikkei Advent Calendar 2020 の 9 日目の記事です。
日本経済新聞社でバックエンドチームと SRE チームに所属している岩月です。 本記事では、SRE として取り組んだ負荷試験基盤の紹介をします。
背景
サービスの可用性を担保するために、負荷試験は重要な役割を担います。 日本経済新聞社全体でも日々新しいサービスが開発され、負荷試験が実施されています。 しかし、各チームの開発者が負荷試験を実施すると
- 負荷をかけるコンピュータリソースや用意する人的コスト
- リリース時に行った負荷試験を再現できない
- プロジェクトそれぞれの負荷試験ツールを導入していて、統一されていない
などの課題があります。
これらの課題を解決すべく、負荷試験基盤は アプリケーション開発者はシナリオファイルを記述するだけで負荷試験を行うことができる 状態を目指しています。
今回はその概要を紹介します。
技術選定
採用した主要なツール・技術を紹介します。
- 負荷試験ツール
- Locust
- インフラ
- Kubernetes (GKE)
- CD ツール
- Argo CD
負荷試験ツール
負荷試験ツールには Locust を使っています。
Locust - A modern load testing framework
採用に至ったポイントは以下です。
- シナリオを記述できる
- Python を書ける人が多かった
- Kubernetes との親和性が高い(後述)
負荷試験ツールの比較検討は Open source load testing tool review 2020 がとても参考になりました。
インフラ
負荷試験ツールをホスティングするインフラには Kubernetes (GKE) を使っています。 Kubernets を採用した理由は以下です。
- SRE チームで既に、インフラ移行プロジェクトで採用しているなどの実績がある
- Leader/Follower 構成をとれる Locust との親和性が高い
- 公式ドキュメントでも Locust を用いた負荷試験のチュートリアルが公開されている
- マシンリソースのプロビジョニングを Node のオートスケールに任せられる
Argo CD
Kubernetes リソースのデプロイは Argo CD を用いて行っています。 GitOps が目的というよりは、GUI 上でワーカー数を簡単に編集できるようにするために使っています。 負荷試験を実施しない時はリソースを削除しておき、必要なときに SYNC してデプロイできるという点もかなり便利です。
この方式は EKS x Locust で構築する大規模負荷試験環境 を参考にしています。
全体像
概要図は以下です。

実際に動かしてみたい方やコードの雰囲気を掴みたい方は以下のリポジトリにサンプルとデプロイ方法があるのでそちらを参照してください。
メリット
上で示したような構成にしたことにより次のような効果を期待しています。
- Argo CD の GUI 上で Worker の数を必要に応じて増減できる
- 終了したら削除して、必要になったら再度 SYNC して簡単にデプロイできる
- 雛形に沿って PR を作るだけで Argo CD によって負荷試験のリソースがデプロイされる
Locust 用のシナリオファイルを記述するだけで負荷試験を実施できるように Cookiecutter を使って横展開する方法も用意しています。 詳しくは長くなってしまうのでまた機会があれば紹介します。
おわりに
本記事では、SREチームが構築している負荷試験基盤についての概要を紹介しました。 まだまだ改善点は多々ありますが、他チームでも活用してもらい負荷試験にかかるコストの軽減などのメリットも実際に確認できました。 負荷試験は自分自身もおれおれ構成でやってしまいがちという課題があったので、これを機に知見を溜めていければと思っています。
日本経済新聞社では、クラウド技術が大好きなSREエンジニアを大募集しています。 興味を持っていただけた方はぜひ右上の採用リンクからご応募ください。