tomcat集群扩展session集中管理,Memcached-session-manager使用

最近在研究tomcat做负载均衡的时候如何实现ha,还有就是不采用session复制的方法做集群。

想到的是将session全部存储在后端的缓存服务器中。

正好网上有这么一个工具Memcached-session-manager(后面简称msm),所以直接扒下来用了。

地址如下:

http://code.google.com/p/memcached-session-manager/


msm支持 stickty(沾粘会话)和non-sticky(非沾粘会话)两种集群方式。

sticky就是前端的loadbanlence能保证每个用户的请求都路由到了同一个tomcat上。

non-sticky则每一次请求都可能路由到了不同的tomcat中。

至于msm在这两种方式是怎么处理的看下图:

下图来自javaeye的xxtianxiaxing的博客,我这里引用一下,原文地址为http://xxtianxiaxing.iteye.com/blog/1269704

1. sticky



2. non-sticky



用msm的session管理manager替代tomcat自身的standardManager。

可以配置在虚拟服务器的context标签中,也可以在context.xml里面全局配置。



<!--sticky 
        
  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:localhost:11211"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
      copyCollectionsForSerialization="false"

<!--下面这个是可选的,自己定义特殊的类注册到kryo自定义转换器中,实现序列化-->

customConverter="com.test.serializer.CustomKryoRegistration"

        />       
  -->
  <!--non sticky  
   <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
      memcachedNodes="n1:localhost:11211"
      sticky="false"
      sessionBackupAsync="false"
      lockingMode="auto"
      requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
      transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />

上面采用的序列化方式是kryo,根据官方提供的数据,这个的序列化效率是最好的,我下面有一些简单的测试。

感觉kryo的效率主要体现在高并发下面。如果非高并发感觉跟java的自带io差不多。如果不使用kryo进行序列化,采用java默认方式的话,请将transcoderFactoryClass改为:de.javakaffee.web.msm.JavaSerializationTranscoderFactory

另外在使用kryo进行序列话的时候,有时候会报序列话错误。我开始就报ConcrrentHashMap这个类不能序列化的错误。tomcat在的session的Atrribute使用了这个数据结构来保存。要解决这个问题,需要自己写一个类,将这些特殊的类注册进去。然后打个jar包放tomcat的lib下。就ok了。



下面是例子:

package com.test.serializer; 
import java.util.concurrent.ConcurrentHashMap; 

import com.esotericsoftware.kryo.Kryo; 
import com.esotericsoftware.kryo.serialize.MapSerializer; 

import de.javakaffee.web.msm.serializer.kryo.KryoCustomization; 

public class CustomKryoRegistration implements KryoCustomization { 
public void customize(Kryo kryo) { 
kryo.register(ConcurrentHashMap.class, new MapSerializer(kryo)); 
} 
} 
把这个类打好jar包放tomcat的lib目录下。然后还需要在context中配置customConverter="com.test.serializer.CustomKryoRegistration",这样就OK了。

另外集成kryo序列化的环境需要以下jar包。刚开始googleCode的官方网站上没写。搞了半天,后来提醒原作者加上了:

kryo-serializer: msm-kryo-serializer, kryo-serializers, kryo, minlog, reflectasm, asm-3.2

其他序列化方式(java自带的序列化方式外的3方序列化方式)需要的jar:

javolution-serializer: msm-javolution-serializer, javolution-5.4.3.1
xstream-serializer: msm-xstream-serializer, xstream, xmlpull, xpp3_min
flexjson-serializer: msm-flexjson-serializer, flexjson
可以查看官方网站的文档:http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration

搭建好所有环境之后,采用1 nginx(ip_hash)+2 tomcat6.0.35+sticky(最好用6.0.2以上版本,因为新的msm包里面使用了6.0.2才有的新方法,不然会报NoSuchMethod-changeSessionId()的错误)

验证是否成功:

登录发布的系统(发现这个时候请求全部路由到tomcat1),之后,关闭tomcat1,继续在里面做有关session的操作。发现这个时候请求被tomcat2接管,而且session依然保持(从memcached中拿出)。ok,这样就说明成功了。

