Slide 1

Slide 1 text

西尾 友佑(@nissy0409240) 2020年8月28日 PyCon2020 Pythonで始める負荷試験

Slide 2

Slide 2 text

© BrainPad Inc. 2 ● 名前: 西尾 友佑(Yusuke Nishio) ○ Twitter: @nissy0409240 ● 所属: ブレインパッドプロダクトビジネス本部 ● 登壇歴: PyCon JP 2018登壇 ○ Python研修の作り方-Teaching Is Learning- ● 2020年の主な活動 ○ リスティング広告関連ツール開発 ○ BrainPadスポンサーブースの中の人 ○ PB本部Twitter(@BrainPadProduct)の中の人 ■ ただいま裏実況中です! 自己紹介

Slide 3

Slide 3 text

© BrainPad Inc. 3 ● 資料公開あり ○ Speaker Deckにて公開しています ● 実況中継大歓迎です ○ #pyconjp ○ #pyconjp_4 よろしくお願いします

Slide 4

Slide 4 text

© BrainPad Inc. 4 ● Python製ツールLocustの紹介 ● Locustを用いて負荷試験を行う方法 ● 負荷試験手法ならびに結果を属人化させない方法 話すこと

Slide 5

Slide 5 text

© BrainPad Inc. 5 ● きっかけ ● Locustとは ● 負荷試験の実施 ● デモ アジェンダ

Slide 6

Slide 6 text

きっかけ

Slide 7

Slide 7 text

© BrainPad Inc. 7 ● 担当プロダクトでとある機能を実装した ● 使われ方によっては最大数万件の更新処理が 発生することが可能性があった ● 現状でどれだけ捌けるのかリリース前に 負荷試験を行うことになった ○ どれくらいのリクエストなら耐えれるかを 調べるだけのシンプルなテスト要件 ● 初めての負荷試験でしたので ツールの使い方から調べるレベルでした 背景

Slide 8

Slide 8 text

© BrainPad Inc. 8 システム構成

Slide 9

Slide 9 text

© BrainPad Inc. 9 ● プロダクトのAPI部分でPythonが使われている ○ 運用時に使うスクリプトもPythonが使われている ○ チーム全員書けるので導入コストが低く済む ● Pythonで書けないかと考えた ○ “python 負荷試験”で検索 ○ Locustの存在を知る ○ 使ってみようと考えた ● プログラミング言語の中でPythonが 一番手に馴染んでた ○ シナリオ書く時間短縮に繋がる 考えたこと

Slide 10

Slide 10 text

Locustとは

Slide 11

Slide 11 text

© BrainPad Inc. 11 ● GUIのインターフェースもついている Python製の負荷試験ツール ● 公式サイト ○ https://locust.io/ ● ドキュメント ○ https://docs.locust.io/en/stable/ ● ソースコード ○ https://github.com/locustio/locust ● “Locust”とは日本語でバッタや イナゴのことを意味する Locustとは

Slide 12

Slide 12 text

© BrainPad Inc. 12 ● Pythonで実行可能な処理ならなんでも出来る ○ エンドポイントをリクエスト毎に変更可能 ○ リクエスト時のボディを変更可能 ○ DBとの接続も可能 ● 制約があっても対応可能 ○ セッション保持可能 ○ タスクの実行順制御 ○ タスク実行割合制御 前提

Slide 13

Slide 13 text

© BrainPad Inc. 13 ● JMeter ○ 豊富なレポートや複雑なシナリオを 書くことが可能 ○ 古くからあるため情報は沢山ある ○ メモリ管理が面倒(たまに落ちる) ● Gatling ○ 豊富なレポートや複雑なシナリオを 書くことが可能 ○ Scalaでシナリオを書ける 他のツールとの比較

Slide 14

Slide 14 text

© BrainPad Inc. 14 ● 下記コマンドを実行(Mac環境) $ pip3 install locust ● 実行後に下記コマンドを実行する $ locust --help ○ ヘルプが表示されることを確認 ● サポートされているPythonのバージョン ○ 3.6 ○ 3.7 ○ 3.8 インストール方法

Slide 15

Slide 15 text

© BrainPad Inc. 15 ● Pythonスクリプトで記述します ● ファイル名はなんでもOK ○ デフォルトではlocustfile.pyに 記載された内容が実行されます シナリオを作成

