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にできます。設定自体は特に今回はいじってません。
/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年、残念ながら彼女ができませんでした。自薦他薦は問いませんので彼女になっていただける方を個々一番は募集しております。
komagata
2009/01/20 22:19
こんな真摯な彼女募集を私は見たことがありません。
cocoiti
2009/01/23 01:11
さすがに男性はちょっと・・・。(違