Memcache 同期セッション方式 (この記事では PHP の例を使用していますが、原理は Java と同じです)
以前に Windows Server 2003 ネットワーク負荷分散システムの構成方法について説明しましたので、サーバー クラスターを構成した後、 Web アーキテクチャでは、セッションの共有と同期の問題を考慮する必要があります。想像してみてください。負荷分散システムの同じ Web ページにアクセスする同じ IP が異なるサーバーに割り当てられ、セッションが同期されていない場合、同じログイン ユーザーに対してはログイン状態になり、その後、ログインステータスの問題ではありません。
この問題に対する 3 つの解決策を参考までに示します。
1. データベース同期セッションを使用する
マルチサーバー セッションの同期を行う場合は、この方法を使用しませんでした。
1. ローエンドのコンピューターを使用して、Web サーバーのセッションを保存するためのデータベースを構築するか、ユーザーが Web にアクセスするときにこの特別なデータベースをファイル サーバー上に構築します。サーバーは、セッション同期の目的を達成するために、この特別なデータベースにアクセスしてセッションのステータスを確認します。
2. この方法では、セッション ストレージ テーブルを他のデータベース テーブルと一緒に配置します。mysql もクラスター化されている場合、各 mysql ノードにはこのテーブルが必要であり、このセッション テーブルのデータ テーブルはリアルタイムで同期されます。
注: データベースを使用してセッションを同期すると、データベースの負荷が増大します。データベースにセッションを置くと、間違いなく状況が悪化します。上記の 2 つの方法のうち、最初の方法の方が優れています。これにより、セッションが保存されるテーブルが分離され、実際のデータベースへの負担が軽減されます
2 つ目は、Cookie を使用してセッションを同期します
セッションは、サーバー側ではファイルの形式で Cookie がクライアントに保存されます。同期を実現するにはどうすればよいですか?方法は非常に簡単で、Cookie を転送ステーションとして使用し、ユーザーのページへのアクセスによって生成されたセッションを Cookie に格納します。 Web サーバー A にアクセスすると、セッションが生成され、Cookie に保存されます。このとき、Web サーバー B はまずサーバーにセッションがあるかどうかを判断し、セッションがない場合はクライアントのセッションを確認します。存在しない場合は、セッションが実際に存在しないことを意味し、Cookie 内のセッションを Web サーバー B に同期して、セッションを同期できるようにします。
注: この方法は実装が簡単で便利であり、データベースへの負担は増加しません。ただし、クライアントが Cookie を無効にすると、セッションが同期されなくなり、Web サイトの Cookie のセキュリティが失われます。暗号化されていますが、それでも偽造可能です。
3. memcache を使用してセッションを同期する
Memcache はこの機能を持たない場合、セッションの同期に使用できません。 Web サーバー内のメモリを組み合わせて「メモリ プール」を形成できます。どのサーバーがセッソインを生成しても、この「メモリ プール」に配置することができ、他のサーバーを使用することもできます。
利点: この方法でセッションを同期すると、データベースの負荷が増加せず、Cookie を使用する場合と比較してセキュリティが大幅に向上します。セッションをメモリに保存する方が、ファイルから読み取るよりもはるかに高速です。
欠点: memcache はメモリをさまざまな仕様のストレージ ブロックに分割します。この方法では、memcache がメモリを完全に利用できないと判断され、ストレージ ブロックが不足するとメモリの断片も生成されます。 .オーバーフロー。
4. 概要
上記の 3 つの方法はすべて実行可能です
最初の方法はシステム速度に最も影響を与えるため、お勧めできません。
2 番目の方法は効果的ですが安全です
3 番目の方法。個人的には 3 番目の方法が最良だと考えており、皆さんにお勧めします。
5. Web クラスターでセッションを同期するには memcache を使用します
セッションを同期するには memcache を使用するのが最善だと思います
1. Web クラスターをシミュレートします
2 つの memcached プロセスを開始しました。 、2 つのサーバーをそれぞれシミュレートします
/usr/local/bin/memcached-d-m1024-c3000-uuenucom-p12000-P./memcached.pid
/usr/local/bin/memcached-d-m1024 -c3000 -uuenucom-p13000-P./mem.pid
2. PHP 構成を変更します
vi/usr/local/php/lib/php.ini
session.save_handler=“memcache”
memcache .hash_strategy=“consistent”
session.save_path=“tcp://127.0.0.1:13000?weight=10,tcp://127.0.0.1:12000″
説明: 最初の行、セッション ストレージメソッドは memcache です。2 行目は memcache のハッシュ アルゴリズムです。3 行目はセッションが保存されている場所です。
View phpinfo
SessionSupportenabled >Registeredsavehandlersfilesusersqlitememcache
Registeredserializerhandlersphpphp_binary
次は
session.save_pathtcp://127.0.0.1:13000,tcp://127.0.0.1:12000
4. 簡単なテストを実行します
a)準備ファイル session.php
PHP コード
session_start();
$_SESSION['username']=“abcabc”;echosession_id()> 🎜 >b) セッションコンテンツファイルを表示
PHP コード
$mem=newMemcache
$mem->addServer("127.0.0.1",12000)ordie("Couldnotaddserver12000");
$mem->addServer("127.0.0.1",13000)ordie("Couldnotaddserver13000"); $val=$mem->get('qp0mrob2ovcqle3u4lbr4obsa5');
//echosession_id();
echo$val
?> 結果は username|s:6 です。 : "abcabc";
?
転載:
?http://blog.itpub.net/27042095/viewspace-1218269/