Locust で おうちDCで運用中の Next.js ウェブアプリの負荷テストを実施する

May 19, 2024, 11:17 PM
Kubernetes でクラスターを組んで、クラスター内で、Next.js で開発したウェブアプリ(本サイト)を運用しています。
現在、Podは固定で2つ(ノードは、Raspberry Pi 5)立ち上げています。この状態において、どれくらいの同時アクセスに耐えられるかのチェックを行ってみたいと思います。

Locustとは

Pythonで書かれたオープンソースの負荷テストツールであり、特にWebアプリケーションやAPIのパフォーマンスをテストするために設計されています。

Locustの特徴

  • スクリプトベース
    テストシナリオをPythonコードで記述するため、柔軟なテストが可能です。
  • シンプルなインターフェース
    簡単に始められ、Webインターフェースを通じてテストを監視・管理できます。
  • 分散テスト
    分散システムとして機能し、大規模な負荷テストを実行できます。
  • 拡張性
    テストシナリオやユーザーベヘイビアをカスタマイズ可能です。

Locustのインストール&初期設定

マスターノードで実施
$ cd 
$ mkdir microaiLocust
$ cd microaiLocust
$ pipenv shell
$ pipenv install locust
$ locust -V
locust 2.27.0 from /Users/home/.local/share/virtualenvs/microaiLocust-Mhh4d-dm/lib/python3.10/site-packages/locust (python 3.10.10)
インストール完了🍺

シンプルなアプリの作成

$ nano locustfile.py
以下の内容を貼り付けて保存
from locust import HttpUser, task

class HelloWorldUser(HttpUser):
@task
def hello_world(self):
self.client.get("")

起動

$ locust
[2024-05-19 21:25:03,096] mac-mini.local/INFO/locust.main: Starting web interface at http://0.0.0.0:8089
[2024-05-19 21:25:03,102] mac-mini.local/INFO/locust.main: Starting Locust 2.27.0

ウェブUIにアクセス

http://localhost:8089/



Number of users (peak concurrency): 最大同時アクセスユーザー数
Spawn rate (users started/second) : 1秒ごとに増えるユーザー数
Host: 負荷をかける対象のホスト名
を入力して「START」ボタンをクリックすると負荷テストがスタートします。

テスト結果


現状、Pod 2個だと70人の同時アクセスでレスポンスタイム遅くなりだし、かつ、Failueres も発生しました。
今後、オートスケーリングの設定を行い、アクセス数が増えてきたら(1Podあたり、35アクセス)オートスケールするようにしていきたいと思います。
Jetson Orin Nano 16G に pyenv, pipenv をインストールする
fastAPI で1分間にNリクエストがきたら Error 429 Too Many Requests を発生させる