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.3k
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
4.7k
Other Decks in Programming
See All in Programming
Kotlin 2.0 and Beyond
antonarhipov
2
150
Some more adventure of Happy Eyeballs
coe401_
2
190
GraphQL あるいは React における自律的なデータ取得について
quramy
11
3k
メモリ最適化を究める!iOSアプリ開発における5つの重要なポイント
yhirakawa333
0
420
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
490
Scala におけるコンパイラエラーとの付き合い方
chencmd
2
430
API Platform for Laravel
dunglas
0
320
Hono・Prisma・AWSでGeoなAPI開発
nokonoko1203
5
680
エラーレスポンス設計から考える、0→1開発におけるGraphQLへの向き合い方
bicstone
5
1.5k
AndroidアプリのUIバリエーションをあの手この手で確認する / Check UI variations of Android apps by various means
tkmnzm
1
170
Jakarta EE meets AI
ivargrimstad
1
520
Rubyとクリエイティブコーディングの輪の広がり / The Growing Circle of Ruby and Creative Coding
chobishiba
1
270
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Fontdeck: Realign not Redesign
paulrobertlloyd
80
5.1k
GraphQLの誤解/rethinking-graphql
sonatard
65
9.8k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
23
1.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
103
48k
Designing for Performance
lara
604
68k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
1
53
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
41
6.5k
The Cult of Friendly URLs
andyhume
76
6k
Infographics Made Easy
chrislema
239
18k
A Philosophy of Restraint
colly
202
16k
How to train your dragon (web standard)
notwaldorf
85
5.6k
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]
本資料は、未刊行文書として日本及び各国の著作権法に基づき保護されております。本資料には、株式会社ブレインパッド所有の特定情報が含まれて おり、これら情報に基づく本資料の内容は、御社以外の第三者に開示されること、また、本資料を評価する以外の目的で、その一部または全文を複製、 使用、公開することは、禁止されています。また、株式会社ブレインパッドによる書面での許可なく、それら情報の一部または全文を使用または公開する ことは、いかなる場合も禁じられております。