Memcached Session Manager分散セッション
これはmemcachedをtomcat session managerとして使用するオープンソースプロジェクトであり、大規模なクラスタを導入する際、tomcatが持参するsession replication技術は効率に影響し、統一的なsessionストレージ戦略を使用するとクラスタ規模の拡張に有利であり、session managerを置き換える方法はプログラムコードを変更せずに実現することができ、良い.次の機能があります. Tomcat 6およびTomcat 7 をサポートはstickyまたはnon-stickyセッションの処理をサポートする 単点障害なし tomcatフェイルオーバ の処理をサポート memcachedフェイルオーバの処理をサポート ダイヤル可能なプラグインを提供するSessionシリーズ化 は、より迅速な応答時間 を達成するために、非同期ストレージセッションを可能にする. Sessionsは、本当に変更された場合にのみmemcached に送信されます. JMXによる の監視と管理が可能
1.msmおよびその依存パッケージのダウンロード
http://code.google.com/p/memcached-session-manager/downloads/list
http://spymemcached.googlecode.com/files/
ダウンロード
memcached-session-manager-1.4.1.jar
msm-javolution-serializer-1.4.1.jar
javolution-5.4.3.1.jar
memcached-2.5.JAr(spymemcachedからダウンロード)
2.パッケージを$TOMCAT_に入れるHOME/libディレクトリの下
3.修正$TOMCAT_HOME/conf/server.xml
追加
docBaseをあなたのWEBディレクトリに置き換えて、修正した後に2つのTOMCATを再起動すればいい、この時すでにSESSIONの共有問題を解決した.
テストクラス
いずれかのtomcatにアクセスするとセッションが作成され、別のtomcatにアクセスすると、対応するセッションが作成されないことがわかり、2つのtomcachedがmemcachedによってセッション制御されていることが証明されました
でもmemcached
memcachedはLRUアルゴリズムを使用してキャッシュを処理します.しかし、欠点は、グローバルではなくslabに基づいていることです.これにより、実行時間が経過した後、最初にアクセスしたユーザーのSESSIONが不明に失われ、前の秒に操作があったとしても発見されます.
memcachedのメモリ割り当てアルゴリズムを見てください
http://wenku.baidu.com/view/90a6b19851e79b89680226d4.html
解決可能な解決策はmemcachedbを使用して検証することです.
1.msmおよびその依存パッケージのダウンロード
http://code.google.com/p/memcached-session-manager/downloads/list
http://spymemcached.googlecode.com/files/
ダウンロード
memcached-session-manager-1.4.1.jar
msm-javolution-serializer-1.4.1.jar
javolution-5.4.3.1.jar
memcached-2.5.JAr(spymemcachedからダウンロード)
2.パッケージを$TOMCAT_に入れるHOME/libディレクトリの下
3.修正$TOMCAT_HOME/conf/server.xml
追加
<Context docBase="E:/projects/test_msm/WebRoot" path= "" reloadable= "true" >
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:localhost:11211"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync="false"
sessionBackupTimeout="100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
copyCollectionsForSerialization="false"
/>
docBaseをあなたのWEBディレクトリに置き換えて、修正した後に2つのTOMCATを再起動すればいい、この時すでにSESSIONの共有問題を解決した.
テストクラス
public class Test extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession sesion = request.getSession(false);
if (sesion == null) {
request.getSession();
System.out.println("session is null");
}else {
Object id = sesion.getAttribute("id");
Object test = sesion.getAttribute("test");
if (id == null) {
sesion.setAttribute("id", request.getRemoteAddr());
}
if (test == null) {
sesion.setAttribute("test", "test");
}
System.out.println("test:id " + sesion.getAttribute("id"));
System.out.println("test:test " + sesion.getAttribute("test"));
}
}
}
いずれかのtomcatにアクセスするとセッションが作成され、別のtomcatにアクセスすると、対応するセッションが作成されないことがわかり、2つのtomcachedがmemcachedによってセッション制御されていることが証明されました
でもmemcached
memcachedはLRUアルゴリズムを使用してキャッシュを処理します.しかし、欠点は、グローバルではなくslabに基づいていることです.これにより、実行時間が経過した後、最初にアクセスしたユーザーのSESSIONが不明に失われ、前の秒に操作があったとしても発見されます.
memcachedのメモリ割り当てアルゴリズムを見てください
http://wenku.baidu.com/view/90a6b19851e79b89680226d4.html
解決可能な解決策はmemcachedbを使用して検証することです.