分散環境でのsessionのストレージのいくつかのソリューション
エンタープライズクラスのアプリケーションシステムは単一のサーバに導入されることは少なく、サーバ間でどのようにsession共有を行うかという問題をもたらし、筆者は2つのシナリオを提供し、それぞれ2つの異なる場合に適用し、持続化sessionは高信頼性の環境に適しており、性能的に破損する可能性があるが、memcacheベースのソリューションは相対的に性能が良い.しかしmemcacheが再起動すると、データが失われます.
分散セッションの持続化
mysqlで例を挙げる
1.データベースの構築
注意:表のフィールドは、次の構成に対応する必要があります.
2.tomcatのcontextを設定.xml
パラメータはデータベースフィールドに対応
3.tomcatのlibディレクトリにmysqlドライバjarをインポートする
分散キャッシュセッション
memcacheで例を挙げる
筆者はgoogle codeの下のmemcached-session-managerを用いて分散環境でのsessionのキャッシュを実現し,筆者のテストで性能は悪くなかった.もちろん、読者は似たような考え方で自分で実現することができます.
memcached-session-managerプロジェクトアドレス:http://code.google.com/p/memcached-session-manager/
筆者はkryoを用いてオブジェクトのシーケンス化を行う.
1.WEB-INFの下に導入する必要がある
kryo-1.04-all.jar
kryo-serializers-0.9.jar
msm-kryo-serializer.1.5.0.jar
2.tomcatのlibは以下に導入する
memcached-2.5.jar
memcached-session-manager-1.5.0.jar
memcached-session-manager-tc6-1.5.0.jar
3.context.xmlのcontextラベルの下には、
ここでmemcachedNodesはmemcacheノードを表し、複数の中間スペース分割を構成する必要がある場合(n 1:192.168.0.11.1:1211 n 2:192.168.0.10:11211など)
分散セッションの持続化
mysqlで例を挙げる
1.データベースの構築
create database session_persistence;
use session_persistence;
create table session(
session_id varchar(100) NOT NULL,
valid_session char(1) NOT NULL,
max_inactive int(11) NOT NULL,
last_access bigint(20) NOT NULL,
app_name varchar(255) DEFAULT NULL,
session_data mediumblob,
primary key (session_id),
KEY kapp_name (app_name)
) engine=InnoDB default charset=utf8;
注意:表のフィールドは、次の構成に対応する必要があります.
2.tomcatのcontextを設定.xml
<Manager className="org.apache.catalina.session.PersistentManager"
distributable="true" duplicates="-1" saveOnRestart="true"
maxActive="-1" maxActiveSessions="0" minIdleSwap="-1" maxIdleSwap="-1"
maxIdleBackup="-1" maxInactiveInterval="-1" sessionCounter="-1">
<Store className="org.apache.catalina.session.JDBCStore"
checkInterval="1"
connectionURL="jdbc:mysql://server_address:port/session_persistence?user=username&password=password"
driverName="com.mysql.jdbc.Driver" sessionAppCol="app_name"
sessionDataCol="session_data" sessionIdCol="session_id"
sessionLastAccessedCol="last_access" sessionMaxInactiveCol="max_inactive"
sessionTable="session" sessionValidCol="valid_session" />
</Manager>
パラメータはデータベースフィールドに対応
3.tomcatのlibディレクトリにmysqlドライバjarをインポートする
分散キャッシュセッション
memcacheで例を挙げる
筆者はgoogle codeの下のmemcached-session-managerを用いて分散環境でのsessionのキャッシュを実現し,筆者のテストで性能は悪くなかった.もちろん、読者は似たような考え方で自分で実現することができます.
memcached-session-managerプロジェクトアドレス:http://code.google.com/p/memcached-session-manager/
筆者はkryoを用いてオブジェクトのシーケンス化を行う.
1.WEB-INFの下に導入する必要がある
kryo-1.04-all.jar
kryo-serializers-0.9.jar
msm-kryo-serializer.1.5.0.jar
2.tomcatのlibは以下に導入する
memcached-2.5.jar
memcached-session-manager-1.5.0.jar
memcached-session-manager-tc6-1.5.0.jar
3.context.xmlのcontextラベルの下には、
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11211" sticky="false" lockingMode="auto"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync="false" sessionBackupTimeout="0"
memcachedProtocol="binary" copyCollectionsForSerialization="true"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
ここでmemcachedNodesはmemcacheノードを表し、複数の中間スペース分割を構成する必要がある場合(n 1:192.168.0.11.1:1211 n 2:192.168.0.10:11211など)