Memcache学习笔记三:Memcache管理Tomcat的Session,Session共享

Memcache学习笔记三:Memcache管理Tomcat的Session,Session共享

标签(空格分隔): Memcache Tomcat Session


一、了解黏性Session(stick Session)和非黏性Session(non-sticky Session)

    这两个概念可以在集群分布式Session架构中很好的解释和理解,出现于应用服务器的集群环境中。如下图两种架构。
    在理解这两者的特点之前我们先看看这两种架构。
    第一种架构:应用服务器进行集群管理,客户端访问代理服务器,代理服务器进行分配哪台应用服务器进行相应请求,Session池进行
每台应用服务器的Session复制备份,防止应用服务器宕机,在这种架构中,应用服务器(Tomcat)自己也管理Session,相当于Session
池的“主节点”。有请求到达产生Session,Session池对Session进行备份。代理服务器采用的是IP分治策略,也就是对访问者的【IP进行
Hsah算法】%【当前可用服务器台数】得到的结果分配到对应的应用服务器上。这样做的好处是尽量将同一个请求都有同一台服务器进行
处理响应。但是同时也有问题存在,例如:在一个局域网里有很多客户端,但是使用的是同一个路由进行数据的转发,这样就会出现很多请
求落到了同一个应用服务器上。当出现比较极限的情况,很多局域网都落到同一台应用服务器上,就出现了负载不均的状况。这种架构能够实现自动故障转移和Session共享。

    第二种架构:代理服务器用于转发请求,应用服务器只是响应请求不对Session进行管理,Session池对应用服务器的Session统一进行管
理。请求到达应用服务器拿到请求的Session,到Session池中查询有没有Session,有就拿到进行响应,没有就创建,同时添加到
Session池中。这种架构也能够实现自动故障转移和Session共享。

这里写图片描述

  1. 黏性Session

        黏性Session:是对于用户和应用服务器之间、应用服务器和缓存的集中管理或备份服务器之间的关系。如上图的第一种架构中就
    属于粘性Session,客户端和应用服务器有一定的关系。这种关系的Session就属于粘性Session。
    
  2. 非黏性Session

        非黏性Session:像上图的第二种架构客户端和应用服务器没有任何Session的相关的联系,客户端有请求,应用服务器就去
    Session池中查询,有就进行响应,没有就创建、添加到Session池中,然后进行响应。
    

简单来讲就是:

黏性Session:当用户发出第一个请求后,负载均衡器动态的把该用户分配到某个节点,并记录该节点的路由,以后该用户的所有请求都绑定到这个路由,用户只会与该server发生交互,这种策略被称为粘性session(sticky session)。反之则是非黏性Session。

二、进行配置

准备工作:
    在window下进行配置
    两台tomcat服务器    端口好设置为:8081、8082
    一个简单测试应用

修改端口

//修改tom1的server.xml
    <Server port="8006" shutdown="SHUTDOWN">
    <Connector port="8081" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />  
//修改tom2的server.xml
    <Server port="8007" shutdown="SHUTDOWN">
    <Connector port="8082" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
    <Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />      

测试应用

//tom1的应用的三个jsp文件用于测试
//add.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String name=request.getParameter("name");
    session.setAttribute("name", name);
 %>

 //index.jsp
 在body标签中表明是Tomcat1

 //show.jsp
 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String name=(String)session.getAttribute("name");
    out.println("<h1>name:"+name+"</h1>");
    out.println("<h1>sessionID:"+session.getId()+"</h1>");
 %>

 //tom2的应用的三个jsp文件用于测试
 index.jsp在body标签中表明是Tomcat2

 //其他两个jsp与tom1相同

添加jar包

memcached-session-manager-tc6-1.9.7.jar     //与使用tomcat版本必修相同,测试使用都是6
kryo相关jar     //序列化,序列化相关还有:flexjson、xstream等
memcached-session-manager-1.9.7.jar
spymemcached-2.11.1.jar

关键步骤

  1. 测试粘性Session
    修改tom1和tom2的context.xml,在Context标签中添加如下代码

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:192.168.0.167:11211,n2:192.168.0.167:11212"
        failoverNodes="n1"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
  2. 非粘性Session
    修改tom1和tom2的context.xml,在Context标签中添加如下代码

    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:192.168.0.167:11211,n2:192.168.0.167:11212"
        sticky="false"
        sessionBackupAsync="false"
        lockingMode="uriPattern:/path1|/path2"
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
      />

    结果自行测试,体会两者的区别
    下一篇展示nginx代理服务器对tomcat的集群的管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值