Asial Blog

Recruit! Asialで一緒に働きませんか?

MemcachedではなくRepcachedをセッション管理に使用する(ついでにTokyo Tyrantについても少し)

カテゴリ :
バックエンド(プログラミング)
タグ :
PHP
memcache
recache
Tokyo Tyrant
Tech
森川です。

複数台のWebサーバでセッション管理をする場合、NFS・DB・Memcachedなんかが一般的ですが、今回はMemcachedじゃなくてレプリケーションができるRepcachedを使ってみよう!というお話です。

まずは、Repcachedの話です。といってもMemcachedにレプリケーション機能が追加されたものというものです。

RepcachedはKLab株式会社さんのクラブラボで公開されています。インストール方法などについては、リンク先のページを見ればわかると思います。

今回のエントリで重要なのは、

・高速であること (Memcachedと遜色ない)
・レプリケーションができること (1台が落ちてもデータが失われない)
・Memcachedのクライアントが使えること(設定を変更する必要がない)

ということです。

ただし、割り当てたメモリを超えてデータを保存した場合には、データが失われてしまうので、きちんと割り当てメモリには余裕を持ちましょう。

NFSは使いたくないけど、もっと信頼性が欲しい、という場合はTokyo Tyrantを使ってみるというのも一つの手です。

Tokyo Tyrantについてですが、すごく簡単に言ってしまうと、Tokyo Tyrantはmemcachedくらい速いけど、ファイルにデータを保存できるDBみたいなのです。

Tokyo TyrantはTokyo Cabinetというライブラリの(ホームページにも書いてある通り)ネットワークインタフェースです。

なにやら意味がわからん!という人は、MySQLのストレージエンジン(MyISAMとかInnoDBとか)がTokyo Cabinetで、MySQLそのものがTokyo Tyrantだと思うと良いと思います。MySQLはその2つが一緒になっているけど、今回は別々なんだと。もっと詳しく知りたい人は、Web+DB Vol.47を参照したり、mixi Engineers' Blogもすごく簡単です。

それでTokyo Tyrantについて今回のエントリで重要なのは、

・高速であること (Memcachedに比べると遅いみたい)
・ファイルにデータを保存できること (データが自動的に削除されることがない)
・レプリケーションができること (1台が落ちてもデータが失われない)
・Memcachedのクライアントが使えること

です。ただし、最悪な欠点が一つだけあって、ガーベッジコレクションを自分で実装する必要があります。つい最近までそれを知らずに、セッションストレージに使おうかなと思っていたのですが…

というのも、セッション管理でmemcachedを使用する場合、ガーベッジコレクションは行われず、memcachedの有効期限の設定で管理されているのですが、Tokyo Tyrantではデータの有効期限ができないのです。そのため、memcachedと同じように使用するとセッションデータが肥大化することになってしまうので、注意しましょう。

そのため、Tokyo Tyrantを使用する場合はセッションハンドラを自分で作成する必要があります。そこまでするなら、共有ファイル領域にファイルとして保存したほうがよいかと個人的には思います。