なぜか数学者にはワイン好きが多い このページをアンテナに追加 RSSフィード

2009-10-24 memcached互換,楽天ROMA公開.

tullio2009-10-24

ついに公開,楽天ROMA 21:48  ついに公開,楽天ROMAを含むブックマーク

楽天、分散キー・バリュー型データストア「ROMA」のソースコードを公開 - ニュース:ITpro

ってかITpro速い(笑)

公開してすぐに記事になってる.きっと会場で記事書いたのでしょう.

西澤さんがまつもとゆきひろさんにエンターキーを押してもらって記念すべき初公開,としようとした時のトラブルについては触れられてませんw

ROMAのページはこちら.

Index_ja - roma-prj - Index - ROMA: A Distributed Key-Value Store in Ruby - Google 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と比べる予定です.

shinodoggshinodogg 2009/10/25 13:27 おぉ!さすが検証はやw ってか昨日いらっしゃってたんですね!
TTとの検証は気になりますねぇ。

tulliotullio 2009/10/25 22:11 はい〜
テストは少ししてみたのですが,中途半端に完璧主義(手順から結果まで全て納得がいかないと気がすまない...)なので,公表は明日になりそうです.
ただ,感覚的なものですが,memcachedのバイナリプロトコルがやはり圧倒的になるような気がします.

トラックバック - http://d.hatena.ne.jp/tullio/20091024/1256388504
人気blogランキングへ