PHPセッションストレージの大本命Flareを試してみました

PHPのセッションストレージにファイルを使うというのはわりとありですが、2台以上の構成になるとNFSやその他のネットワークのファイルシステムにするか、MySQLなどのDBをセッションストレージとして利用するパターンが一般的でした。

わりと手軽な選択肢の一つにmemcachedをセッションストレージにするという手段があります。
利用の仕方も最近のPHPでは非常に簡単でセッションハンドラーのコードを書くことなく下記の2点の設定を書くだけです。

session.save_handler = memcache
session.save_path = "servername:11211"

ただ問題があり、簡単なのはいいのですがmemcachedはオンメモリでありストレージに書き込むことがないため、サーバ再起動時にはデータが消えてしまうという問題がありました。(もちろんセッションに依存しない仕組みを用意するというのはありますが)

で、この問題を解決しているのが、Greeラボ様で公開されているFlareです。Flareはmemcached互換のインターフェースを持ちながら、ストレージに書き込むという処理があるためサーバ停止にも強く上記の、sessio_handlerをmemcacheに指定して使えばいいただけなので非常に組み込みが容易です。

インストール

インストールは、インストールページを見ていただいてインストールするのが簡単です。dabianのパッケージはありますが、RPM系のパッケージはなかったのでSRPMを作成しました

起動まで

基本的にはチュートリアルを見て試してみました。パッケージでインストールすると、各設定ファイルが、/etc/flare*.confにできます。設定自体は特に今回はいじってません。
RPMには、起動スクリプトが仕込んであるので適当に

/etc/init.d/flare start

と打つと起動します。
よしこれで、セッション書き込めるぜ!とおもって書き込んでも書き込めません。(すいませんちょっとせっかちでした)チュートリアルにあるようにノードをmasterにする必要があります。

インデックスサーバに接続し下記のコマンドを打ちます。

telnet localhost 12120
> node role localhost 12121 master 1 0

OKというレスポンスが帰ってきたら完了です。

接続テスト

まずはphp.iniの設定を下記に変更し、httpdの再起動を行います。

session.save_handler = memcache
session.save_path = "servername:12121"

下記のコードを実行します。

<?php
session_start();
var_dump($_SESSION);
if(! isset($_SESSION['count'])){
  $_SESSION['count'] = 1;
} else {
  $_SESSION['count'] = $_SESSION['count'] + 1;
}

結果、ちゃんとカウントアップされているようです。

まとめ

というわけでFlareをためしてみました。ちょっとmasterとかの概念に一瞬とまどったもののわりと簡単に使えるという印象です。まだベンチマークを図ってないですがその仕組み上高速じゃないかなーと思っています。
PHPのセッションストレージとしてはかなり本命に近い所にいるなとおもいつつ、何らかの参考になれば幸いです。
あと、2008年、残念ながら彼女ができませんでした。自薦他薦は問いませんので彼女になっていただける方を個々一番は募集しております。