負荷試験ツールlocustを使おう
STRICTLY PRIVATE AND CONFIDENTIAL|© 2020 iRidge, Inc.
locustって?
1
● オープンソースの負荷テストツール
● テストシナリオをPythonで記述
● 分散型でスケーラブル
● Webベースの管理画面を持つ(CLIでも実行可能)
https://locust.io/
STRICTLY PRIVATE AND CONFIDENTIAL|© 2020 iRidge, Inc.
なぜlocust?
2
● 自社プロダクトである「FANSHIP」は、プッシュ通知配信機能をはじめ、クーポン機能、CDP関連機能な
ど、様々な機能を持っている
● これらの機能はほとんどがPythonで書かれており、開発メンバーはPythonに慣れ親しんできた
● locustはPythonでテストシナリオを書くことができ開発メンバーとしては利用ハードルが低い
● あるコンポーネントに導入したところ、他のコンポーネントにも展開され標準的に利用されるように
(ちなみに凝ったテストシナリオが必要なく、単一エンドポイントへ負荷をかけたいだけであれば、vegetaもよく
使われます)
STRICTLY PRIVATE AND CONFIDENTIAL|© 2020 iRidge, Inc.
こんなプロジェクトで使いました
● Djangoバージョンアップ
● 新機能(アプリ内メッセージ)の開発
● レポーティング機能用新規API開発
● クーポンシステムのパフォーマンス改善
● インフラ刷新(EC2 -> ECS)
● ...etc
3
STRICTLY PRIVATE AND CONFIDENTIAL|© 2020 iRidge, Inc.
テストシナリオのサンプル
4
● min/max_wait:タスクの実行間隔。minとwaitの
間でランダムな間隔で実行される。
● on_start:タスク(テストシナリオ)の開始時に1回
だけ呼ばれる関数。ログイン処理などを記述し
ておく。
● taskデコレータ:引数により書くタスクの重み付
けができる。
左記の場合、test_add:info_add=1:30の割合
で実行される。
左のサンプルで使用しているものの他にも、色々な機
能があります。
STRICTLY PRIVATE AND CONFIDENTIAL|© 2020 iRidge, Inc.
ver 1.0以降は --headlless オプションを利用することでCLIから実行可能です。
※ver 0.x から大きめの変更が入っているようなので、その他オプションについては公式ドキュメントを参照する
ことをオススメします。
$ locust -f locustfile.py --headless -u 8 -r 8 -t 300s -H <対象URL>
オプション
-f: locustスクリプトのパス
--headless: WebUIを起動せず即座にテスト実行(-u, -r 必須)
-u: はじめに生成するユーザ数
-r: 1秒あたりに生成するユーザ数
-t: テストの実行時間
-H: テスト対象ホスト
CLIからテスト実行
5
STRICTLY PRIVATE AND CONFIDENTIAL|© 2020 iRidge, Inc.
テスト結果の出力
6
対象エンドポイント
IDなどをURLに含む場合も
「INFO_ID」のようにまとめられる
リクエスト総数
レイテンシ(平均・最小・最大・中央値)
RPS・エラーレート
STRICTLY PRIVATE AND CONFIDENTIAL|© 2020 iRidge, Inc.
分散実行
● 公式Dockerイメージが提供されています。
● docker-composeのサンプルがドキュメントに載っているので、それを参考にすることでmaster/workerの
環境を作ることが出来ます。
7
$ docker-compose up --scale worker=4
これで、master 1つと worker 4つが起動できます。
STRICTLY PRIVATE AND CONFIDENTIAL|© 2020 iRidge, Inc.
分散実行
8
● 前ページのようにDocker環境を準備するのに加え、
ECSで、master/workerでそれぞれサービスを作ると、楽にスケールできます
負荷試験ツールlocustを使おう

負荷試験ツールlocustを使おう

  • 1.
  • 2.
    STRICTLY PRIVATE ANDCONFIDENTIAL|© 2020 iRidge, Inc. locustって? 1 ● オープンソースの負荷テストツール ● テストシナリオをPythonで記述 ● 分散型でスケーラブル ● Webベースの管理画面を持つ(CLIでも実行可能) https://locust.io/
  • 3.
    STRICTLY PRIVATE ANDCONFIDENTIAL|© 2020 iRidge, Inc. なぜlocust? 2 ● 自社プロダクトである「FANSHIP」は、プッシュ通知配信機能をはじめ、クーポン機能、CDP関連機能な ど、様々な機能を持っている ● これらの機能はほとんどがPythonで書かれており、開発メンバーはPythonに慣れ親しんできた ● locustはPythonでテストシナリオを書くことができ開発メンバーとしては利用ハードルが低い ● あるコンポーネントに導入したところ、他のコンポーネントにも展開され標準的に利用されるように (ちなみに凝ったテストシナリオが必要なく、単一エンドポイントへ負荷をかけたいだけであれば、vegetaもよく 使われます)
  • 4.
    STRICTLY PRIVATE ANDCONFIDENTIAL|© 2020 iRidge, Inc. こんなプロジェクトで使いました ● Djangoバージョンアップ ● 新機能(アプリ内メッセージ)の開発 ● レポーティング機能用新規API開発 ● クーポンシステムのパフォーマンス改善 ● インフラ刷新(EC2 -> ECS) ● ...etc 3
  • 5.
    STRICTLY PRIVATE ANDCONFIDENTIAL|© 2020 iRidge, Inc. テストシナリオのサンプル 4 ● min/max_wait:タスクの実行間隔。minとwaitの 間でランダムな間隔で実行される。 ● on_start:タスク(テストシナリオ)の開始時に1回 だけ呼ばれる関数。ログイン処理などを記述し ておく。 ● taskデコレータ:引数により書くタスクの重み付 けができる。 左記の場合、test_add:info_add=1:30の割合 で実行される。 左のサンプルで使用しているものの他にも、色々な機 能があります。
  • 6.
    STRICTLY PRIVATE ANDCONFIDENTIAL|© 2020 iRidge, Inc. ver 1.0以降は --headlless オプションを利用することでCLIから実行可能です。 ※ver 0.x から大きめの変更が入っているようなので、その他オプションについては公式ドキュメントを参照する ことをオススメします。 $ locust -f locustfile.py --headless -u 8 -r 8 -t 300s -H <対象URL> オプション -f: locustスクリプトのパス --headless: WebUIを起動せず即座にテスト実行(-u, -r 必須) -u: はじめに生成するユーザ数 -r: 1秒あたりに生成するユーザ数 -t: テストの実行時間 -H: テスト対象ホスト CLIからテスト実行 5
  • 7.
    STRICTLY PRIVATE ANDCONFIDENTIAL|© 2020 iRidge, Inc. テスト結果の出力 6 対象エンドポイント IDなどをURLに含む場合も 「INFO_ID」のようにまとめられる リクエスト総数 レイテンシ(平均・最小・最大・中央値) RPS・エラーレート
  • 8.
    STRICTLY PRIVATE ANDCONFIDENTIAL|© 2020 iRidge, Inc. 分散実行 ● 公式Dockerイメージが提供されています。 ● docker-composeのサンプルがドキュメントに載っているので、それを参考にすることでmaster/workerの 環境を作ることが出来ます。 7 $ docker-compose up --scale worker=4 これで、master 1つと worker 4つが起動できます。
  • 9.
    STRICTLY PRIVATE ANDCONFIDENTIAL|© 2020 iRidge, Inc. 分散実行 8 ● 前ページのようにDocker環境を準備するのに加え、 ECSで、master/workerでそれぞれサービスを作ると、楽にスケールできます