「Riak気になるんだけど、速いの?!」という方に残念なお知らせです。Riakはそんなに目立って速いわけじゃないです。速いのがいいという方はKyoto Tycoonやmemcachedを使ってください。マイクロベンチマークで速度を稼いでも自分のユースケースに合ってなければプロダクションで性能は出ないしやりたいことが達成できるかどうかも分からない。
なので、「自分のユースケース」でベンチマークが書けるツールをご紹介。その名もbasho_benchだ。basho_benchというとぼくの同僚となった板わさ先生が書いた記事が有名だが、その後さらに便利になったので一旦解説しておきたい。
定番Riakのインストール
復習。今日知ったのだけどもstageというのがある。Erlang R15B01がサポートされているが、まあR15B03-1でも動く。
$ git clone git://github.com/basho/riak $ cd riak && make stage $ ulimit -n 4096 $ cd rel/riak && bin/riak start $ bin/riak attach
attachしておくのは、何かあったらそこにログっぽくエラーが表示されるから。別に表示しなくてもよい。
basho_benchビルド
$ git clone git://github.com/basho/basho_bench
$ cd basho_bench && make
簡単すぎる。
測定
$ ./basho_bench examples/riakc_pb.config
これは、RiakのPBクライアントでデータを測定する。他にもさまざまなbasho_bench_driverがあるので、適宜examples/*.configをみてもらいたい。
結果をみる
さてここからが以前と違うところだ。以前はグラフを画像にするためだけにRをインストールして依存ライブラリを解決してやる必要があり、しかも、サーバー側で作業していると作成した画像をローカルに持ってこないと表示できないなんてことがあった。しかし、@itawasa先生の尽力によりgnuplotでも描画できるようになっている。なので
$ sudo port install gnuplot
などとしてgnuplotをつかえる状況にしておいてから、
$ priv/gp_throughput.sh
としてみよう。Macだとグラフがパッと表示されたはずだ。すばらしい。しかしこれだけじゃない。
priv/gp_throughput.sh -t dumb
とすると、なんとコンソール上にグラフが表示されるのだ!!!これはすごい!!
Throughput [ops/sec] 1000 ++--------+--------+---------+---------+---------+--------+--------++ +A + + + + + + + 900 ++A................................................................++ 800 ++*................................................................++ | * : : : : : : | 700 ++.*..AA..A.AAAAA......A...........................................++ | * A AA:A * :AA *AAAA A AAA AA : : AAAA | 600 ++.A.*...........A..*.A.....**A...A..AAA.A.AAAAAAAAAAAA...A........++ 500 ++..A.............AA........A...........A.A........................++ | : : : : : : | 400 ++.................................................................++ | : : : : : : | 300 ++.................................................................++ | : : : : : : | 200 ++.....................................................total.**A***++ 100 ++....................................................failed ##B###++ + + + + + + + + 0 +BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB--------++ 0 100 200 300 400 500 600 700 Elapsed [sec]
これでわざわざ面倒なことをしなくても簡単に大体のスループットやレイテンシを測定できるようになる。
ちなみにhttpの性能を測りたいときは
$ ./basho_bench examples/httpraw.config
で、測定結果は
Throughput [ops/sec] 500 ++----------+----------+-----------+----------+----------+----------++ A******** + + + + + + 450 ++.......***....................***A**********......................++ 400 ++..........A**********...******..............A***********AA........++ | : A** : : : | 350 ++..................................................................++ | : : : : : | 300 ++..................................................................++ 250 ++..................................................................++ | : : : : : | 200 ++..................................................................++ | : : : : : | 150 ++..................................................................++ | : : : : : | 100 ++......................................................total.**A***++ 50 ++.....................................................failed ##B###++ + + + + + + + 0 B###########B##########B###########B##########B###########BB--------++ 10 20 30 40 50 60 70 Elapsed [sec]
というわけで、PBの方がざっくり1.5倍くらい速いことが分かる。
他の使い方を知りたい場合は、*.configに大抵の設定値があり、その実装は src/basho_bench_driver_foobar.erl に書かれているのでそれを見るとよい。exampleにあるこのふたつを読めばなんとなく使い方は分かると思う。分からない場合は、Erlangの勉強から始めよう!!!