1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GKE(autopilot) + locust で数万qpsが可能な負荷テスト環境作ってみたメモ

Last updated at Posted at 2022-01-18

背景

  • 数万qps程度のGETリクエストの負荷テストを行いたい
  • GKE(autopilot) と locustで作成してみる

locustとは

負荷テストツール。Pythonでシナリオ定義できる。また、分散環境構築対応しており、GKEとの相性良い。

Getting Started

  • locust ってコマンド打つだけでサーバー起動し、実行用のUIにアクセスできる
    • そこからoption設定入力して実行可能
  • コマンドだけでも実行可能

locust -H https://onesdata-prod.appspot.com --headless --users 10 --spawn-rate 1

シナリオサンプル(paramに現在時刻を入れたGETリクエスト)

locustfile.py
from locust import HttpUser, task
import time

class RequestUser(HttpUser):

    @task
    def request(self):
        self.client.get(f"/path?timestamp={int(time.time())}&name=munaita")
  • GET投げるだけならこれでok
  • Pythonなのでなんでもできそう

GKE + locust

  • 数万qpsというシナリオを実行するためには単体のマシンでは無理(ローカル実行で300qps程度)
  • 分散環境で実行する
  • GKE(autopilot)で管理が楽
  • GCPの公式ドキュメントに GKE + locustのチュートリアルがあるのでこれに沿って作業する

作業メモ

  • 基本上記のチュートリアルで動くが、一部クラスタの作成箇所はautopilot用に変更する必要あり
export REGION=asia-northeast1
export PROJECT=$(gcloud config get-value project)
export CLUSTER=your-cluster-name
export TARGET=${PROJECT}.appspot.com
export SCOPE="https://www.googleapis.com/auth/cloud-platform"

# クラスタ(autopilot)の作成
gcloud container clusters create-auto $CLUSTER --region $REGION --scopes=logging-write,storage-ro
# クラスタの接続
gcloud container clusters get-credentials $CLUSTER --region $REGION --project $PROJECT

注意

  • このチュートリアルのコードは古いのですでにlocustの最新チュートリアルコードが動かなかったりする
    • requirements.txtを最新に更新すると便利
    • バージョンの更新に伴い、locustコマンドの --slaveオプションが --worker に変更されているのでrun.shを変更する必要がある
  • 35,000qpsを実現するための構成
    • ワーカーレプリカ: 1000 add_user: 10
    • 1ユーザー10回リクエストするシナリオ
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?