non_sticky的配置一样按上面的方法来验证是否成功。





*********最后是我在搭建好msm环境后做的一些简单测试:***************



测试环境:T5870 2.0G cpu,内存2G小本本,win7系统。tomcat,memcache全部装win7上。启动一个memcahed服务给了32m内存。tmcat52m内存。



ok,首先是前面没有负载均衡,单个tomcat的情况,请求一个sevlet链接,链接就是从session取个值出来的操作。

用apache ab,-C 参数带上cookie参数模拟有session的请求,100人,共5000次请求是下面的结果:

不用msm: 1000req/s
msm-sticky kryo: 850req/s
msm-sticky java标准序列化: 830req/s
msm-nonsticky kryo : 440/s(50人并发) 430/s(100人并发)
msm-nosticky java标准序列化 : 480/s(50人并发) 270/s(100人并发)

在sticky的情况下,因为在本地有session的情况下,省略了从memcached取session缓存的情况,序列化次数不多,因此性能只有大概1/10的损耗。

在non-stikcy的情况下,集中的每次从memcached取session,性能损失了大概一半。

而可以看出,在高并发的情况下,kryo序列化比java标准序列化要好。并发性能大概在java标准序列化一倍以上。而且在搞并发的non-sticky的情况下,session中的多线程并行操作冲突严重。lock很多(当然这个lock模式可以设置,甚至可以完全不要锁)。这也严重降低了速度。

又测试了1台nginx(ip_hash做负载均衡)+2tomcat的情况。

因为暂时没法模拟多ip的请求,所以所有请求都只路由到了tomcat1上。采用kryo序列化的策略依然保持了高并发下处理速度不下降的优势。

还是400多r/s,而java标准序列化还是要低一半多。

从0到1,快速理清 | DeepSeek Harness DeepSeek推出自研Harness开发平台,主打"一切皆插件"理念,将AI执行能力模块化为可自由组合的插件体系。带你从0到1,快速了解开发链路。 阅读详情

相关推荐

用Python玩转LQR控制:3行核心代码实现倒立摆稳定控制(附Jupyter Notebook)

本文通过Python实战演示了如何使用LQR算法实现倒立摆的稳定控制。文章以直观方式解释LQR原理,提供从系统建模、核心代码求解到参数调优的完整流程,并附有可运行的Jupyter Notebook代码。重点介绍了如何利用SciPy库快速计算最优反馈增益,并通过仿真验证控制效果,为运动控制实践提供了即学即用的指南。

weixin_29311017的博客 83

初探Tomcat源码 (7) —— Session_Manager

HTTP协议本身是无状态的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机的关系一样。 但是很多时候,我们需求区分用户发来的请求是否来自于同一个浏览器,例如用户只用登陆一次,就可以了,后来的请求都带着这个登陆信息,就不用重复登陆了。 所以客户端和服务器端的交互,需要携带一部分的状态信息,Co

无止于天涯 - Always on the Road 1148

实战指南:如何用Kamailio+FreeSWITCH搭建高并发企业通信系统(附配置模板)

本文提供了一份实战指南,详细介绍了如何利用Kamailio与FreeSWITCH构建高并发企业通信系统。通过将Kamailio作为高性能SIP信令平面处理路由与负载均衡,FreeSWITCH作为媒体与应用平面负责通话与业务逻辑,实现信令与媒体分离的电信级架构。文章深入解析了架构设计、核心配置、集群部署与性能优化,并附有配置模板,旨在帮助企业构建可水平扩展、高可用的通信解决方案。

dell8的博客 364

Tomcat8.0使用tomcat-redis-session-manager共享session【开源】,tomcat实现session共享

Tomcat8.0使用tomcat-redis-session-manager共享session【开源】,tomcat实现session共享

weixin_43992507的博客 1595

ORB-SLAM3单目摄像头

