Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Pythonで始める負荷試験
Search
Yusuke Nishio
August 28, 2020
Programming
4
5.6k
Pythonで始める負荷試験
PyCon JP 2020 Online
2020年8月28日(火)
https://pycon.jp/2020/
Yusuke Nishio
August 28, 2020
Tweet
Share
More Decks by Yusuke Nishio
See All by Yusuke Nishio
Python研修の作り方 -Teaching Is Learning-
nissy0409240
0
5k
Other Decks in Programming
See All in Programming
PHP で学ぶ OAuth 入門
azuki
1
180
Making TCPSocket.new "Happy"!
coe401_
1
350
これだけは知っておきたいクラス設計の基礎知識 version 2
masuda220
PRO
24
6.3k
Preact、HooksとSignalsの両立 / Preact: Harmonizing Hooks and Signals
ssssota
1
1.4k
Kamal 2 – Get Out of the Cloud
aleksandrov
1
180
AI時代の開発者評価について
ayumuu
0
130
Building Scalable Mobile Projects: Fast Builds, High Reusability and Clear Ownership
cyrilmottier
2
270
Enterprise Web App. Development (1): Build Tool Training Ver. 5
knakagawa
1
110
The Evolution of the CRuby Build System
kateinoigakukun
0
130
SwiftUI API Design Lessons
niw
1
270
Optimizing JRuby 10
headius
0
240
メモリウォールを超えて:キャッシュメモリ技術の進歩
kawayu
0
1.9k
Featured
See All Featured
Scaling GitHub
holman
459
140k
KATA
mclloyd
29
14k
Making Projects Easy
brettharned
116
6.1k
Embracing the Ebb and Flow
colly
85
4.6k
How to train your dragon (web standard)
notwaldorf
90
6k
Documentation Writing (for coders)
carmenintech
69
4.7k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
660
GraphQLとの向き合い方2022年版
quramy
46
14k
Producing Creativity
orderedlist
PRO
344
40k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
GitHub's CSS Performance
jonrohan
1030
460k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Transcript
西尾 友佑(@nissy0409240) 2020年8月28日 PyCon2020 Pythonで始める負荷試験
© BrainPad Inc. 2 • 名前: 西尾 友佑(Yusuke Nishio) ◦
Twitter: @nissy0409240 • 所属: ブレインパッドプロダクトビジネス本部 • 登壇歴: PyCon JP 2018登壇 ◦ Python研修の作り方-Teaching Is Learning- • 2020年の主な活動 ◦ リスティング広告関連ツール開発 ◦ BrainPadスポンサーブースの中の人 ◦ PB本部Twitter(@BrainPadProduct)の中の人 ▪ ただいま裏実況中です! 自己紹介
© BrainPad Inc. 3 • 資料公開あり ◦ Speaker Deckにて公開しています •
実況中継大歓迎です ◦ #pyconjp ◦ #pyconjp_4 よろしくお願いします
© BrainPad Inc. 4 • Python製ツールLocustの紹介 • Locustを用いて負荷試験を行う方法 • 負荷試験手法ならびに結果を属人化させない方法
話すこと
© BrainPad Inc. 5 • きっかけ • Locustとは • 負荷試験の実施
• デモ アジェンダ
きっかけ
© BrainPad Inc. 7 • 担当プロダクトでとある機能を実装した • 使われ方によっては最大数万件の更新処理が 発生することが可能性があった •
現状でどれだけ捌けるのかリリース前に 負荷試験を行うことになった ◦ どれくらいのリクエストなら耐えれるかを 調べるだけのシンプルなテスト要件 • 初めての負荷試験でしたので ツールの使い方から調べるレベルでした 背景
© BrainPad Inc. 8 システム構成
© BrainPad Inc. 9 • プロダクトのAPI部分でPythonが使われている ◦ 運用時に使うスクリプトもPythonが使われている ◦ チーム全員書けるので導入コストが低く済む
• Pythonで書けないかと考えた ◦ “python 負荷試験”で検索 ◦ Locustの存在を知る ◦ 使ってみようと考えた • プログラミング言語の中でPythonが 一番手に馴染んでた ◦ シナリオ書く時間短縮に繋がる 考えたこと
Locustとは
© BrainPad Inc. 11 • GUIのインターフェースもついている Python製の負荷試験ツール • 公式サイト ◦
https://locust.io/ • ドキュメント ◦ https://docs.locust.io/en/stable/ • ソースコード ◦ https://github.com/locustio/locust • “Locust”とは日本語でバッタや イナゴのことを意味する Locustとは
© BrainPad Inc. 12 • Pythonで実行可能な処理ならなんでも出来る ◦ エンドポイントをリクエスト毎に変更可能 ◦ リクエスト時のボディを変更可能
◦ DBとの接続も可能 • 制約があっても対応可能 ◦ セッション保持可能 ◦ タスクの実行順制御 ◦ タスク実行割合制御 前提
© BrainPad Inc. 13 • JMeter ◦ 豊富なレポートや複雑なシナリオを 書くことが可能 ◦
古くからあるため情報は沢山ある ◦ メモリ管理が面倒(たまに落ちる) • Gatling ◦ 豊富なレポートや複雑なシナリオを 書くことが可能 ◦ Scalaでシナリオを書ける 他のツールとの比較
© BrainPad Inc. 14 • 下記コマンドを実行(Mac環境) $ pip3 install locust
• 実行後に下記コマンドを実行する $ locust --help ◦ ヘルプが表示されることを確認 • サポートされているPythonのバージョン ◦ 3.6 ◦ 3.7 ◦ 3.8 インストール方法
© BrainPad Inc. 15 • Pythonスクリプトで記述します • ファイル名はなんでもOK ◦ デフォルトではlocustfile.pyに
記載された内容が実行されます シナリオを作成
© BrainPad Inc. 16 シナリオ例
© BrainPad Inc. 17 APIサーバー例
© BrainPad Inc. 18 • 下記コマンドを実行 $ locust -H http://localhost:8080
-f locustfile.py ◦ -fオプションで実行したいシナリオが書かれたファイルを 指定可能 ◦ -Hオプションでリクエスト先エンドポイントを指定可能 ◦ -Pオプションで起動時のポートを指定可能 (デフォルトでは8089ポート) 起動方法
© BrainPad Inc. 19 起動時の画面
負荷試験の実施
© BrainPad Inc. 21 テスト条件の変え方 作成されるクライアント数の最大値 (ユーザー数の最大値と同義) クライアントの作成スピード (毎秒ごと)
© BrainPad Inc. 22 テスト開始 Start swarmingボタンを押すとリクエスト実行 が開始される
© BrainPad Inc. 23 テスト実行中
© BrainPad Inc. 24 テスト実行中
© BrainPad Inc. 25 テスト実行中
© BrainPad Inc. 26 テスト実行中
© BrainPad Inc. 27 テスト実行終了
© BrainPad Inc. 28 テスト結果の共有
© BrainPad Inc. 29 テスト結果の共有
© BrainPad Inc. 30 • Pythonで書かれたソースコードなのでGit管理が可能 ◦ どのような意図でどう実装したかが残る ◦ 実行したシナリオもそのまま共有される
◦ 自分の手元から試すことも可能 シナリオの更新・共有
© BrainPad Inc. 31 • Locustからいくつかのシナリオを実行 どこまで耐えられるのかを計測 現場での様子
© BrainPad Inc. 32 • 検証環境で何回か試しスペックを見積もる • 環境の見直しを行いリリース • リリース後も問題なく稼働
現場での様子
デモ
© BrainPad Inc. 34 • 実行したコード • https://github.com/nissy0409240/locust_demo • 起動方法はREADME.mdをご確認下さい
デモ
© BrainPad Inc. 35 • Locustを用いた負荷試験方法についてお話させて頂きました • 負荷試験という一見コーディングとは関係ない作業も Pythonを用いたツールを用いれば コーディングとして行える
• Pythonに寄せることでツールの使い方ではなく Pythonでどのように記述するかに変わる • コードとして残ることは再現性のある ドキュメントとも言えるのではないか まとめ
© BrainPad Inc. 36 • ブレインパッドではPythonエンジニアを積極採用中です ◦ アプリケーションエンジニア ◦ 機械学習エンジニア
◦ データサイエンティスト • ご応募お待ちしています! ◦ https://www.brainpad.co.jp/recruit/ • 詳しい話はスポンサーブースで! おやくそく
© BrainPad Inc. 37 ご静聴ありがとうございました
株式会社ブレインパッド 〒108-0071 東京都港区白金台3-2-10 白金台ビル3F TEL:03-6721-7002 FAX:03-6721-7010 www.brainpad.co.jp
[email protected]
本資料は、未刊行文書として日本及び各国の著作権法に基づき保護されております。本資料には、株式会社ブレインパッド所有の特定情報が含まれて おり、これら情報に基づく本資料の内容は、御社以外の第三者に開示されること、また、本資料を評価する以外の目的で、その一部または全文を複製、 使用、公開することは、禁止されています。また、株式会社ブレインパッドによる書面での許可なく、それら情報の一部または全文を使用または公開する ことは、いかなる場合も禁じられております。