Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Pythonで始める負荷試験
Search
Yusuke Nishio
August 28, 2020
Programming
6k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Pythonで始める負荷試験
PyCon JP 2020 Online
2020年8月28日(火)
https://pycon.jp/2020/
Yusuke Nishio
August 28, 2020
More Decks by Yusuke Nishio
See All by Yusuke Nishio
Python研修の作り方 -Teaching Is Learning-
nissy0409240
0
5.6k
Other Decks in Programming
See All in Programming
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
160
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
490
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
160
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
170
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
240
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
140
Webの地図
yosuke_furukawa
PRO
6
4.1k
信頼性の目標を誰も求めてない
shubox
0
500
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
360
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.7k
Heart of Swift Concurrency
koher
0
190
Featured
See All Featured
Speed Design
sergeychernyshev
33
2.1k
The SEO Collaboration Effect
kristinabergwall1
1
550
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
600
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Abbi's Birthday
coloredviolet
3
9.9k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
What's in a price? How to price your products and services
michaelherold
247
13k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Utilizing Notion as your number one productivity tool
mfonobong
4
580
Evolving SEO for Evolving Search Engines
ryanjones
0
280
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]
本資料は、未刊行文書として日本及び各国の著作権法に基づき保護されております。本資料には、株式会社ブレインパッド所有の特定情報が含まれて おり、これら情報に基づく本資料の内容は、御社以外の第三者に開示されること、また、本資料を評価する以外の目的で、その一部または全文を複製、 使用、公開することは、禁止されています。また、株式会社ブレインパッドによる書面での許可なく、それら情報の一部または全文を使用または公開する ことは、いかなる場合も禁じられております。