home/wheeltec-client/workspace/src/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src目录下找到:ros_mono.cc文件,打开找到并修改成我们自己摄像头的订阅话题(usb_cam/imahe_raw)即相机设置文件,官方提供的是Asus.yaml,可以另复制命名一个文件My_camera.yaml,将里面的相机参数修改成自己标定过的参数。sudoaptinstalllibeieng3-dev#命令安装的版本是eigen。

疯狂的石头 742

纯JS实现SM3加密算法(兼容IE浏览器)

纯JS实现SM3加密,IE、谷歌、火狐等浏览器可以直接使用。

qianpou的博客 7355

tomcat源码阅读之session管理器(Manager)

一、UML图分析: (一) Session: Session保存了一个客户端访问服务器时,服务器专门为这个客户端建立一个session用来保存相关的会话信息,session有一个有效时间,这个时间默认是60秒,如果超过60秒该客户端没有再发送请求信息过来,则服务器会删除该session; 1、每个session有一个唯一的id用来区分不同的session; 2、从session的...

weixin_30622107的博客 289

不用买机械臂!用Python+ROS仿真实现RGB-D物体抓取全流程(Gazebo/MoveIt教程)

本文详细介绍了如何利用Python和ROS仿真环境(Gazebo/MoveIt)实现RGB-D物体抓取全流程,无需购买昂贵机械臂硬件。从环境搭建、机械臂模型导入、深度视觉系统配置到MoveIt运动规划,提供完整的实战指南,特别适合个人开发者和学生团队进行机械臂抓取算法验证与开发。

weixin_29061041的博客 341

tomcat源码解析--SessionManager

Manager 是tomcat 用于管理session的操作的定义,ManagerBase 设置默认参数,实现一些公用方法 StandardManager 是真正tomcat用来处理session的管理器,它实现了lifecycle接口,具体的关系如下  其中clusterManager是定义集群环境下session管理的操作,clusterManagerBase继承了Mana

wjacketcn的专栏 2191

刷机维修进阶教程-----adb禁用错了系统app导致无法开机 如何保数据无损恢复机型

在刷机维修过程中 。我们会遇到一些由于客户使用adb指令来禁用手机app而导致手机无法开机进入系统的故障机型。通常此类问题机型有好几种解决方法。但如果客户需要保数据来恢复机型。其实操作也是很简单的.还有类似误删除应用导致不开机等等如何保数据。  通过博文了解💝💝💝    1💝💝💝----adb禁用或者删除系统app导致无法开机的几种解决方法 2💝💝💝----如何保数据来无损恢复机型 3💝💝💝----其他保数据解决系统类故障无法开机的步骤解析

小马哥的专栏 1353

Kaggle赛题总结:Enefit - Predict Energy Behavior of Prosumers

竞赛旨在解决能源不平衡的问题,即预计使用的能源与实际使用或产生的能源不符。自发自用者是既消耗又产生能源的个体,他们在造成能源不平衡方面起到了重要作用。尽管他们只占所有能源消费者的一小部分,但他们不可预测的能源使用行为给能源公司带来了物流和财务问题。如果不加以解决,可能会导致运营成本增加、电网不稳定以及能源资源的低效利用。如果这个问题得到有效解决,将显著降低不平衡成本,提高电网的可靠性,并使自发自用者更高效和可持续地融入能源系统中。

猫敷雪 741

tomcat集群扩展session集中管理,Memcached-session-manager使用总结

最近在研究tomcat做负载均衡的时候如何实现ha,还有就是不采用session复制的方法做集群。 想到的是将session全部存储在后端的缓存服务器中。 正好网上有这么一个工具Memcached-session-manager(后面简称msm),所以直接扒下来用了。 地址如下: [url]http://code.google.com/p/memcached-session...

miwucc的专栏 242

数字游民产业小报告 · 2025

