負荷試験のはなしの続き

さて,遅くなってしまいましたが「負荷試験のはなし」の続きを書いていきたいと思います.

負荷試験のツールlocust を採用したという話までしましたね.

では,locust のコードについて書いていきたいと思います.前に書いたとおり,Install などについては省略しますね.

構成について

master が 1 台,slave が 2 台の 合計 3 台で負荷をかけていきます.

実行方法について

master で下記のようなコマンドを,実行します.

sudo locust -f locustfile.py --host=http://stress-test.xxx.xxx --master --logfile='./log/locust.log'

そして,slave で下記のようなコマンドを実行します.

sudo locust -f locustfile.py --slave --host=http://stress-test.xxx.xxx --master-host=1.1.1.1

master と slave の間では,必要なポートを許可しておく必要があります.

また,負荷試験の対象となるサーバーは,コマンドラインオプションで指定します.

コードについて

resource.setrlimit(resource.RLIMIT_NOFILE, (10000, 10000))

URLS = [
    "a=1",
    "a=2",
    "a=3"
]

PW = getpass.getpass(' Enter Password:')
logfile = open('./log/result.csv', 'w')
var  = 0
data = []

def output_request_log_as_csv_format(request_type, name, response_time, response_length, **kw):
  .
  .
  .
  
def close_log_file():
  .
  .
  .
  
events.request_success += output_request_log_as_csv_format
events.quitting   += close_log_file

class UserBehavior(TaskSet):
    def on_start(self):
        self.client.headers = self.headers

    @task(5000)
    def action_landing_page(self):
        self.client.get(random.sample(URLS, 1)[0], auth=("user", PW))

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    min_wait=1000
    max_wait=3000

コード全体のイメージとしては,上記のようになります.

events.request_successevents.quitting でリクエストが成功した時と,リクエストが終了した時に それぞれ処理を実行しています.

ここでは,レスポンスタイムなどの情報が欲しかったので,CSV として,結果を書き込んでいます.

そして,リクエストが終了した時に CSV ファイルを閉じています.

我々の環境では,負荷試験用の環境には認証をかけているので,elf.client.get("/", auth=("user", PW)) のようにしています.

そして,UserBehavior でいわゆるシナリオ,ユーザーの振る舞いを記述しています.

URLS 配列の中からランダムに1つを選び,Get しています.

また,十分にresourcesを使えるよう

resource.setrlimit(resource.RLIMIT_NOFILE, (10000, 10000))

のようにして,RLIMIT_NOFILE を増やしています.

この子たちは,Python の Script などで自由度はとても高いです.

反面,やりたいことは自分で書かなければならない部分も大きいですが,この程度の処理ならさほど時間もかからないでしょう.

最後に,所感ですが,複数台でそれなりの負荷がかけられるツールとしては,locust は利用しやすいと思います. 詳細な分析を必要としなければ,locust を採用してみてはいかがでしょう?

負荷試験についてのはなし

こんばんは.

今日こそは,技術的な話題を書いていきます.

僕はインフラエンジニアなんですが,最近,仕事でとあるサイトの構成を変更しました. そこで,構成変更後のサイトが十分な req/sec を発揮できるかを確かめる必要がありました.

以前までの負荷試験では,gatling を利用していましたが,今回,負荷試験するサイトは 1つのサーバーからかける負荷には十分耐えられるだろうということがわかっていました.

そこで,複数のサーバーから分散して負荷をかけられるようなツールを使う必要がありました. 代表的なものとしては,jmater などがあります.

しかし,構成変更を完了するまでの時間が少なかったこと,そして,最悪でも元のサーバーのスペックから必要な resources を見積もれるだろう ということもあり,jmater ほどきちんとした情報を集める必要はありません.

そこで,もっと簡単に付加をかけることができそうな locust を採用することにしました.

この子は,Python 製の負荷試験のためのフレームワークというようなもので,簡単なコードを書くだけで負荷試験を実現できます. もちろん,複数のサーバーから負荷をかけることもできます.

インストール方法などは,他のブログ等を参考にしてもらうとして,ここでは,locust を利用した負荷試験のためのコードを紹介したいと思います.

ということで,明日はコードについて解説します

禁煙を始めたはなし

人生何度目かの禁煙を始めました.

何度かタバコをやめていて,最長で 1 年とちょっと,挫折したきっかけはとある古いミドルウェアとの戦いでイライラしすぎて...と言った感じです.

僕は,禁煙するときに ”ニコチンパッチ” か ”チャンピックス” を使います. どちらも禁煙にあたっての離脱症状をとっても抑制してくれます. ストレスフリーな連休中(ちょうど今だね!)に始めると,辛さは殆ど無く禁煙を続けていくことができます.

以前,根性だけでやめようとした時は,まぁ,キツかったです.

