PHPのsessionって皆さんどうされてるんです?
(ノ・・)ン。。。。。。(((●コロコロッ
負荷分散のためにWebサーバを複数用意することはよくあるけど、
その都度セッション管理どうするか悩んでしまう。
ある時はNFSで、
ある時はデータベースで、
ある時はHTTPで!?
NFSだとガーベージコレクション(Garbage Collection、ガッベージコレクション、ガベージコレクション、ガベコレ、不要ファイルの削除作業)をどうするか別途考えなければならない。
DBだとコネクション数を常に気にしなければならない。
HTTPでは。。。重い?
実際携わっているプロジェクトでは
session_pgsql(Postgresqlセッション保存ハンドラ、PostgreSQL Session Save Handler)を使ってセッション管理をしていた。
だけど、普通のセッション管理と同じようにセッションファイルを作成しているのと、
メインのデータベースとコネクションの取り合いになっていて同時アクセス数が半分になってしまっていた。
さらにPostgreSQL特有の[VACUUM][VACUUM FULL]。
セッション管理みたいなinsert,updateを繰り返すものだと、
[VACUUM]はしょっちゅう打たないといけない。
メンテナンス性の悪いDBは本当に使えない。
他に良い物はないか。
(・−・) ウーン
そういうことで専用サーバを設計しようという人はやっぱりいるわけで、
そのうちの一つが
Msession(Mohawk Session Manager)だ。
http://www.mohawksoft.com/
msessionでググって見ると情報は全くない。
調べても調べてもPHPのマニュアルしか出てこない。
なんだこりゃ?
導入実績もわからないし不安でいっぱい。
でもPHP4.2.xのころから対応しているので、
使ってみる価値はあるに違いない。
調べてみるとなかなか面白い。
サーバー側にはデーモンが5つほど常駐、
特別なポート番号でクライアントとやりとりをするみたい。
データはひとつのファイルにシリアル化された物が格納されている。
ガーベージコレクションも勝手にやってくれるみたい。
クライアント側にはPHPに専用モジュールを組み込む。
[configure]で[--with-msession]を追加。
デフォルトのヤツだとうまく動かないので、
公式サイトからPHPのパッチをダウンロードして組み込むことに。
phpinfoには[msession]っていうのが増えていた。
ハンドラの設定は
session.save_handler = msession
session.save_path = msession.saver.com
こんな感じ。
まぁまぁ動いている模様。
特別止まったりすることがなければ継続運用もいいかも。
同時アクセス数150でも十分耐えられる感じだった。
(同時150アクセスってのは通常じゃあり得ない数値)
サーバ負荷も全くなく、
専用サーバでなく、兼用でも良いぐらいだった。
(アイドル99%を切ることはなかった。)