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 のロックの仕組みと使用法の分析

推薦する

JavaScript 状態コンテナ Redux の詳細な説明

目次1. Reduxを選ぶ理由2. Reduxデータフロー3つの原則4. Reduxソースコード分析...

Linux で Golang をインストールする方法

Go は、シンプルで信頼性が高く、効率的なソフトウェアを簡単に構築できるオープンソース プログラミン...

Docker マルチステージビルドを使用してイメージサイズを縮小する方法

この記事では、Docker のマルチステージ ビルド機能を使用してイメージ サイズを大幅に削減する方...

MySQL テーブルにおける非主キー列オーバーフロー監視の詳細な説明

今日もまた罠に落ちてしまいました。 私は以前MySQLの主キーオーバーフローに遭遇したことがあり、そ...

React における setState の同期または非同期の問題の理解

目次1. setState は同期的ですか?非同期ですか? 2. 非同期的に動作する1. React...

uniapp プロジェクトで MQTT を使用する方法

目次1. uniappプラグインマーケットのリファレンスプラグイン2. 具体的な導入プロセス1. m...

Linux で PCIe のバージョンと速度を確認する方法

PCIE には 4 つの異なる仕様があります。下の図でそのうちの 2 つを見てみましょう。マザーボー...

MySQL のあまり知られていないソート方法

序文ORDER BY 字段名升序/降序、このソートステートメントは皆さんご存知だと思いますが、特殊な...

MySQL/MariaDB で完全な Unicode をサポートする方法

目次utf8mb4 の紹介UTF8 バイト数超過エラーutf8mb4 サポートデフォルトの文字エンコ...

Vmvare 仮想マシンを使用して Ubuntu のルート ディレクトリをパーティション分割する方法の紹介

目次序文根拠手順1. CDから仮想マシンを起動する2. GPartedツールを使用してパーティション...

Docker で Spring-boot プロジェクトをデプロイするためのサンプル コード

1. 基本的な Spring-boot クイックスタート1.1 クイックスタート pom.xml は...

MySQLインデックスの作成について知っておくべきこと

目次序文: 1. インデックスメソッドを作成する2. インデックスを作成するために必要な権限序文: ...

VMware ESXi のインストールと使用記録(ダウンロード付き)

目次1. ESXiをインストールする2. ESXiをセットアップする3. ESXiを起動するESXi...

Windows Server 2008 のサーバー パフォーマンス監視に関するチュートリアル

次に、ログ管理、ログのアーカイブ、ログのトラブルシューティング、イベントの転送と収集のためのコンピュ...

コンパイル/サーバーなしでブラウザにCommonJSモジュールを実装する

目次導入1. one-click.jsとは2. パッケージングツールはどのように機能しますか? 3....