SlideShare a Scribd company logo
負荷試験ツール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を使おう

More Related Content

What's hot

Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
Toru Makabe
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Toru Makabe
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
Masahito Zembutsu
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Akihiro Suda
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
 
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
Masahiko Sawada
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
NTT DATA Technology & Innovation
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
 
Serverless時代のJavaについて
Serverless時代のJavaについてServerless時代のJavaについて
Serverless時代のJavaについて
Amazon Web Services Japan
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
terurou
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
Yoshiyasu SAEKI
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
 
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
Amazon Web Services Japan
 

What's hot (20)

Ingress on Azure Kubernetes Service
Ingress on Azure Kubernetes ServiceIngress on Azure Kubernetes Service
Ingress on Azure Kubernetes Service
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
 
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
Serverless時代のJavaについて
Serverless時代のJavaについてServerless時代のJavaについて
Serverless時代のJavaについて
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
 

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

OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理
Tadashi Miyazato
 
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
JUNICHI YOSHISE
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
 
Circle of Code with Cloud Foundry
Circle of Code with Cloud FoundryCircle of Code with Cloud Foundry
Circle of Code with Cloud Foundry
Tomohiro Ichimura
 
OpenShift Ansbile 活用法 アプリケーションライフサイクルからみる導入効果
OpenShift Ansbile 活用法 アプリケーションライフサイクルからみる導入効果OpenShift Ansbile 活用法 アプリケーションライフサイクルからみる導入効果
OpenShift Ansbile 活用法 アプリケーションライフサイクルからみる導入効果
Hideaki Tokida
 
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみようNTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
Midori Oge
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
Hiroyuki Wada
 
研究を基にしたオープンソース開発チェックポイント
研究を基にしたオープンソース開発チェックポイント研究を基にしたオープンソース開発チェックポイント
研究を基にしたオープンソース開発チェックポイント
Recruit Technologies
 
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-Hiroki Kondo
 
楽天がCloud foundryを選んだ理由
楽天がCloud foundryを選んだ理由楽天がCloud foundryを選んだ理由
楽天がCloud foundryを選んだ理由
Rakuten Group, Inc.
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築Hideharu MATSUFUJI
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
健一 辰濱
 
220523JS7.pdf
220523JS7.pdf220523JS7.pdf
220523JS7.pdf
OSSラボ株式会社
 
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
Daiki Kawanuma
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれMasataka MIZUNO
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
Ransui Iso
 
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
cf-containers-broker を使ってローカル環境もサービスの恩恵をうけるcf-containers-broker を使ってローカル環境もサービスの恩恵をうける
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
Takeshi Morikawa
 
pi-1. プログラミング入門
pi-1. プログラミング入門pi-1. プログラミング入門
pi-1. プログラミング入門
kunihikokaneko1
 
Salesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれSalesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれ
寛 吉田
 

Similar to 負荷試験ツールlocustを使おう (20)

OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理
 
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
Enterprise Development Conference 2016 プライベートPaaSが実現するアジャイル開発と次世代型アプリケーションの実例
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Circle of Code with Cloud Foundry
Circle of Code with Cloud FoundryCircle of Code with Cloud Foundry
Circle of Code with Cloud Foundry
 
OpenShift Ansbile 活用法 アプリケーションライフサイクルからみる導入効果
OpenShift Ansbile 活用法 アプリケーションライフサイクルからみる導入効果OpenShift Ansbile 活用法 アプリケーションライフサイクルからみる導入効果
OpenShift Ansbile 活用法 アプリケーションライフサイクルからみる導入効果
 
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみようNTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
NTTコミュニケーションズ Cloudn勉強会資料 SDKでAPIをたたいてみよう
 
Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介Keycloakの実際・翻訳プロジェクト紹介
Keycloakの実際・翻訳プロジェクト紹介
 
研究を基にしたオープンソース開発チェックポイント
研究を基にしたオープンソース開発チェックポイント研究を基にしたオープンソース開発チェックポイント
研究を基にしたオープンソース開発チェックポイント
 
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
 
楽天がCloud foundryを選んだ理由
楽天がCloud foundryを選んだ理由楽天がCloud foundryを選んだ理由
楽天がCloud foundryを選んだ理由
 
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
 
220523JS7.pdf
220523JS7.pdf220523JS7.pdf
220523JS7.pdf
 
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
SI現場のテスト自動化への挑戦〜フルコンテナ構成のCI/CD環境〜
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
cf-containers-broker を使ってローカル環境もサービスの恩恵をうけるcf-containers-broker を使ってローカル環境もサービスの恩恵をうける
cf-containers-broker を使ってローカル環境もサービスの恩恵をうける
 
pi-1. プログラミング入門
pi-1. プログラミング入門pi-1. プログラミング入門
pi-1. プログラミング入門
 
Salesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれSalesforce Lightning をやってみてあれこれ
Salesforce Lightning をやってみてあれこれ
 

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

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