Nginx + Tomcat + MSM + Memcached 非粘性Session共享测试

memcached-session-manager是GitHub上的一个开源项目,可以实现基于Memcached的Session共享,官网地址:http://code.google.com/p/memcached-session-manager/

具有如下特性:

1,Supports Tomcat 6 and Tomcat 7
2,Handles sticky or non-sticky sessions
3,No Single Point of Failure
4,Handles tomcat failover
5,Handles memcached failover
6,Comes with pluggable session serialization
7,Allows asynchronous session storage for faster response times
8,Sessions are only sent to memcached if they're actually modified
9,JMX management & monitoring

配置:

1,Tomcat,tomcat/lib下新增如下jar包:


2,conf/context.xml配置:

<Context>
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
             memcachedNodes="n1:172.16.205.186:11211"
             sticky="false"
             sessionBackupAsync="false"
             lockingMode="auto"
             requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" />

</Context>

3,Nginx配置随机分发:

    upstream tomcat_server {
          server 172.16.205.186:9080;
          server 172.16.205.182:9080;
    }
    location / {
            proxy_pass    http://tomcat_server;
            root   html;
            index  index.html index.htm;
     }

4,Web工程HttpServlet代码:

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		boolean reset = false;
		if(request.getParameter("reset") != null && request.getParameter("reset").equalsIgnoreCase("true")){
			reset = true;
		}
		
		HttpSession session = request.getSession();
		if(reset){
			session.setAttribute("RequestNum", 0);
		}
		else{
			Integer number = (Integer)session.getAttribute("RequestNum");
			if(null == number){
				number = 0;
			}
			number 		   = number.intValue() + 1;
			session.setAttribute("RequestNum", number);
		}
		Integer requestNum = (Integer)session.getAttribute("RequestNum");
		String outputBody = "Session request number::" + requestNum;
		
		response.getOutputStream().write(outputBody.getBytes());
		response.setStatus(200);
	}

测试:

Step1,开启182和186上的Tomcat,通过Nginx访问Servlet若干次;

Step2,关闭182上Tomcat,关闭186上Tomcat,通过Nginx访问Servlet若干次;

Step3,关闭186上Tomcat,关闭182上Tomcat,通过Nginx访问Servlet若干次;


结果:

多次的联系访问返回连续的计数结果:

Session request number::4


响应速度:

MSM在Session管理时,Tomcat中会保持本地Session,往Memcached中的同步是异步完成的,所以访问速度和普通模式没什么区别。

唯一有区别的是,操作完Step2/Step3后的首次访问时,响应速度会变慢,测试结果为20ms减慢到350ms,但是后续访问速度恢复正常。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1,在tomcat中找到文件apache-tomcat-6.0.37\conf\context.xml 加入内部 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.1.65:11211" requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" sessionBackupAsync="false" sessionBackupTimeout="100" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" copyCollectionsForSerialization="false" /> 加入之后的content.xml的内容为 <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- The contents of this file will be loaded for each web application --> <Context> <!-- Default set of monitored resources --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <!-- Uncomment this to disable session persistence across Tomcat restarts --> <!-- <Manager pathname="" /> --> <!-- Uncomment this to enable Comet connection tacking (provides events on session expiration as well as webapp lifecycle) --> <!-- <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" /> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值