kestrelを試してみたよ
メッセージキューイングシステムが必要でActiveMQとか調べてたけど、やっぱなんかめんどくさそうだし、必要以上にエンタープライズ臭がするのでkestrelを試してみました。
kestrelはTwitterのバッググラウンドで使われている(らしい)、メッセージキューイングシステムです。
特徴は、ゆろよろさんのブログにも和訳(githubにおいてあるREADMEの和訳)がありますが、以下の通りです。
- 速くて、
- 小さくて、
- 障害に強くて、
- 信頼できる。
今のコード量はコメント入れて2000行ほどで、たしかに小さいです。
あと、大きな特徴として、memcacheプロトコルでキューへのput/getを行います。
また、ActiveMQと比べたらライトウェイトで速そうな雰囲気です。
必要なもの
- JDK6
- Scala2.7.7 final
- sbt
- git
ダウンロードとインストール
まずはgithubからソースをダウンロードします。
http://github.com/robey/kestrel
sbtを使っているので、適当に展開して以下のコマンドでビルドします。
sbt clean update package-dist
※sbtをScala2.8.0で動かすとビルドできません
正常にビルドできると、dist/kestrel-x.x.xというディレクトリができます。(x.x.xはバージョン番号)
このディレクトリをどっかよさげなところにコピーして使います。以降$KESTREL_HOMEと呼びます。
起動してみる
起動するためには、以下の2つのディレクトリが必要なので、作成&書き込めるようにしておきます。
- ジャーナル保存用ディレクトリ /var/spool/kestrel
- 動作ログ用ディレクトリ /var/log/kestrel
このへんの設定は、$KESTREL_HOME/config/production.conf に書かれてます。
3 # where to listen for connections: 4 port = 22133 5 host = "0.0.0.0" 6 7 log { 8 filename = "/var/log/kestrel/kestrel.log" 9 roll = "daily" 10 level = "info" 11 } 12 13 queue_path = "/var/spool/kestrel"
で、起動するためには $KESTREL_HOME/scripts/kestrel.sh というdaemonizeして動かすためのシェルスクリプトがありますが、オレオレスクリプトな感じなので無視して、以下のコマンドで普通に起動できます。
java -jar $KESTREL_HOME/kestrel-x.x.x.jar &
入れてみる
さっきの設定ファイルに書いてある通り、デフォルトではポート22133で待ち受けてます。
というわけで、telnetでつないでmemcacheプロトコルっぽくいじっています。
$ telnet localhost 22133 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. stats <= 入力 STAT uptime 15 STAT time 1287045949 STAT version 1.2.2 STAT curr_items 0 STAT total_items 0 STAT bytes 0 ... END set keyname 0 0 1 <= 入力 a <= 入力 STORED set keyname 0 0 1 <= 入力 b <= 入力 STORED set keyname 0 0 1 <= 入力 c <= 入力 STORED get keyname <= 入力 VALUE keyname 0 1 1 END get keyname <= 入力 VALUE keyname 0 1 b END get keyname <= 入力 VALUE keyname 0 1 c END
という感じで、キューとして機能します。
と、ここまで書いてみたけど、まんまyuroyoroさんのエントリと一緒だ。
引き続き、kestrelをちゃんとしたスケーラブルなMQとして使うまでがんばります。