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とかデュアルマスタ設定などもありますが、
一先ずおいておいて、後ほど試してみたいとおもいます。
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=