PHPのセッション管理に使う箱選び 4

前回からの続き

まとめ


リクエスト/秒を同じグラフにしてみると、5000〜10000リクエスト(セッション)くらいまでは標準方式やmemcachedが速いけど、それ以上になるとInnoDBの方が高速なのがわかる。


最長待ち時間についても同じで、リクエストが少ない場合の差が無い分InnoDBの安定性が光る!ちなみに数値の差が大きいのでグラフは対数で表示(それでも突き抜けているのがあるけど)。

利用者が少なく、Webサーバが1台*1の場合は標準の方式で運用し、それ以上の規模になった場合はMySQLInnoDB方式が良いという結論。今回はGCPHP側で制御したけど、確率で動かすと色々と問題があるのでcronなどで定期実行した方が安心。その場合はMyISAMでも良いかも。

今回は財力の都合でテストしなかったNFSの場合、セッションファイルを保存するディレクトリに階層を作ってWebサーバ側のGCはオフに設定*2し、GC処理はNFSサーバ側で定期実行するようにすると良いかと。また、マウントオプションとして「noac」を指定しないと悲しい事件が発生する予感。


PHPの場合、セッションの保存方式は簡単に切り替えられるので、最初のうちは標準方式を使っておいて、規模が大きくなってから別の方式へ切り替えるといった場合でも、既存のソースコードをほとんど変更する事無く切り替えができる。ただ、標準(とNFS?)方式の場合はファイルをロックするために内容の一貫性が保たれるものの、DBを使う場合は基本的にロックしないため、内容の一貫性は保証されない。セッションの保存方式を変更する予定がある場合は、その点に依存しないような作りにしておく必要がある。

おわり

*1:1台で運用する是非は置いといて

*2:階層を作った時点でオフになる