Kyoto Cabinet/TycoonをRailsから使う


HA構成のRailsで、sessionストアにKVSを指定する場合、
Kyoto Cabinet/Tycoonが使えるんじゃないかと思えてきました。
まだHA構成で試せてないけど、手元のmacで導入は簡単にできました。

まず

Kyoto Cabinet/Tycoonについてですが
簡単に紹介すると、Tokyo Cabinet/Tyrantの親戚で
高機能なmemcachedといったところ。


デュアルマスタの他に非同期レプリケーション
永続化も可能、httpでの通信も可、と下記スライドを見てると
完璧やんという気がしてきました。


Kyoto Tycoon Guide in Japanese


他のKVSについて

Railsからは、memcachedが簡単に使えていいんですが、
HA構成とした場合、サーバ間で同期が取れないので、なんか良いの無いかと探していました。


一応、memcachedもKLabさんのRepcached
ってのがありますが、最新のmemcachedには対応していません。


Tokyo Cabinet/Tyrantはデュアルマスタとしても利用できそうですが、
expiration機能がないので自前で実装する必要があります。


how to use

macにinstall
brew install kyoto-cabinet kyoto-tycoon

#centosにも入れてみましたが、こっちもmakeしてinstallするだけです。強いて言うならldconfigに気をつけるぐらいです。

起動
$ ktserver -plsv /usr/local/Cellar/kyoto-tycoon/0.9.42/libexec/ktplugservmemc.dylib -plex 'port=11211'

plsvオプションで、memcachedプラグインを読み込みます。
expirationとかデュアルマスタ設定などもありますが、
一先ずおいておいて、後ほど試してみたいとおもいます。


Kyoto Tycoon起動オプション


Rails設定

memcachedを使う時と同じです。
config/initializers/session_store.rb

ActionController::Base.session_store = :mem_cache_store

感想

とても簡単です。
使い勝手も良さそうで(オプション見てると痒いところに手が届く感があります)、
session_storeだけでなくキャッシュ機能としても、本気で試してみたくなりました。


当たり前と言ってはなんですが、telnet localhost 11211でmemcached likeに操作できますし
専用コマンドktremotemgrあたりもとても便利です。
あと、http通信も可能なので監視もできそうです。

おまけ

sessionデータはこんな感じでsetされます。

$ ktremotemgr list -pv
rack:session:7dc2b5031f4da187c6c45b24eb4a6eba  {:_csrf_token"1fUZHw/+oxFBE8OIX4gt31j9u0rl40gOwhRHk2WC8XAk=