はじめに
前回はAPIサーバーと負荷テストリクエストを行うデバイスを分けることで、
RPSを向上させることが可能か検証したが特に良い結果は得られなかった。
今回で最後にしようと思うが、複数台でmaster-slaveを構成して負荷試験を行う。
関連記事
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(1)
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(2)
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(3)
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(4)
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(5)
【locust】負荷試験ツールLocustを使ってローカルPCで一万RPSを目指す(6)
実行環境
実行環境は主に以下のようになります。
- Mac Studio(2022) Apple M1 MAX メモリ32GB GPU24コア <= この記事使用
- MacBook Pro(2020) M1 メモリ16GB GPU 8コア <= この記事使用
- MacBook Pro(2017) intel core i5 メモリ8GB GPU2GB? <= この記事使用
- Python 3.9.13 (web api server 構築のため それぞれのデバイスに環境構築した)
- pyenv(必須ではない)
環境構築
(2)の記事をご参考ください。
また今回使用するPCそれぞれにapi serverとlocustが実行できる環境を整えておく。
dokcer-compose.ymlのworkerを編集する。
–master-host のオプションにマスターとするデバイスのIPを指定する。
1 2 3 4 5 |
worker: image: locustio/locust volumes: - ./:/mnt/locust command: -f /mnt/locust/test.py --worker --master-host {ここ!} |
MACではターミナルからifconfigを実行することで自身のデバイスに割り振られているIPを確認できる。他のOSだとipconfigとかだった気がする。
またtest.pyのhost 変数をAPI サーバーのIPに変更する必要がある為注意!
API サーバーはMAC Studioに立ち上げ
- Mac Studio にslave数5
- MacBook Pro(2020) にslave数3
- MacBook Pro(2017)にslave数1
を構成し実行する。
masterは3つのデバイスそれぞれで担ってもらい変化を確認する。
実行結果
- 最大接続人数 = 10000
- 1秒あたりに増加するユーザー数 = 1000
いつもの前提条件
master = Mac Studio
どうせ上手くいかないだろうと思いながら実行していると…
約3800RPSを超えていた!! 最高記録!!
各デバイスで並列実行がうまく実行できていたのだろうか?
master = MacBook Pro(2020)
テンション上がっているのでドンドン実行しよう!
約3500RPS!こちらも上昇しているがmasterも高性能である必要があるか。。。
master = MacBook Pro(2017)
約3800RPS!なぜ上昇する?masterの性能はそこまで重要ではないのか?
最後に(重要!)
今までの実行結果から最大RPSを出せる構成はおそらく
master => なんでもいい
slave => 各デバイスの最大スループットを達成できる数
を満たす必要があることがなんとなく把握できた。
最後にこれらを満たすと思う最高の構成で実行した結果を見せて終了したい。
最後の構成は以下のようになった。
- Mac Studio にslave数7
- MacBook Pro(2020) にslave数5
- MacBook Pro(2017)にslave数1 <=master
Mac Studio と Pro(2020)はそれぞれアクティビティモニタで負荷の確認をしていたが、まだギリギリ余力がありそうだったため、それぞれ二つslave数を増加した。
masterは最終的な予想よりシステム性能に依存しないと思われるためこの中で、一番性能の低いPro(2017)を選択した。
実行結果
最後の実行結果は約4100RPSを達成!
振り返り
負荷試験においてRPSを向上させるために色々と試行錯誤を繰り返して、
最終的には4000RPSを越えることができた。
目標であった1万RPSの半分もいっていないが、今回使用した環境では、最大に近いRPSを出せたと思う。
まぁ一万RPSを越すにはAWSやGCPの力を借りるのが早いのだろうけど。。。
それでもデバイスの数の暴力でもRPSを向上させられることがわかって良かった。
MacBook Pro(2020)が10台くらいあれば一万RPS行けそうな気がした。
ほぼほぼ備忘録ですが、誰かの役に立てば幸いでございます。
コメント