Redission-tomcatは、単一マシンから複数マシンへの展開を迅速に実装します。

Redission-tomcatは、単一マシンから複数マシンへの展開を迅速に実装します。

序文

一部のプロジェクトの初期段階では、シンプルさとスピードのために、開発と展開は単一のマシンで行われます。しかし、ビジネスが拡大したり、可用性の要件が高まったりすると、単一マシン環境ではニーズを満たせなくなります。単一マシン展開から複数マシン展開に切り替える場合、セッション共有が重要な手順になることがあります (最初からトークンベースの認証を使用している場合は無視できます)。この記事では、コードを侵入することなくセッション共有を迅速に実装できる、Redis ベースの Tomcat セッション管理オープンソース プロジェクト redission-tomcat を紹介します。

導入

Redisson は Jedis に似た Redis クライアントですが、Jedis よりも豊富な機能を備えています。 redission-tomcat は、redis をベースにした Tomcat セッション マネージャー プロジェクトです (プロジェクト アドレス)。他の実装と比較して、このプロジェクトのストレージはより効率的であり、書き込み操作はより最適化されています。各セッション パラメータは、HttpSession.setAttribute を呼び出すときに redis に書き込まれますが、他のソリューションでは通常、セッション全体がシリアル化され、毎回書き込まれます。

使用

1. 2 つの jar パッケージ redisson-all-3.11.0.jar と redisson-tomcat-8-3.11.0.jar (tomcat8 の場合、他のバージョンは上記のプロジェクト アドレス ページにあります) をダウンロードし、tomcat の lib ディレクトリに配置します。

2. tomcat confディレクトリのcontext.xmlファイルに次の設定を追加します。

<Manager クラス名="org.redisson.tomcat.RedissonSessionManager"
configPath="${catalina.base}/conf/redisson.conf" 
readMode="MEMORY" updateMode="AFTER_REQUEST" ブロードキャストセッションイベント="false"/>

  • configPath: 手順 3 で指定した json または yaml 形式の Redisson 構成ファイルを指します。
  • readMode: セッション属性の読み取りモード。可能な値は、1. MEMORY です。この場合、セッション属性はローカル Tomcat セッションと Redis の両方に保存されます。後続のセッション更新は、Redis イベントを通じてローカル Tomcat セッションに伝播されます。2. REDIS の場合、セッション属性は Redis にのみ保存されます。デフォルトはREDISです。
  • updateMode: セッション属性の更新モード。可能な値は次のとおりです: 1. DEFAULT、セッション属性は setAttribute メソッドを通じてのみ redis に保存されます。2. AFTER_REQUEST、各リクエストの後、すべてのセッション属性が redis に保存されます。デフォルトは DEFAULT です。
  • BroadcastSessionEvents: true に設定すると、sessionCreated および sessionDestroyed イベントがすべての Tomcat インスタンスにブロードキャストされ、登録されているすべての HttpSessionListeners がトリガーされます。デフォルト値は false です。

3. tomcat confディレクトリに新しい設定ファイルredisson.confを追加します。内容は次のとおりです。

{
"シングルサーバー構成":{
"アイドル接続タイムアウト":10000,
"接続タイムアウト":10000,
"タイムアウト":3000,
"再試行回数":3,
"再試行間隔":1500,
"パスワード":"123456",
"接続ごとのサブスクリプション":5,
"クライアント名":null,
「アドレス」: 「redis://127.0.0.1:6379」、
"サブスクリプション接続最小アイドルサイズ":1,
"サブスクリプション接続プールサイズ":50,
"接続最小アイドルサイズ":24,
"接続プールサイズ":64,
"データベース":0,
"dns監視間隔":5000
},
「スレッド」:16,
"nettyスレッド":32,
「コーデック」:{
"クラス":"org.redisson.codec.FstCodec"
},
"トランスポートモード":"NIO"
}

上記はスタンドアロン モードの redis 環境構成であり、パスワードとアドレスは独自の値に変更されます。クラスタモードの場合、設定ファイルは

{
"sentinelServersConfig":{
"アイドル接続タイムアウト":10000,
"接続タイムアウト":10000,
"タイムアウト":3000,
"再試行回数":3,
"再試行間隔":1500,
"失敗したスレーブ再接続間隔":3000,
"失敗したスレーブチェック間隔":60000,
"パスワード":null,
"接続ごとのサブスクリプション":5,
"クライアント名":null,
「ロードバランサー」:{
"クラス":"org.redisson.connection.balancer.RoundRobinLoadBalancer"
},
"サブスクリプション接続最小アイドルサイズ":1,
"サブスクリプション接続プールサイズ":50,
"スレーブ接続最小アイドルサイズ":24,
"スレーブ接続プールサイズ":64,
"マスター接続最小アイドルサイズ":24,
"マスター接続プールサイズ":64,
"読み取りモード":"スレーブ",
"サブスクリプションモード":"スレーブ",
"センチネルアドレス":[
"redis://127.0.0.1:26379",
「redis://127.0.0.1:26389」
]、
"マスター名":"マイマスター",
"データベース":0
},
「スレッド」:16,
"nettyスレッド":32,
「コーデック」:{
"クラス":"org.redisson.codec.FstCodec"
},
"トランスポートモード":"NIO"
}