2025 年全球数字游民约(不同统计口径差异很大,低估法约 4,000 万,高估法 8,000 万),美国来源占比最高。:2025 Q1 约岗位允许一定程度远程;2024 年美国员工至少部分远程(全球 2023 年约 28%)。:到 2025 年,提供数字游民/远程工作签证(媒体口径 50–73 个不等;福布斯 66、Citizen Remote 50+、有机构清单称 73)。:以英国为例,期望未来一年全勤到岗、企业因强制返岗出现离职,说明“灵活/远程”仍是劳动力市场的筹码之一。

Anthony1453的博客 1469

Tomcat集群扩展session集中管理,Memcached-session-manager使用

研究tomcat做负载均衡的时候如何实现ha,还有就是不采用session复制的方法做集群。想到的是将session全部存储在后端的缓存服务器中。正好网上有这么一个工具Memcached-session-manager(后面简称msm),所以直接扒下来用了。地址如下:http://code.google.com/p/memcached-session-manager/msm支持 stickty(沾...

weixin_34211761的博客 80

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

tomcat集群扩展session集中管理,Memcached-session-manager...

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34191734的博客 101

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

tomcat集群扩展session集中管理

原文链接:http://hi.baidu.com/drnadmhzfnacefe/item/87cead68940ef408a1cf0fa2 tomcat集群扩展session集中管理,Memcached-session-manager使用 研究tomcat做负载均衡的时候如何实现ha,还有就是不采用session复制的方法做集群。 想到的是将session全部存储在后端的缓存服务器

moguibeijing的专栏 1544

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Tomcat 会话保持:Memcached+Nginx 实战

本实验构建了基于 Tomcat 集群的分布式会话管理系统,通过整合 Memcached 缓存和 Nginx 负载均衡技术,实高可用性会话保持。Tomcat 节点通过 context.xml 配置 MemcachedBackupSessionManager,将会话数据序列化存储至 Memcached 集群,采用 Kryo 序列化提升传输效率。Nginx 通过一致性哈希算法实现基于 JSESSIONID的会话粘性路由,确保客户端请求始终定向至同一 Tomcat 节点。

a_2373179473的博客 1133

Tomcat通过Memcached实现session共享

对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块。要实现这一点, 大体上有两种方式: 一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器来获取数据; 另一种就是在集群中的所有节点间进行Session数据的同步拷贝,任何一个节点均保存了所有的Session数据。 在集群系统下实现session统一的有如下几种方案: 1) 请求精确定位:session s

weixin_42073629的博客 1416

Tomcat集群--基于Memcached的Session共享

一、需求     Tomcat部署多节点,实现Web应用高可用性,去除Web服务单点故障的隐患,目前可以考虑的方案一般有以下几种:     1. 使用Tomcat自带的Cluster方式,多个Tomcat间自动实时复制Session信息,根据官网提供配置文档即可实现,配置起来简单,但是这个方案效率比较低,在高并发的下表现并不好     2. 利用Nginx的基于访问IP的hash路由

瀧とJava技朮抟孄 1104

Nginx+Tomcat+Memcached集群

Nginx+Tomcat+Memcached集群 Tomcat集群session同步方案有以下几种方式: 使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单。但这个方案的效率比较低,在大并发下表现并不好。...

dbwg38174的博客 237

Nginx+Tomcat+Memcached集群 【测试成功】

Nginx+Tomcat+Memcached集群Tomcat集群session同步方案有以下几种方式:使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单。但这个方案的效率比较低,在大并发下表现并不好。原理:http://zyycaesar.iteye.com/blog/296606利用nginx的基于访问ip的hash路由策略,保证访问的ip

JEECG官方博客 3003

tomcat集群 session共享 memcached-session-manager教程2

  tomcat集群扩展session集中管理,Memcached-session-manager使用 研究tomcat做负载均衡的时候如何实现ha,还有就是不采用session复制的方法做集群。想到的是将session全部存储在后端的缓存服务器中。正好网上有这么一个工具Memcached-session-manager(后面简称msm),所以直接扒下来用了。地址如下:http:/...

学无止境 142
上一篇: Spring中线程池的应用
下一篇: linux Oracle服务启动&停止脚本与开机自启动
danwind
博客等级 码龄19年 6粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值