ようへいの日々精進XP

よかろうもん

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

ども、かっぱです。

tl;dr

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


参考

hakobera.hatenablog.com

qiita.com

有難うございます。


考察

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

f:id:inokara:20160312025415p:plain

になります。

教材

github.com

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

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

blog.cloudpack.jp

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.

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

f:id:inokara:20160312023324p:plain

スケールアップ&ダウン

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

$ docker-compose scale slave=2

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

f:id:inokara:20160312023601p:plain

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

$ docker-compose scale slave=1

簡単。

しかし...

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


ということで

Alpine Linux

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

Locust についても

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