負荷分散を実現するためにnginxを使用することができます。設定を参照してください。

アップストリーム cnserver{
サーバー 127.0.0.1:8080 重み=2 fail_timeout=10s max_fails=1;
サーバー 127.0.0.1:8081 重み=2 fail_timeout=10s max_fails=1;
}
サーバー{
聞く 80;
server_name ローカルホスト;
インデックス index.html index.htm;
場所 /rest/ {
インデックス index.html;
proxy_pass http://cnserver/rest/;
}
}

上記は、redisson-tomcat を使用して単一マシン展開から複数マシン展開までを実装するためのすべての構成です。

要約する

ビジネスの発展に伴い、技術アーキテクチャも進化し続けます。ビジネス開発の初期段階では、ユーザー数やビジネスの複雑さは比較的低く、迅速なオンライン検証を実現するために、シンプルで単一のアーキテクチャが採用されることが多いです。多くのプロジェクトは、アーキテクチャを進化させてアップグレードする時間がないうちに失敗する可能性がありますが、幸運にも成長を続けるプロジェクトは、ビジネスの拡大に合わせて必然的に継続的に最適化およびアップグレードされます。

この記事で紹介した redisson-tomcat は、もちろんセッション管理リンク内でのみ、単一マシン プロジェクトを複数マシン サポートに素早く切り替えるのに役立ちます。ファイルのアップロード、スケジュールされたタスクなどの他の分散サポートが関係する場合は、対応する調整を行う必要があります。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Java アノテーションで Redis ベースの分散ロックを実装する方法
  • 再分散ロックは繰り返し初期化の問題を防ぎます

<<:  JSブラウザイベントモデルの詳細な説明

>>:  MySQL のロックの仕組みと使用法の分析

推薦する

CentOS 7 で MySQL 8 の複数のインスタンスを設定する詳細なチュートリアル (必要な数だけ設定できます)

原因最近、プロジェクトのリファクタリングを始めたのですが、マスタースレーブと読み取り書き込み分離を使...

React プロジェクトで eslint の Baidu スタイルを使用する詳細な説明

1. Baidu Eslint Ruleプラグインをインストールする npm i -D eslint...

無効と読み取り専用の機能と違い

1: readonly は、このコントロールをロックして、インターフェイス上で変更できないようにしま...

Html、sHtml、XHtml の違いのまとめ

たとえば、<u>には終了文字がなく、ブラウザはそれを認識します。 SHTML は Ser...

MySQLの保存時間の不一致の問題を解決する

Java を使用してシステム時間を取得し、それを MySQL データベースに保存した後、時間タイプが...

CocosCreatorオブジェクトプールの使い方

目次序文:特定の操作ステップ1: プレハブを準備するステップ2: オブジェクトプールを初期化するステ...

純粋な CSS3+DIV で小さな三角形の境界線効果を実現するためのサンプル コード

具体的なコードは次のとおりです。 HTMLコードは次のとおりです <div class=&qu...

Firefox ブラウザでバックグラウンド ミュージックを再生するための究極のソリューション (Chrome マルチブラウザ対応)

FirefoxでBGMを再生するための推奨コードがテストに合格しました空のコントロールパネルを開いて...

MySQLデータベースを操作するためのコマンドラインツールmycliの簡単な紹介

GitHub にはあらゆる種類の魔法のツールがあります。今日、私はデータベースを操作するためのコマン...

MySQL は information_schema オブジェクトの付与をバイパスし、ERROR 1044 (4200) エラーを報告します

この質問は、MySQL の権限に関する WeChat グループのネットユーザー間の議論です。次のよう...

CentOS7 インストール GUI インターフェースとリモート接続の実装

ブラウザ (Web ドライバー) ベースの Selenium テクノロジを使用してデータをクロールす...

MySQL の完全なデータベース バックアップ データを使用して単一のテーブル データを復元する方法

序文データベースをバックアップするときは、データベース全体のバックアップを使用します。ただし、何らか...

MySQL スロークエリを通じて MySQL のパフォーマンスを最適化する方法

アクセス数が増えると、MySQL データベースへの負荷が増大します。MySQL アーキテクチャを使用...

Nodejs は JSON 文字列を JSON オブジェクトに変換するエラー解決法

JSON 文字列を JSON オブジェクトに変換するにはどうすればいいですか? JSON.parse...

Centos7 に DAMO データベースをインストールするチュートリアル

1. 準備Linux オペレーティング システムをインストールした後、ここで Linux 7 を選択...