Pythonで始める負荷試験

 Pythonで始める負荷試験

PyCon JP 2020 Online

2020年8月28日(火)

https://pycon.jp/2020/

3f4bea69d9f180bc3137dc41a263a996?s=128

Yusuke Nishio

August 28, 2020
Tweet

Transcript

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

  2. © BrainPad Inc. 2 • 名前: 西尾 友佑(Yusuke Nishio) ◦

    Twitter: @nissy0409240 • 所属: ブレインパッドプロダクトビジネス本部 • 登壇歴: PyCon JP 2018登壇 ◦ Python研修の作り方-Teaching Is Learning- • 2020年の主な活動 ◦ リスティング広告関連ツール開発 ◦ BrainPadスポンサーブースの中の人 ◦ PB本部Twitter(@BrainPadProduct)の中の人 ▪ ただいま裏実況中です! 自己紹介
  3. © BrainPad Inc. 3 • 資料公開あり ◦ Speaker Deckにて公開しています •

    実況中継大歓迎です ◦ #pyconjp ◦ #pyconjp_4 よろしくお願いします
  4. © BrainPad Inc. 4 • Python製ツールLocustの紹介 • Locustを用いて負荷試験を行う方法 • 負荷試験手法ならびに結果を属人化させない方法

    話すこと
  5. © BrainPad Inc. 5 • きっかけ • Locustとは • 負荷試験の実施

    • デモ アジェンダ
  6. きっかけ

  7. © BrainPad Inc. 7 • 担当プロダクトでとある機能を実装した • 使われ方によっては最大数万件の更新処理が 発生することが可能性があった •

    現状でどれだけ捌けるのかリリース前に 負荷試験を行うことになった ◦ どれくらいのリクエストなら耐えれるかを 調べるだけのシンプルなテスト要件 • 初めての負荷試験でしたので ツールの使い方から調べるレベルでした 背景
  8. © BrainPad Inc. 8 システム構成

  9. © BrainPad Inc. 9 • プロダクトのAPI部分でPythonが使われている ◦ 運用時に使うスクリプトもPythonが使われている ◦ チーム全員書けるので導入コストが低く済む

    • Pythonで書けないかと考えた ◦ “python 負荷試験”で検索 ◦ Locustの存在を知る ◦ 使ってみようと考えた • プログラミング言語の中でPythonが 一番手に馴染んでた ◦ シナリオ書く時間短縮に繋がる 考えたこと
  10. Locustとは

  11. © BrainPad Inc. 11 • GUIのインターフェースもついている Python製の負荷試験ツール • 公式サイト ◦

    https://locust.io/ • ドキュメント ◦ https://docs.locust.io/en/stable/ • ソースコード ◦ https://github.com/locustio/locust • “Locust”とは日本語でバッタや イナゴのことを意味する Locustとは
  12. © BrainPad Inc. 12 • Pythonで実行可能な処理ならなんでも出来る ◦ エンドポイントをリクエスト毎に変更可能 ◦ リクエスト時のボディを変更可能

    ◦ DBとの接続も可能 • 制約があっても対応可能 ◦ セッション保持可能 ◦ タスクの実行順制御 ◦ タスク実行割合制御 前提
  13. © BrainPad Inc. 13 • JMeter ◦ 豊富なレポートや複雑なシナリオを 書くことが可能 ◦

    古くからあるため情報は沢山ある ◦ メモリ管理が面倒(たまに落ちる) • Gatling ◦ 豊富なレポートや複雑なシナリオを 書くことが可能 ◦ Scalaでシナリオを書ける 他のツールとの比較
  14. © BrainPad Inc. 14 • 下記コマンドを実行(Mac環境) $ pip3 install locust

    • 実行後に下記コマンドを実行する $ locust --help ◦ ヘルプが表示されることを確認 • サポートされているPythonのバージョン ◦ 3.6 ◦ 3.7 ◦ 3.8 インストール方法
  15. © BrainPad Inc. 15 • Pythonスクリプトで記述します • ファイル名はなんでもOK ◦ デフォルトではlocustfile.pyに

    記載された内容が実行されます シナリオを作成
  16. © BrainPad Inc. 16 シナリオ例

  17. © BrainPad Inc. 17 APIサーバー例

  18. © BrainPad Inc. 18 • 下記コマンドを実行 $ locust -H http://localhost:8080

    -f locustfile.py ◦ -fオプションで実行したいシナリオが書かれたファイルを 指定可能 ◦ -Hオプションでリクエスト先エンドポイントを指定可能 ◦ -Pオプションで起動時のポートを指定可能 (デフォルトでは8089ポート) 起動方法
  19. © BrainPad Inc. 19 起動時の画面

  20. 負荷試験の実施

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

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

  23. © BrainPad Inc. 23 テスト実行中

  24. © BrainPad Inc. 24 テスト実行中

  25. © BrainPad Inc. 25 テスト実行中

  26. © BrainPad Inc. 26 テスト実行中

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

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

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

  30. © BrainPad Inc. 30 • Pythonで書かれたソースコードなのでGit管理が可能 ◦ どのような意図でどう実装したかが残る ◦ 実行したシナリオもそのまま共有される

    ◦ 自分の手元から試すことも可能 シナリオの更新・共有
  31. © BrainPad Inc. 31 • Locustからいくつかのシナリオを実行 どこまで耐えられるのかを計測 現場での様子

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

    現場での様子
  33. デモ

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

    デモ
  35. © BrainPad Inc. 35 • Locustを用いた負荷試験方法についてお話させて頂きました • 負荷試験という一見コーディングとは関係ない作業も Pythonを用いたツールを用いれば コーディングとして行える

    • Pythonに寄せることでツールの使い方ではなく Pythonでどのように記述するかに変わる • コードとして残ることは再現性のある ドキュメントとも言えるのではないか まとめ
  36. © BrainPad Inc. 36 • ブレインパッドではPythonエンジニアを積極採用中です ◦ アプリケーションエンジニア ◦ 機械学習エンジニア

    ◦ データサイエンティスト • ご応募お待ちしています! ◦ https://www.brainpad.co.jp/recruit/ • 詳しい話はスポンサーブースで! おやくそく
  37. © BrainPad Inc. 37 ご静聴ありがとうございました

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