SpringBoot で Spring Session を使用して分散セッション共有の問題を解決する

SpringBoot で Spring Session を使用して分散セッション共有の問題を解決する

序文

Java を使用して Web アプリケーションを開発している場合は、HttpSession に非常に精通しているはずですが、HpptSession はデフォルトでメモリを使用してセッションを管理することが知られています。アプリケーションがスケールアウトされると、セッション共有の問題が発生してしまいます。

Spring Session は、セッション共有の問題を解決するために、Servlet HttpSession を作成および管理するためのソリューションを提供します。さらに重要なのは、Spring Boot で使用するのが非常に簡単だということです。

セッション共有の問題

HttpSession は、メモリに保存される Tomcat/Jetty などのサーブレット コンテナーによって作成および管理されます。 Web アプリケーションを分散クラスターにスケールアウトし、負荷分散に LVS または Nginx を使用すると、同じユーザーからの HTTP 要求が 2 つの異なるインスタンスに分散される可能性があります。異なるインスタンス間でセッション共有を確実に行う方法が、解決しなければならない問題になります。

最も簡単な解決策は、セッション データを Memcached/Redis などのメモリ外の統一された場所に保存することです。すると、HttpSession の作成と管理の Servlet コンテナの実装をどのように置き換えるかという疑問が再び生じます。

  1. Servlet コンテナによって提供されるプラグイン機能を使用して、HttpSession の作成および管理戦略をカスタマイズし、構成を通じてデフォルトの戦略を置き換えます。ただし、この方法には、Tomcat/Jetty などの Servlet コンテナのコー​​ドと組み合わせる必要があるという欠点があります。実際、この分野では、memcached-session-manager や tomcat-redis-session-manager などのオープンソース プロジェクトが長い間存在してきました。現在、Tomcat6/Tomcat7 のみがサポートされています。

2. Nginx の負荷分散アルゴリズムを ip_hash に設定し、各リクエストがアクセス IP のハッシュ結果に従って割り当てられるようにします。この方法では、同じ IP アドレスからの訪問者は固定のバックエンド サーバーにアクセスするため、動的 Web ページのセッション共有の問題が効果的に解決されます。

3. Shiro を使用してセッションを管理する場合は、Redis を使用して Shiro の SessionDao インターフェースを実装し、セッションが Redis によって管理されるようにすることができます。

4. フィルターを設計し、HttpServletRequestWrapper を使用し、独自の getSession() メソッドを実装して、セッション データの作成と管理の作業を引き継ぎます。 Spring-Session はこのアイデアに基づいて実装されます。

Spring Boot に Spring Session を統合する

Spring Session は、セッションを保存するために Redis、Mongo、JDBC、Hazelcast の使用をサポートしています。ここでは、Redis を例として使用します。

1. Maven 依存関係を導入します (この例では dependencyManagement を使用していますが、使用しない場合は <version> タグを追加してください)

  1. <依存関係>    
  2. <グループID> org.springframework.boot</グループID>    
  3. <artifactId> spring- boot -starter- data - redis </artifactId>    
  4. </依存関係>    
  5. <依存関係>    
  6. <グループID> org.springframework.session</グループID>    
  7. <artifactId>スプリング-セッション</artifactId>    
  8. </依存関係>  

2. Spring アプリケーションを構成し、application.properties に次の構成を追加します。

  1. spring.session.store-type = redis  

これら 2 つの手順だけで統合が完了し、プロセス全体が完全にスムーズかつシームレスになります。

注: Redis サーバーがローカルのデフォルト設定 (localhost:6379) を使用していない場合は、Redis を設定する必要があります。どのように設定するのですか?ここを見て下さい。

検証してみましょう〜

確かに、Http Session は Spring Session によってパッケージ化されており、プログラミングには引き続き Http Session API を使用できます。

クッキーも通常通り作成され、キーは SESSION です。

  1. 127.0.0.1:6379 >キー *  
  2. 1) 「spring:session:sessions:083706a8-b2d8-480c-8b88-eafc798e7269」  
  3. 2) 「spring:session:sessions:expires:083706a8-b2d8-480c-8b88-eafc798e7269」  
  4. 3) 「spring:session:expirations:1490263320000」

redis-cli を使用して、関連データも Redis に保存されていることを確認します。

<<:  医療機関は、データセキュリティとコンプライアンスをハイブリッドクラウド導入の主要要因として挙げている。

>>:  Mafengwo ビッグデータ プラットフォームにおける Kafka クラスターの最適化とアプリケーション拡張

推薦する

マルチクラウドはクラウド障害を回避する良い方法ではありません。同じ都市で災害復旧とデータバックアップを行うことで、この問題は解決できます。

単一のクラウドで十分なのに、盲目的にマルチクラウドを追求するのは、「なぜ肉を食べないのか」というよう...

最適化のためのいくつかの方法、SEO最適化に不可欠なスキル

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスSEO最適化に特化したウ...

六易クラウド:全品10%オフ、クラウドサーバー(香港\ロサンゼルス)、高防御CDN半額、リチャージキャッシュバック

Liuyi Cloud は、主にクラウド サーバー、仮想ホスト、CDN、高防御サービスを提供する中国...

エッジが従来のデータセンターを補完する方法

ビジネスが成長するにつれて、コンピューティング インフラストラクチャの拡大によって障害のリスク ポイ...

ユーザーが関心を持つブログトピックを作成しますか?たった3ステップ!

この記事を読んでいるあなたは、次のような状況に陥っているかもしれません。Web サイトを更新する必要...

クラウドネイティブの不変インフラストラクチャ

著者: Yu Leichun、PaaS 製品部門、中国モバイル クラウド機能センター前回の記事では、...

Kafka+Flinkプラットフォーム設計に基づいて、リアルタイムデータウェアハウスも次のように構築できます。

この記事は、NetEase Cloud Music のリアルタイム コンピューティング プラットフォ...

なぜ Spring はクラウド ネイティブ時代においても優れたプラットフォームの 1 つなのでしょうか?

今日は、クラウド ネイティブ時代においても Spring が優れたプラットフォームの 1 つであり続...

DigitalOcean KVM VPS シンプル評価 (512M サンフランシスコ)

私は DigitalOcean から KVM ベースの VPS を購入しました。中国にとても優しいサ...

LVSが提供する3つのIP負荷分散技術

1. LVSと負荷分散の概要: LVS はLinux Virtual Serverの略で、 Linu...

servarica-KVM ストレージ VPS/10 USD/1g メモリ/2T ハードディスク/100M 無制限トラフィック

カナダに登録された会社(NEQ # 2266846825)であるservaricaは、多くの方がご存...

#乾物おすすめ#テンセントクラウド香港VPS、299元/3M帯域幅/1Gメモリ/1コア/50gハードディスク、無料Windows

業界の業務再開を支援するため、Tencent Cloud Server(VPS)は現在スーパープロモ...

ウェブサイトのコンテンツを更新する方法

ウェブサイトのコンテンツはなぜそれほど重要なのでしょうか?コンテンツは王様、外部リンクは女王様です。...

蘇北インターネット連盟春節祭の第一会場は台州で盛大に開かれる

黄金の秋、収穫の季節がやって来ます。最近、江蘇省北部の有名な地方ポータルの責任者らが台州に集まり、地...