[Quora] サーバ2台構成の場合、PHPのセッションの保存先はどうすれば良いの?

  • このエントリーをはてなブックマークに追加
  • LINEで送る

Quora回答シリーズです。

質問

Webサーバー2台でPHPのセッションを使いたいのですが、2台が共通で参照できる領域がありません。DBは負荷の懸念があるので避けたいのですが他に何か方法はありませんか?
https://qr.ae/pNy6h8

回答には書きませんでしたが、以下のようなことも念頭に置いて考える感じですかね。

  1. サーバが落ちた時にセッションに保存したデータが消えても良いか
  2. トランザクションに対応する必要があるか
  3. DB上のデータと連係する必要があるか

あとPHPは最初からmemcahedにセッション情報を保存する機能が付いているのでこれを使うのも手ですかねぇ。

- Sponsored Link -

回答

古くからある手法としては、LB側でクライアントを振り分ける方法があります。

1つのトランザクションを継続して特定のサーバーに振り分けるのがセッション維持(セッション・パーシステンス)である(図4)。これを実現するには、ロードバランサーが、送信元のクライアントを一意に識別する必要がある。(中略)初回接続時、ロードバランサーがサーバーの情報を埋め込んだクッキーをWebブラウザ側に保存。その後のセッションは、ロードバランサーがクッキーを発行したサーバーに対して振り分けるわけだ。
※知っておきたいロードバランサーの基礎技術 (2/2) より

環境が分かりませんが、AWS(ALB)であれば「スティッキーセッション」などで検索されると情報が出てくると思いますよ。

ただ、この手の振り分けはトラブルの原因になりやすいので、共通の領域を持たれるのが良いと思います。ほかの方が書かれているようにRedisやMemcacheはアプリ側から手軽に使えて良いですね。

例えばですがRDBであってもMySQLをKVS(NoSQL)として利用する方法や、テーブルをメモリ上に乗せる方法などで負荷を軽減させるといったことも可能です。そもそも現状で一般的なWebサーバ2台でさばけている程度のリクエスト数であれば、設定やチューニングはしっかり行う必要がありますがそれほど深刻にならなくて良いのではないかなぁとも思います。

このブログを応援する

お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。

PayPal(ペイパル)
PayPalで300円支払う
※金額は任意で変更できます。
※100円でも泣いて喜びますw
※住所の入力欄が現れた場合は「no needed」を選択ください
これまでのご協力者さま
- Sponsored Link -

ご質問やリクエストなどお気軽に。メールアドレスの入力は任意です。書き込みが反映されるまで時間がかかります。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください