share facebook facebook twitter menu hatena pocket slack

2016.04.26 TUE

Docker Compose + Locust でカジュアルにスケールすることを期待する負荷試験環境構築の考察

川原 洋平

WRITTEN BY 川原 洋平

ども、かっぱです。

tl;dr

タイトルは面倒臭い感じですが、要は Docker Compose と Locust を組み合わせてみようという試みです。

参考

スタディサプリ on Quipper プラットフォームを支える技術 - hakobera's blog
前置き hakobera.hatenablog.com この記事を公開した当時はまだオープンにできなかったのですが、実はこの記事は2月25日にリリースされたスタディサプリ(受験サプリ)を Quipper のプラットフォームに載せ替えるという移行プロジェクトを前提として内容も含んでいま...

hakobera.hatenablog.com

Docker ComposeでLocustの負荷試験環境を作成する - Qiita
負荷試験の環境を手軽に作りたいという思い、Dockerで使って作ってみた。基本的には下記のものとほとんど下記を参照しています。+αとしてDocker Compose使うとよりいいかんじにmaster slave構成ができるという...

qiita.com

有難うございます。

考察

最終的にはこんなイメージ

20160312025415

になります。

教材

inokappa/docker-locust-sample
Contribute to docker-locust-sample development by creating an account on GitHub.

github.com

Locust という負荷テストツール

すっかり書いたことを忘れていましたが、以下のような記事を書いていました。


cloudpack.media

  • Python で書かれた負荷テストツール
  • お手軽にクラスタを構成出来る
  • テストシナリオを Python DSL で記載出来る

Dockerfile

Docker イメージのサイズを出来る限り抑えることが出来ると謳われていて、Docker のオフィシャルイメージにも採用されるという Alpine Linux を利用してイメージを作成してみます。

FROM python:2.7.11-alpine
RUN apk update && 
    apk add python-dev build-base && 
    pip install locustio pyzmq && 
    apk del python-dev && 
    rm -f /var/cache/apk/* && 
    mkdir /locust
ADD test.py /locust/test.py
EXPOSE 5557 5558 8089
ENTRYPOINT ["/usr/local/bin/locust", "-f", "/locust/test.py"]

レイヤーも抑える努力も少しやってみる。Alpine Linux について引き続き勉強していかん。

docker-compose.yml

以下のようにシンプルに。

version: "2"
services:
  master:
    build: .
    command: -H http://example.inokara.com --master
    ports:
      - "8080:8089"
  slave:
    build: .
    command: --slave --master-host=master
    depends_on:
      - master

マスターとスレーブのそれぞれの起動方法についても上記の参考記事をご覧ください。

docker-compose up

$ docker-compose up

Locust のマスターとスレーブが一台ずつ起動されて以下のように出力されます。

$ docker-compose up
Starting dockerlocustsample_master_1
Starting dockerlocustsample_slave_1
Attaching to dockerlocustsample_master_1, dockerlocustsample_slave_1
master_1 | [2016-03-11 17:30:51,096] 2b816ee3af3f/INFO/locust.main: Starting web monitor at *:8089
master_1 | [2016-03-11 17:30:51,099] 2b816ee3af3f/INFO/locust.main: Starting Locust 0.7.3
slave_1  | [2016-03-11 17:30:51,153] aff9eddb5f26/INFO/locust.main: Starting Locust 0.7.3
master_1 | [2016-03-11 17:30:51,156] 2b816ee3af3f/INFO/locust.runners: Client 'aff9eddb5f26_6d0fce57bf760b972b4482f1701db688' reported as ready. Currently 1 clients ready to swarm.

ブラウザからもアクセスしてみます。

20160312023324

スケールアップ&ダウン

Docker Compose ならばスケールアップ、ダウンもお手の物です。

$ docker-compose scale slave=2

スケールアップしてみると…以下のように Slave が 2 になる。

20160312023601

スケールダウンも以下のように実行すると Slave が 1 になる。

$ docker-compose scale slave=1

簡単。

しかし…

この状態だと Docker Engine が動いている単一のホスト上でスケールアップ、スケールダウンするだけなのでつまらないし、そもそもホストの性能限界に達してしまい負荷をかけ続けることが出来なくなりますな。これを解決する方法を次回は考察してみます。

ということで

Alpine Linux は

ホントにちっちゃい。pull がめっちゃ速く感じました。

Locust についても

試験結果の読み方等を復習する必要があります。

元記事はこちら

Docker Compose + Locust でカジュアルにスケールすることを期待する負荷試験環境構築の考察