Slide 16

Slide 16 text

© BrainPad Inc. 16 シナリオ例

Slide 17

Slide 17 text

© BrainPad Inc. 17 APIサーバー例

Slide 18

Slide 18 text

© BrainPad Inc. 18 ● 下記コマンドを実行 $ locust -H http://localhost:8080 -f locustfile.py ○ -fオプションで実行したいシナリオが書かれたファイルを 指定可能 ○ -Hオプションでリクエスト先エンドポイントを指定可能 ○ -Pオプションで起動時のポートを指定可能 (デフォルトでは8089ポート) 起動方法

Slide 19

Slide 19 text

© BrainPad Inc. 19 起動時の画面

Slide 20

Slide 20 text

負荷試験の実施

Slide 21

Slide 21 text

© BrainPad Inc. 21 テスト条件の変え方 作成されるクライアント数の最大値 (ユーザー数の最大値と同義) クライアントの作成スピード (毎秒ごと)

Slide 22

Slide 22 text

© BrainPad Inc. 22 テスト開始 Start swarmingボタンを押すとリクエスト実行 が開始される

Slide 23

Slide 23 text

© BrainPad Inc. 23 テスト実行中

Slide 24

Slide 24 text

© BrainPad Inc. 24 テスト実行中

Slide 25

Slide 25 text

© BrainPad Inc. 25 テスト実行中

Slide 26

Slide 26 text

© BrainPad Inc. 26 テスト実行中

Slide 27

Slide 27 text

© BrainPad Inc. 27 テスト実行終了

Slide 28

Slide 28 text

© BrainPad Inc. 28 テスト結果の共有

Slide 29

Slide 29 text

© BrainPad Inc. 29 テスト結果の共有

Slide 30

Slide 30 text

© BrainPad Inc. 30 ● Pythonで書かれたソースコードなのでGit管理が可能 ○ どのような意図でどう実装したかが残る ○ 実行したシナリオもそのまま共有される ○ 自分の手元から試すことも可能 シナリオの更新・共有

Slide 31

Slide 31 text

© BrainPad Inc. 31 ● Locustからいくつかのシナリオを実行 どこまで耐えられるのかを計測 現場での様子

Slide 32

Slide 32 text

© BrainPad Inc. 32 ● 検証環境で何回か試しスペックを見積もる ● 環境の見直しを行いリリース ● リリース後も問題なく稼働 現場での様子

Slide 33

Slide 33 text

デモ

Slide 34

Slide 34 text

© BrainPad Inc. 34 ● 実行したコード ● https://github.com/nissy0409240/locust_demo ● 起動方法はREADME.mdをご確認下さい デモ

Slide 35

Slide 35 text

© BrainPad Inc. 35 ● Locustを用いた負荷試験方法についてお話させて頂きました ● 負荷試験という一見コーディングとは関係ない作業も Pythonを用いたツールを用いれば コーディングとして行える ● Pythonに寄せることでツールの使い方ではなく Pythonでどのように記述するかに変わる ● コードとして残ることは再現性のある ドキュメントとも言えるのではないか まとめ

Slide 36

Slide 36 text

© BrainPad Inc. 36 ● ブレインパッドではPythonエンジニアを積極採用中です ○ アプリケーションエンジニア ○ 機械学習エンジニア ○ データサイエンティスト ● ご応募お待ちしています! ○ https://www.brainpad.co.jp/recruit/ ● 詳しい話はスポンサーブースで! おやくそく

Slide 37

Slide 37 text

© BrainPad Inc. 37 ご静聴ありがとうございました

Slide 38

Slide 38 text

株式会社ブレインパッド 〒108-0071 東京都港区白金台3-2-10 白金台ビル3F TEL:03-6721-7002 FAX:03-6721-7010 www.brainpad.co.jp [email protected] 本資料は、未刊行文書として日本及び各国の著作権法に基づき保護されております。本資料には、株式会社ブレインパッド所有の特定情報が含まれて おり、これら情報に基づく本資料の内容は、御社以外の第三者に開示されること、また、本資料を評価する以外の目的で、その一部または全文を複製、 使用、公開することは、禁止されています。また、株式会社ブレインパッドによる書面での許可なく、それら情報の一部または全文を使用または公開する ことは、いかなる場合も禁じられております。