ということで,挫折したら罵倒すると良いと思うよ!.


ブログを 一ヶ月連続で続けようという活動を,会社の仲間としています. 2日目にして,技術的な内容ではなくなっちゃいましたが,何個か書きたい技術的な話題もあるので, 次とかその次とかにはきっと技術的な話題を書きます....

ErgoDox EZ を買いました

買いました.初日です. まず,今日一日はデフォルトのキー配列で利用してみました.

初めてキーボードに触った時のような時の気持ちを取り戻した1日でした.

まず,良かったこととしては,入力姿勢はものすごく楽です. 健康によい感じがします,肩こりとおさらばできそうです.

次に,運指が矯正されます.いつも,適当に楽な指で入力していたのが,正しい指運びになります. あと,親指を活用できるのが良いですね.

次に,キツかった点.

ある程度わかっていたことですが,修飾キーの配置が全然違います. なので,キーボードショートカットを利用するときにいちいち立ち止まって考えなければならないのが辛いです.

あと,記号の位置も結構違います. コーディングの時,かなり戸惑います.

そして,指運びを普通のキーボードを使っている時と変える必要がありました. 割と厳密に,タッチタイピングのお作法に従って,運指することを強制される感じ.

だけど,このデメリットは,基本的には,慣れで改善する問題なので,しばらく利用していくうちに なんとかなるだろうと楽観してます.

何よりも,日常的にいつも行っている動作を見直す,という行為がとても面白いです. ほんとに初心者のようなタイピングしかできない状態に立ち返って,そこから,練習して段々慣れていくというのが面白い.

練習して,できないことができるようになるってのはどんなに小さいことでも面白いものです.

...,まぁこの記事は,MacBook Pro のキーボードで書いてるんですけどね. ErgoDox EZ ,会社においてきちゃったし,GW あけにはまた赤ちゃんのような状態に戻っているんだろうなぁ....

mruby-cli を頑張る

Hello World まで

mruby-cli を利用すると,LinuxOSX などでネィティブに動作するバイナリを作成できるらしいです.

puppet で Ruby で作成したコードを Gem を利用してデプロイしようとしたところ,ドハマリしたので,それならいっそのこと, こういったツールを使って,バイナリぽんおきで動くようにすると幸せかなぁと思ったのがきっかけです.

mruby にしたのは,ngx_mruby とか,ミドルウェアを操作する言語として mruby が採用される事例が多くなってきたのと, 社内で mruby が流行ってるからですね.

まずは,インストールと hello world から.

インストールは,https://github.com/hone/mruby-cli からバイナリを落としてきて, PATH が通った適当な場所に置くだけです.

> wget https://github.com/hone/mruby-cli/releases/download/v0.0.4/mruby-cli-0.0.4.tgz
> tar xzvf mruby-cli-0.0.4.tgz
> cp x86_64-apple-darwin14/mruby-cli ~/bin/

そして,

> mruby-cli --setup hello_world
> cd hello_world
> docker-compose run compile

ってやると,hello_world まではできます.

転職しました

むちゃくちゃ久しぶりな更新になりましたが、9月7日に転職しました。 1週間程度を、現職で過ごしてみて、感想を少しまとめてみようかと思います。

これから先も、現職で働き始めた驚きを忘れないようにするために。

1週間を過ごしてみて

まず、入社してみて一番に感じたことは孤立しないようにフォローしてくれてるなってことです。 例えば、いろんな人とランチに連れてってくれたりとか。

それだけじゃなくて、入社時のフォローもすごく手厚かった。 割と早い段階で仕事上で、必要なツールや情報へのアクセスは整えられていった感じです。 前職もその前も、割と手探りで、この辺り頑張って行った感じだったので良さがありました。

人と環境については、こんな感じです。

技術的な面だと、インフラをコードとして管理するってのが徹底されている感じしました。 いわゆる「infrastructure as code」を徹底している感じで、運用をPuppetのコードベースで行っています。

前職では、Chefを利用していたんですが、これは、プロビジョニングツールとしてしか利用していませんでした。 運用は、手順書ベースで行っていました。

前職で、一度、Chefベースで構築から運用までやろうとして挫折しているんで、若干悔しい感じがしますが、 現職では、理想に近い形で「infrastructure as code」ができているんじゃないかなと思います。

あとは、現職だと、情報をGHEに集約しているんですが、これも良いですね。 前職では、情報が複数ツールに分散していたんで、いろいろ大変でした。

まとめ

書こうと思えば、まだ、たくさんかけるんですが、とりあえずこんな感じで。 まだまだ、働き始めて2週間程度なので、これからいろいろな驚きに出会っていくんだと思います。 次はひと月後ぐらいに、また、印象をまとめてみようかと思います。