ユーザーセッション情報の同期を維持するためにロードバランシングする方法

まず、どのような負荷分散

 

少しトラフィックは、トラフィックが大きくないので、新しいWebサイトは、負荷分散を行うことはないので、これらの事に従事する必要はありません。サイトのトラフィックとトラフィックの急増で、単一のサーバーは、そのハードウェア条件によって制限されている。しかし、訪問のような大規模な数を負担することは困難です。この場合、プログラムの二種類を選択することができるがあります: 
1、単一のサーバハードウェアは、メモリを増加させる、デュアルクアッドコア核となり、更新等されています。 
2、サーバーの負荷を共有するためのサーバーの数を増やします。増加ネットワーク帯域幅、サーバーの処理能力を増加させる目的を達成するために。

 

第一の方法は、この方法は常に制限され、長手方向の開発のように理解することができます。 
第2のアプローチは、問題解決するための正しい選択であり 
、一つはソフトウェアのロード・バランシングに実装され、2つの方向に分割されたレンジング負荷分散方法を、他方が(ハードウェアとソフトウェアの組み合わせを含む)バランシングハードウェア負荷でありますソフトウェア・ロード・バランシングに実装され、負荷分散プロセス自体は、いくつかのシステムリソース、応答時間が増加を消費しなければなりません。たとえば:LVS、nginxの、haproxyは、Apacheなどのそれらのビューのためにこれらのロード・バランシング・ソフトウェア・アプリケーション層に基づいて、特に大規模なサイトではありません。シーナとして、サイト訪問の163ような大規模な量は、ロードバランシングハードウェアを実現するために、場合明が最良の選択です。

多くの負荷分散アルゴリズムは、負荷分散のために、IP負荷が要求の数に基づいてバランシングrootに、そしてそのトラフィックにそこに基づいています。私は、多くの場合、アルゴリズムの2種類を使用します。

要求の数によるとされ 
、個々のサーバは、サーバの1つがダウンし、それが悪影響を引き起こすことはありません、より均等に共有、顧客の要求を実現することができます。 
サーバの状態を同期する間、B、そのようなセッションとして、他の手段の必要性は、これらの状態を同期させます。

一つはIPに基づいてい 
ますがの同期のセッション問題解決できるようip_hashアルゴリズムは、単一のサーバー上にマッピングされたIPすることができ、A 
、Bを、ip_hashサーバーの一つが、その後これにマッピングされ、ダウンした場合、悪い部分があったが、されていますユーザサーバが押されていました。 
cは、簡単にip_hash不均衡をロードするためにつながる、政府が、あなたは多くの場合、Googleは開いていないことがわかります今、カニGoogle検索キーワードフィルタリングですが、それだけで罰金。不機嫌、多くのユーザーが海外に行くための薬を探しているのそれらのファンのためにこのGoogle、追い詰め、人々の不安帆。その場合は、これらの薬剤は、同じサーバーに割り当てられます、それは負荷の不均衡、あるいは故障の原因となります。

第二に、セッションを維持するために何であるか、どのような役割

また、同じユーザのアクセス要求が同じサーバに割り当てられているにも関連を保証しながらセッションは、ロードバランサに保持機構に負荷バランスを意味します。

セッションは、例えば説明し、どのような効果を残っ 
ていないセッションホールド機能語と、ユーザーのアクセス要求は、サーバーAに割り当てられ、サーバーAに記録され、かつ非常に短時間で、ユーザが要求を発行したがある場合このユーザーの要求は、サーバーBに割り当てられる可能性があり、サーバーB上のこの時間は、ログインしていないので、あなたは、再度ログインする必要がありますが、ユーザーが自分の要求は、ユーザが感じているところに割り当てられている知りませんログインし、ログインする必要がどのように、ユーザ体験は非常に悪いです。 
そして、あなたは一連の処理であるアドレスを追加=「支払い「=何かに見える」=は、プロセスは、このシリーズのすべての動作がなされるべきである、単一の操作としても理解することができ、ログインから、上記の淘宝網で物事を買います完了するには、サーバ、ロードバランサは、別のサーバーに割り当てることはできません。

セッション時間制限を保持する必要があります(サーバ以外は固定局にマッピングされているとして:ip_hash)、そのようなセッション設定時間を保持する様々な負荷分散ツールを提供し、LVS、等アパッチ。PHP言語が提供するセッションホールド時間が保持時間session.gc_maxlifetimeセッションを設定し、設定時間を生き残るためにセッションよりも大きく設定され、必要であればこのように、同期セッションを減少するが、排除することができません。まだやるための同期セッション。

三、セッションの同期

なぜセッションの同期は、会話を保つために言う時間は、既に述べたはずです。詳細は、ウェブクラスタ同期セッションに3つの方法を参照してくださいするとき

セッション時間のWebクラスタを同期するための3つの方法を

