しょ〜うぃん広場

おもにTech系なブログ、ときどき個人的なブログ

Webサイトの負荷検証ツールを作ってみた

先週仕事で、負荷検証をしてみたいかも!みたいな話がすこし上がって、どんなツールがあるのか調べてみたら、最近は Gatling というのがちょっとアツいらしい。 昔から使われている(らしい) JMeter はあまりパフォーマンスが出ないとか書いてある記事を見かけたけど、ぼくは使ったことがないのでよくわからない。

Gatling はパフォーマンスを重視して Scala で書かれているんだけど、リクエストのシナリオを書くのに ScalaDSL を書かないといけない。こんな感じ

class MySimulation extends Simulation {

  val conf = http.baseUrl("http://example.com")

  val scn = scenario("Gatling")
      .exec(http("index").get("/"))
      .during(10 minutes) {
    exec(
      http("json").get("/json")
        .check(jsonPath("$.id")
        .saveAs("id"))
    )
  }

  setUp(scn.inject(atOnceUsers(5)))
        .protocols(conf)
}

複雑なリクエストを送りたい時には使い勝手が良いのかもしれないけれど、ScalaDSL とかよくわからないし、書きたくないので、もっと簡単に負荷検証ができるツールを作ってみた。

hakari

ツールの名前は hakari で、測りたいから hakari にした。 Easy to Install, Easy to Write Scenario. をウリにしていて、カップラーメンを待つ3分の間にインストールから実行までできてしまう。

インストール

$ brew tap showwin/hakari
$ brew install hakari

リクエストシナリオを書く

# scenario.yml
TopPage:
  method: "GET"
  url: "http://example.com/"
Login:
  method: "POST"
  url: "http://example.com/login"
  parameter:
    email: "user@example.com"
    password: "secret_password"

負荷検証実行!!!

$ hakari
2016/02/21 18:12:47  hakari Start!  Number of Workers: 2
2016/02/21 18:13:48  hakari Finish!
TopPage
    200: 125 req, 238.66 ms/req

Login
    200: 110 req, 255.11 ms/req
    500: 15 req, 192.18 ms/req

あっという間に負荷検証できて、ビックリする。
上の例では、2並列リクエストでテストを行っていて、1分間にトップページが125回リクエストされて、平均 238ms でレスポンスが返ってきたことがわかる。

デフォルトでは2並列リクエストで1分間の負荷検証を行うけど、もう少し細かな設定もできて、HTTP header をカスタマイズしたかったら

# myconfig.yml
Header:
  Accept-Encoding: "gzip, deflate, sdch"
  Accept-Language: "ja,en-US;q=0.8,en;q=0.6"
  Cache-Control: "max-age=0"
  User-Agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.39 Safari/537.36"

と設定ファイルを書いて

$ hakari -c myconfig.yml -s scenario2.yml -w 10 -m 2

とすると、10並列リクエストで2分間 myconfig.yml に設定した HTTP header で scenario2.yml のシナリオを実行できる。

まとめ

hakari は Gatling や JMeter と比べると、結果表示部分のレポート機能がまだまだ弱いので、そこをもう少し強化する必要がある。逆に、レポート機能はそんなに充実してなくて良いので、手軽にどのぐらいのリクエストをさばけるのか負荷検証したいという場合には hakari を使うと良いと思う。

昨日の午後から開発し始めて、24時間でこのぐらいのツールが作れてしまうので、Go 言語はすごい。 ぼくはすごい Gopher ではないので、テストコードも書いていないし、おそらく Go らしいコードも書けていない。。もっと勉強しなければ。

便利!! と思った方は、遠慮せずに GitHub Star ください!! → showwin/hakari