ついに公開,楽天ROMA

楽天、分散キー・バリュー型データストア「ROMA」のソースコードを公開 | 日経 xTECH(クロステック)
ってかITpro速い(笑)
公開してすぐに記事になってる.きっと会場で記事書いたのでしょう.
西澤さんがまつもとゆきひろさんにエンターキーを押してもらって記念すべき初公開,としようとした時のトラブルについては触れられてませんw

ROMAのページはこちら.
Google Code Archive - Long-term storage for Google Code Project Hosting.

さて,FreeBSDで実験してみます.
ドキュメントの通りruby-1.9とruby-1.9用のgem,それからgem経由でeventmachineをインストールした後,いよいよROMAをインストールします.
最初から最後までトラブル無しでした.素晴らしい.

# wget http://github.com/roma/roma/tarball/master
# tar xvf roma-roma-ce4ccb9.tar.gz
# cd roma-roma-ce4ccb9/ruby/server
# ./bin/mkroute localhost_11211 localhost_11212 --enabled_repeathost
nodes => ["localhost_11211", "localhost_11212"]
Routing table has created.
# ./bin/romad localhost -p 11211 -d
# ./bin/romad localhost -p 11212

そして別のターミナルから,

> telnet localhost 11211
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set test 0 0 8
test desu
STORED
get test
VALUE test 0 8
test des
END
quit
Connection closed by foreign host.

Ok.
さて,memcachedとの違いをテストしてみましょう.ポート11212にアクセスしてみます.

> telnet localhost 11212
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
get test
VALUE test 0 8
test des
END

ポート11211にアクセスした時と同じ値が得られました.
そして,立ち上げたromadを落とします.CTRL-Cで強制的に.

# ./bin/romad localhost -p 11212
^C/usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.8/lib/eventmachine.rb:242:in `run_machine': Interrupt
        from /usr/local/lib/ruby/gems/1.9.1/gems/eventmachine-0.12.8/lib/eventmachine.rb:242:in `run'
        from /root/ruby-1.9.1-p243/rubygems-1.3.5/roma-roma-ce4ccb9/ruby/server/lib/roma/romad.rb:63:in `start'
        from /root/ruby-1.9.1-p243/rubygems-1.3.5/roma-roma-ce4ccb9/ruby/server/lib/roma/romad.rb:566:in `<top (required)>'
        from ./bin/romad:7:in `require'
        from ./bin/romad:7:in `<main>'

するとクライアント側では当然,

> telnet localhost 11212
Trying ::1...
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection 

エラーが出ます.しかしもう一つのポートでは,

> telnet localhost 11211
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
get test
VALUE test 0 8
test des
END

素晴らしい.何事も無かったかのように.おまけに値を書き換えてやります.

set test 0 0 9
test dayo
STORED
get test
VALUE test 0 9
test dayo
END

さて,おもむろに落としたポートのデーモンを立ち上げます.

# ./bin/romad localhost -p 11212 --verbose

そして再び別のターミナルからgetを試みます.

> telnet localhost 11212
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
get test
END
get test
END
get test
VALUE test 0 9
test dayo
END

最初の2回はデータ更新が反映されていませんでした.遅延があるんですね.でも,素晴らしい.最後には更新したデータが得られました.
どれか一個サーバが落ちてても冗長性が確保されている,と.

動作が確認できたので,次は得意のベンチマークやります.memcachedTokyo Tyrantと比べる予定です.