セッションはしばらくの間、ログインしたユーザ、その後、同期していない場合は、ロードバランサ、同じIPアクセスによって、同じページには、別のサーバーに割り当てられるため、Webクラスターを行った後、あなたは確かに、最初のセッションの同期の問題とみなされます1その後、ログオンしていないだろう、ログに記録されます。そこで、本稿では、この問題を解決するために、この場合に応じて3つの異なる方法を提供します: 
1、データベースの同期セッションを使用 
しますが、このメソッドを使用する必要がある場合、私は、このメソッドを使用していないときに、よりを行うには、セッション同期サーバでは、私は思います二つの方法を通じて: 
、ローエンドコンピュータストアセッション専用のWebサーバーとデータベースを構築、または、この専門的なデータベースは、ファイル・サーバ上に構築された、ユーザがWebサーバにアクセスし、それがデータベースのチェックについては、この特別セッションに行きます状況、同期セッションを達成するためです。 
B、この方法は、MySQLは、単語のクラスタを行っている場合、各ノードは、このMySQLのテーブルを持っている必要があり、一緒にセッションテーブルと他のデータベーステーブルを格納することであり、このテーブル・セッション・データ・テーブルは、リアルタイムで同期します。 
説明:データベースの同期セッションでは、データベースの負担が増加します間違いなく悪化しているデータベースへのセッションもあれば、データベースのボトルネックは、常に、配置することは容易となっています。上記の二つの方法、方法の最初のポイントは、実際のデータベース上の負担を軽減し、独立したを開くには、セッションテーブルを置くために、より良いです

2は、クッキーを使用してセッション同期 
セッションファイルには、サーバー側の状況に保存されているが、状況はクライアントの存在のクッキーファイルは、どのようにそれを同期するには?この方法は非常に簡単です、ユーザーセッションは、クッキートランジット駅の中に生成されたクッキーにページにアクセスすることです。あなたはWebサーバAにアクセスし、セッションクッキーは、内部のそれを置く、あなたはWebサーバB、今回、サーバはそのようなセッションを持っていないかどうかを判断するためにWebサーバBへのアクセスを割り当てられている、とされていない場合、クライアントのクッキーを見てみましたあなたがセッションの同期を達成できるように、そのようなセッションが存在しない、ない場合は、クッキーが存在する場合、セッションが実際に存在しない説明、WebサーバBに同期sessoin内のクッキーを置きます。

注:この方法は、実装が簡単で使いやすい、およびデータベースの負担を増加させませんが、クライアントがクッキーを禁止する場合、セッションは同期されませんすることができ、サイトを与えるだろう損失を引き起こす;クッキーのセキュリティそれが暗号化されているが、高くはないが、それでも偽造することができます。

図3は、memcacheの同期セッションを使用する 
ことが機能しない場合memcacheの分散は、行うことができ、また彼は、同期セッションを行うことができます。彼は関係なく、「メモリ・プール」になるためにどのsessoin「メモリー・プール」に入れることができ、生成されたサーバー、他の使用可能なメモリの組み合わせのWebサーバを設置することはできません。

長所:この方法で同期セッションは、はるかに高速ファイルから読み込むよりも、内部のメモリに、クッキーと比較して、セッションをデータベースの負担を増加させず、セキュリティが大幅に改善されます。 
短所は:不足した場合にmemcacheのメモリブロックの様々な仕様にメモリを入れて、単独のサイズのブロックは、このアプローチはまた決め、memcacheのは、メモリのオーバーフローが生成されます、内部メモリ、メモリの断片化、メモリ・ブロックをフルに活用することができません。

IVの概要

三つの方法可能である上に 
、ほとんどがシステム速度が推奨されていない影響を与えることを、最初のアプローチ 
第二の方法、効果は良いですが、セキュリティ上のリスク等; 
第三の方法、個人的に第三と感じていますこの方法がベストですが、あなたが使用することをお勧めします。

実際には、これらのアイデア:

図1は、ハッシュアルゴリズムIPをロードし、IPは、同じWebサーバー上で同じに各要求を転送します。欠点は、効果的に負荷アルゴリズムは、一般的にラウンドロビンされ、負荷分散を行うには、Webサーバーのすべてを使用していません。

図2に示すように、セッションを保存するためにデータベースを使用して、ハンドラセッションを書き換えます。欠点は、高トラフィックの状況で、IOスループットは、サイトのパフォーマンスに影響を与える可能性が高すぎることです。

すべてが共有できるように、図3に示すように、デフォルトのストレージ・パスのセッションはNFS、Webサーバー上の記憶領域に設定されています。欠点は、一度NFS、セッションに使用するだけの手立てを掛けないことです。

4は、最も単純には、保存ハンドラセッションでphp.iniのは、memcacheのか、Redisのために設定されています。お薦めのmemcache。Redisの語は、クラスタへの簡単な解決策がない場合、Redisのは完全に不必要なディスクに書き込まれたデータに戻ってくるだろう。memcacheのは非常に少ないの構成は、クラスタ、メモリ内の完全データ操作、スピードレバレッジドロップを行うことができますが必要です。

おすすめ

転載: www.cnblogs.com/kinwing/p/11130276.html