セッションの一貫性
セッションとは
Webサーバーは、同じブラウザにアクセスするユーザーのセッションを自動的に作成し、ストレージ機能を提供します。通常、ユーザーのログイン情報はセッションに保存されます。
セッションの一貫性の問題とは何ですか?
バックエンドに Web サーバーが 1 つしかない場合、すべての http リクエストに対して正しいセッションが見つかります。問題は、高可用性を満たせないことです。1 つのサーバーがハングアップすると、それは終わりになります。冗長性 + フェイルオーバー、複数の Web サーバーの展開、および異なる Web サーバーへの nginx ルート。すべての http リクエストはルーティングされますが、同じサーバーにルーティングされることが保証されていないため、一貫性の問題が発生します。
セッションの一貫性を解決するための一般的なソリューション
一貫したハッシュ
最初に思い浮かぶ解決策は、クライアント IP に基づいてハッシュし、同じ IP が同じ Web サーバーに存在することを確認することです。 userId や cityId などのビジネス フィールドに基づいたハッシュを使用することもでき、より柔軟に使用できます。ただし、これは単一性の原則を破壊し、ゲートウェイとビジネスを粘着的にするため、必要な場合以外は使用しないことをお勧めします。利点: キャッシュを節約し、水平方向に拡張できます。欠点: 一部のサービスが再起動されるとセッションが失われ、一部のユーザーが再度ログインすることになります。ハッシュが水平に拡張され、再ハッシュ後にセッションが再分散される場合、一部のユーザーはセッションをルーティングできなくなります
セッション同期
複数の Web サーバー間のセッションは相互に同期されるため、各 Web サーバーには次のものが含まれます。すべてのセッション情報。欠点: すべてのセッションが含まれるため、クラスターの数はメモリによって制限され、拡張も制限されます。
クライアントストレージ
ログイン情報はクライアントに保存され、各リクエストにはユーザー情報が含まれます。サーバーは完全にステートレスであり、拡張が簡単です。利点: サーバー側にストレージは必要ありません。短所: 各 http リクエストにはユーザー情報が含まれるため、トラフィックが無駄になります。Cookie は大量の情報を保存できません。
バックエンド集中ストレージ
ウェブサーバーは、セッション情報を保存するために統合ストレージにリンクします。その後の拡張を容易にするために、それを Redis クラスターに保存することをお勧めします。利点: 情報漏洩のリスクがない; 水平拡張によってデータが失われることはない; 欠点: 追加のネットワーク要求が追加され、redis をクエリするためにビジネス コードを変更する必要がある。
以上がセッション一貫性の設計の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。