OK、それで、負荷分散された PHP Web サイトのこのまったく珍しいユニークなシナリオを手に入れました。残念なことに、以前は負荷分散されていませんでした。今、問題が発生し始めています...
現在、唯一の問題は PHP セッションにあります。当然のことながら、最初は誰もこの問題について考えていなかったので、PHP セッション構成はデフォルトのままにされました。したがって、両方のサーバーには独自のセッションファイルの小さな隠し場所があり、最初のサーバーで作成したセッションがないため、他のサーバーにスローされた次の要求を取得するユーザーは悲惨です。
今、私はこの状況を解決する方法について PHP のマニュアルを読んでいます。そこで の素敵な機能を見つけましたsession_set_save_handler()
。(偶然にも、SO に関するこのトピック) いいですね。ただし、Web サイトのすべてのページでこの関数を呼び出す必要があります。また、将来のページの開発者は、常にそれを呼び出すことも覚えておく必要があります。おそらく十数のベストコーディングプラクティスに違反していることは言うまでもありません。いくつかのグローバル構成オプションを反転させるだけで、セッションがすべて DB やメモリ キャッシュなどに魔法のように保存されれば、はるかに良いでしょう。
これを行う方法についてのアイデアはありますか?
追加:明確にするために - これは標準的な解決策による標準的な状況であると予想しています。参考までに - MySQL DB を利用できます。確かに、これを解決するすぐに使えるコードがそこにあるに違いありませんか? もちろん、私は独自のセッション保存機能を書くことができ、Greg
auto_prepend
が指摘したオプションは有望に思えますが、それは車輪の再発明のように感じます。:P
追加 2:ロード バランシングは DNS ベースです。これがどのように機能するかはわかりませんが、次のようになるはずです。
追加 3: OK、解決策の 1 つは、すべてのスクリプト
auto_prepend
に呼び出しを挿入するオプションを使用しsession_set_save_handler()
、独自の DB パーシスタを作成することです。おそらく、memcached
パフォーマンスを向上させるために呼び出しをスローします。けっこうだ。
これをすべて自分でコーディングしないようにする方法もありますか? よくテストされた有名な PHP プラグインが好きですか?
ずっと後で追加しました:これは私が最終的に行った方法です: PHP + MySQL でカスタム セッション パーシスタを適切に実装するにはどうすればよいですか?
また、すべてのページに手動でセッション ハンドラーを含めただけです。