MSM实现tomcat集群的session共享

msm集群session共享 tomcat下对集群的服务配置session共享包和配置文件. 立即下载

本文首发于我的个人网站: https://hewanyue.com/
本文作者: Hechao
本文链接: https://hewanyue.com/blog/6254cc16.html

会话保持起源

  tomcat作为一个应用服务器,单机性能上都是无法满足生产中需要的,而想要解决高并发场景,光靠提升单机性能,成本与效果肯定都是无法让人接受的,而此时我们一般都采用tomcat集群的方式,用多台tomcat服务器来共同支撑我们的业务。
  但这时就出现了一个新的问题,那就是会话保持。因为每台tomcat服务器的session是独立的,当客户端被调度到一个新的tomcat服务器时,他无法识别之前一台的tomcat服务器分配的sessionID,于是对于此次访问,之前的会话信息就都没有了,这表现在用户的客户端就相当于,点开一个新的链接,就发现需要重新登陆,或者之前的购物车里的商品都不见了等等。这样的客户访问体验绝对不是我们想要的,所以我们需要实现会话保持功能!

会话保持实现

  一般tomcat的会话保持有三种方案实现:

  • nginx、httpd或者haproxy的调度实现session绑定,一般是源地址哈希方式实现
    优点:简单易配置
    缺点:
    ①如果目标服务器故障后,没有做持久化的话就会丢失session;
    ②即便做了持久化,当服务器故障后,nginx或者haproxy会不得不重新分配一个tomcat服务器,而这时因为新的tomcat服务器上没有原来的sessionID,所以无法找到相应会话信息,会重新分配一个sessionID给客户端,就算原来的tomcat服务器重新上线,又被分配到原来的tomcat服务器中,可此时客户端已经有了新的sessionID,也不会去读取最开始的session信息,那些会话信息就相当于永远丢失了。
  • session复制集群,官方给出的tomcat会话共享解决方案
      tomcat自己提供的多播集群,通过多播将任何一台的session同步到其他节点。
    缺点:
    ①tomcat的同步节点不宜过多,互相即时通信session需要太多带宽;
    ②每一台tomcat服务器都拥有全部session信息,内存占用太多。
  • session server
      session 共享服务器,一般使用memcached、redis做共享的session服务器。
    目前最理想的解决方案,不过会需要额外的机器来配置共享服务器。

反向代理的session绑定

  这种实现session保持的方案,一般是使用的不多,一般用于公司内部中的会话保持场景。只需在haproxy或者nginx中的调度算法中,加入基于源地址hash即可(调度算法参考之前博客)。于是,用户每次访问都会被调度到同一台tomcat服务器上,上面已有他的session信息,便实现了会话保持。

配置实现

  我们用一台nginx服务器做反向代理,两台tomcat服务器来演示实现过程。

nginx主机ip:192.168.32.207
tomcat主机1ip:192.168.32.231
tomcat主机2ip:192.168.32.232

  将3台机子中的nginx或tomcat服务启动之后,分别检查80端口和8080端口是否都已监听,确保服务启动。

iptables -F
getenforce 0

  确保防火墙和SELinux设置不会干扰我们几台主机间的相互通信。
  nginx主机反向代理的配置

upstream tomcat {
    #ip_hash; #先关闭原地址iphash,观察效果
    server 192.168.32.231:8080 weight=1 fail_timeout=5s max_fails=3;
    server 192.168.32.232:8080 weight=1 fail_timeout=5s max_fails=3;
}

server {
    listen 80;
    index index.jsp
#    server_name www.example.net;
#    location ~* \.(jsp|do)$ {
    location / {
        proxy_pass http://tomcat;
    }
}

  可启用主机名,也可不启用直接用端口访问。用域名访问还需要改DNS或者hosts设置,比较麻烦,我们就直接通过IP+端口访问就可以了。
  tomcat服务器中可以新建一个host,也可使用原先的localhost默认主机。我们这次不用之前的localhost,而是自己新创建一个host标签,指定appBase在/data/myapp目录下。两个tomcat服务器都要执行如下操作:

vim /apps/tomcat/conf/server.xml

  找到Engine标签,将默认主机修改为``myapp`

    <Engine name="Catalina" defaultHost="myapp">

  找到localhost的</Host>标签,在下面创建新的主机myapp,指定appBase为/data/myapp

      <Host name="myapp"  appBase="/data/myapp"
            unpackWARs="true" autoDeploy="true">
      </Host>

  PS:Host name一般为主机域名,当一个tomcat中有多个host服务时,就是通过http报文请求头部的host信息来判断去访问哪个host服务的,当找不到对应的主机之后才访问defaultHost,我们这里因为只有启用了一个host,且为defaultHost,所以就无所谓,可以任意命名了,只需对应上就好。
  之后我们要在/data/myapp目录下创建一个ROOT目录来作为tomcat访问的默认目录,注意ROOT是大写的。

mkdir -p /data/myapp/ROOT

  为了方便我们看到效果,我们编写index.jsp时,调用一些函数,方便我们看到我们访问的tomcat主机的IP和端口、sessionID、访问时间。

vim /data/myapp/ROOT/index.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>lbjsptest</title>
</head>
<body>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>

  此时,我们访问nginx的80端口,就可以被反向代理到后端的两个tomcat服务器上去。而这时,是轮询的调度方式,也就是一边一次,可以看到访问的主机和sessionID都是一直在变化的。
效果如下图所示:
nginx轮询tomcat

  每一次的sessionID都没有重复过,这肯定不满足我们的需要。所以我们将nginx配置中#ip_hash;的#注释去掉,重启nginx服务,再看效果,如下图所示:
在这里插入图片描述
  可以看到,每次刷新,主机IP和sessionID都不再变化,说明绑定session成功。

session复制集群

  这是tomcat官方提供的解决方案,所有tomcat上都有全量的session,不过同步session信息会消耗带宽,而且所有服务器保存所有session信息也比较占用资源,对于tomcat这种本身就处于效率瓶颈的服务来说,高并发场景下超过若五个tomcat服务器,就不再建议使用。
  配置详细可以参见官网配置说明。

        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>

            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>

          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>

  将官网上的这段集群配置,插入到两个tomcat服务器中我们创建的host标签中(也可插入引擎标签中,就相当于所有主机都生效),即<Host name标签与</Host>标签的中间。
  配置说明:

Cluster 集群配置
Manager 会话管理器配置
Channel 信道配置
        Membership 成员判定。使用什么多播地址、端口多少、间隔时长ms、超时时长ms。同一个多播地址和端口认为同属一个组。使用时修改这个多播地址,以防冲突
        Receiver 接收器,多线程接收多个其他节点的心跳、会话信息。默认会从4000到4100依次尝试可用端口。
        address="auto",auto可能绑定到127.0.0.1上,所以一定要改为可以用的IP上去
        Sender 多线程发送器,内部使用了tcp连接池。
        Interceptor 拦截器
ReplicationValve 检测哪些请求需要检测Session,Session数据是否有了变化,需要启动复制过程
ClusterSessionListener 集群session侦听器

  复制完官方文档里的配置,我们还需要修改接收器的ip为本机ip,不能使用auto,否则会无法同步session信息。
  此外,还需要在应用的web.xml文件中最后一行</web-app>标签的上面一行插入子标签<distributable/>表示可分配。
  操作如下:

mkdir /data/myapp/ROOT/WEB-INF
cp /apps/tomcat/conf/web.xml /data/myapp/ROOT/WEB-INF/
sed -i '/<\/web-app>/i<distributable/>' /data/myapp/ROOT/WEB-INF/web.xml

  此时,如果我们将前端Nginx或者其他反向代理服务器中的源地址hash去掉,我们就可以看到,虽然访问的tomcat服务器在变化(服务器ip变化),而sessionID却是不变的,因为每个tomcat服务器上都有全量的相同的session信息。
集群tomcat

session 共享服务器

  这种实现方式其实才是本文标题中真正的session共享,毕竟共享经济炒的很热,我们都知道,所谓共享,共用才叫共享,前面提到的那种tomcat集群里会话信息人手一份可不能称作是共享。于是乎,我们想到用将session放到外部存储,所有的tomcat服务器都去外部存储中去查找sessionID。
  储存session信息肯定不能存储在磁盘文件中,这样的读取写入性能都会很慢,放在mysql数据库中或者以硬盘文件的方式保存,高并发场景下的读取写入速度都将会大打折扣。所以我们要使用类似memcached或者redis这种Key/Value的非关系型数据库里,也被称作NoSQL。
  memcached和redis这种键值对型数据库的数据信息都是存储在内存中的,读写效率都很高,而且由于没有复杂的表关系,采用的是哈希算法,他们对于信息的查找都是O(1),而不是类似mysql等数据库的O(n),意思就是说耗时/耗空间与总数据量大小无关,不会随着数据量的增大导致查找时间几何倍数的增长。
  但也因为memcached和redis的数据都是储存在内存中的,而且memcached还不支持持久化,所以我们一定要做好高可用,一旦发生故障,会话信息将立即丢失,几乎没有恢复的可能。
  要实现tomcat共享session服务器,首先,我们要让tomcat将session储存到memcached或者redis等外部存储上,这就需要我们对tomcat进行配置,其次我们要将session信息序列化为变为字节流以便能储存在session服务器中,还要能将session服务器中的数据反序列化为可以识别的session信息,最后,当然我们还需要一个客户端来跟后端的session服务器通信,才能将数据写入和读取。
  这想实现确实也比较复杂,不过在github已有开源解决方案(网址是https://github.com/magro/memcached-session-manager),memcached-session-manager,简称msm,后端采用memcached或者redis都可以(之前只支持memcached,因而得名msm,后来支持redis后,人们还是习惯叫它msm),且已经完成了对tomcat的session共享的配置支持(支持tomcat6.X、7.X、8.X、9.X),我们直接去下载对应版本的去使用就可以了。
  根据项目的介绍文档,我们知道,想实现tomcat的session共享,我们至少需要配套的工具有:

  • tomcat的session管理工具 memcached-session-manager
  • 与session服务器通信的客户端
    如果是memcached,则建议使用spymemcached.jar
    如果是redis,则建议使用jedis.jar
  • 将session信息序列化的工具,作者推荐使用kryo。

  这些工具官网上也都提供了下载链接,我们直接下载下来即可。
  kryo如下图所示
kryo
  其他工具包如下图所示
msm
  将这些jar包统统拷贝到tomcat服务器的lib目录下(改变lib目录下的jar包需重启tomcat服务才能生效)
  使用msm搭建session共享服务器,如果后端为memcached,则有两种模式可以选,分别是sticky模式和non-sticky模式,后端为redis,则使用类似non-sticky模式。

sticky模式

  以两台服务器为例,将tomcat1和memcached1部署在一台服务器上(简称为t1、m1),tomcat2和memcached2部署在另一台服务器上(简称为t2、m2)为例,结构图如下图所示。

<t1>   <t2>
  . \ / .
  .  X  .
  . / \ .
<m1>   <m2>

  实现原理:当请求结束时Tomcat的session会送给memcached备份。即Tomcat session为主session,memcached session为备session,使用memcached相当于备份了一份Session。查询Session时Tomcat会优先使用自己内存的Session,Tomcat通过jvmRoute发现不是自己的Session,便从memcached中找到该Session,更新本机Session,请求完成后更新memcached。
  可能有的朋友看的一头雾水,这到底是个什么结构。其实很简单,sticky模式就是t1的session信息还是储存在t1上,不过以m2为备用数据库,t2的session信息也是放在t2中储存,以m1服务器为备用服务器。这就意味着,用户在访问t1时,是从t1获取session信息,当t1挂掉或者整个节点1服务器挂掉之后,用户会被调度到t2上,而t2本地中没有session信息时,就会去m2中上找相关sessionID,而m2因为是t1的备用存储,所以有跟t1完全相同的session信息,于是用户的sessionID就可以被t2识别;而当m2备用存储服务挂掉之后,t1服务会通过检测发现自己没有备用存储,就会自动将m1也指定为自己的备用存储,将备份信息也同步至m1中,于是用户若再从t2访问时,虽然因为m2挂掉,其中的数据都无法访问,但t2就可以从m1上读取到对应的sessionID并同步到t2本身的存储中,也可以保持之前的会话信息。
  修改的配置也很简单,依照官网说明,将下面的代码标签插入/conf/context.xml文件中的context标签结尾就可以了

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.32.231:11211,n2:192.168.32.232:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

  n1、n2只是memcached的节点别名,可以重新命名。
failoverNodes是指故障转移节点,也就是发生故障之后的备用节点,所以在n1节点上,n1是备用节点,n2是主存储节点。另一台Tomcat中配置将failoverNodes改为n2,意思是其主节点是n1,备用节点是n2。
若配置成功,在/apps/tomcat/log/catalina.out文件中看到如下信息。

tail -n 20 /apps/tomcat/logs/catalina.out
23-Nov-2019 13:35:54.187 INFO [myapp-startStop-1] de.javakaffee.web.msm.MemcachedSessionService.startInternal --------
-  finished initialization:
- sticky: true
- operation timeout: 1000
- node ids: [n1]
- failover node ids: [n2]
- storage key prefix: null
- locking mode: null (expiration: 5s)
--------

此时在访问我们的前端代理(取消ipHASH绑定)就会看到下面界面,将节点2 关机,可以看到访问ip固定为192.168.32.231,而使用的memcached变成了n1节点。
tomcatsticky

non-sticky模式

  从msm 1.4.0之后开始支持non-sticky模式。
Tomcat session为中转Session,如果n1为主session,n2为备session,则产生的新的Session会发送给主、备memcached,并清除本地Session,也就是说tomcat本身不储存session信息,只负责产生session。
  需要注意的是,如果n1下线,n2转换为主节点。n1再次上线,n2依然是主Session存储节点。
  配置方法与sticky大致相同,不过在/conf/context.xml文件中的context标签结尾插入代码略有不同,具体代码如下

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

  重启tomcat服务后生效。此时在/apps/tomcat/log/catalina.out文件中看到如下信息。

tail -n 20 /apps/tomcat/logs/catalina.out
23-Nov-2019 13:43:05.863 INFO [myapp-startStop-1] de.javakaffee.web.msm.MemcachedSessionService.startInternal --------
-  finished initialization:
- sticky: false
- operation timeout: 1000
- node ids: [n1, n2]
- failover node ids: []
- storage key prefix: null
- locking mode: uriPattern:/path1|/path2 (expiration: 5s)
--------

  再次尝试访问负载代理服务器,发现同样实现了访问tomcatIP变化,sessionID不变,说明配置成功。
  而后端使用redis作为session共享服务器时,仅支持non-stricky模式。建议用另外的服务器安装redis服务,并修改监听IP后启动,tomcat服务器中将jedis.jarjar包拷贝至tomcat安装路径下lib目录,同样在/conf/context.xml文件中的context标签结尾插入下面的代码即可(例如redis服务器IP端口为192.168.32.233:6379,可配置redis集群,可参考我之前博客redis高可用配置)。

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="redis://192.168.32.233:6379"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
memcached-session-manager(MSM) Tomcat集群session共享示例 立即下载

相关推荐

Tomcat集群——使用MSM管理集群Session

NULL 博文链接:https://ajita.iteye.com/blog/1716320

基于msm实现tomcat下session共享

前提 系统使用centos7 1908 mini 实现nginx反向代理: 192.168.38.30 (代理tomcat1与tomcat2) 实现tomcat服务器1: 192.168.38.60 实现tomcat服务器2: 192.168.38.61 实现memcache服务器1: 192.168.38.78 实现memcache服务器2: 192.168.38.79 ...

东烨#2738 323

智能车竞赛必备:STC32G144K开源库实战指南(含总钻风摄像头配置)

本文为智能车竞赛参赛者提供了一份基于STC32G144K微控制器与逐飞开源库的实战开发指南。文章详细介绍了从开发环境搭建、总钻风摄像头驱动配置与图像采集优化,到核心控制算法实现与多任务调度等关键步骤,旨在帮助队伍快速构建稳定高效的视觉处理系统,提升竞赛竞争力。

weixin_29191081的博客 712

Java状态同步机制实战:从Redis发布订阅到分布式系统一致性

状态同步是分布式系统中的基础概念,指多个组件或服务之间保持数据状态的一致性。其核心原理基于发布订阅模式和最终一致性理论,通过消息中间件实现状态变更的实时通知。在技术价值层面,可靠的状态同步能有效解决数据不一致、消息丢失等工程难题,提升系统稳定性。典型应用场景包括用户在线状态管理、订单状态跟踪、设备状态监控等分布式系统。本文以Redis发布订阅和Spring Boot为技术基础,深入探讨高并发场景下的状态同步实践方案,涵盖原子性操作、容错机制等关键技术要点,为构建可靠的状态管理提供完整解决方案。

weixin_34357436的博客 435

pytorch转onnx转paddlepaddle

1.pt转onnx 可查看我之前的文章:https://blog.youkuaiyun.com/oyjwin/article/details/117778583?spm=1001.2014.3001.5501

oyjwin的博客 1461

学习海康VisionMaster之BLOB分析

6):软阈值(相对):是一种动态阈值分割方法,其核心思想是 基于图像局部特性(如背景或参考区域)自适应调整阈值范围,适用于光照变化明显、背景灰度不均的场景。3:拖入位置修正功能:这个非常重要,模版匹配成功后会得到新的匹配坐标,那和创建模版时候的原点坐标会组合成一个坐标变换矩阵,通过这个矩阵,那后续的blob分析窗口则可以实现精确定位来查找目标对象。(2):设定参数:这里阈值方式是blob的核心算法,根据不同的应用场景来选择不同的阈值方式。8:高级参数:是设定blob区域的特征范围,用于筛选出来特定的区域。

yuhouxiyang的专栏 3620

Tomcat利用MSM实现Session共享方案解说

  Session共享有多种解决方法,常用的有四种:1)客户端Cookie保存2)服务器间Session同步3)使用集群管理Session(如MSM) 4)把Session持久化到数据库 针对上面Session共享四种方法的详解:1)客户端Cookie保存以cookie加密的方式保存在客户端.优点是减轻服务器端的压力,每次session信息被写在客服端,然后经浏览器再次提交到服务器。即使两次请求在...

weixin_34323858的博客 200

YOLO11-Seg优化:卷积变体系列篇 | 动态蛇形卷积(Dynamic Snake Convolution) | ICCV2023

动态蛇形卷积(Dynamic Snake Convolution),增强微小特征提取能力,引入到YOLO11-Seg,与C3k2结合实现二次创新

会AI的学姐 371

MSM搭建(Memcached_Session_Manager)--解决集群session共享

解决分布式项目session问题。

java小酱油 1万+

基于STM32设计的掌上游戏机(运行NES游戏模拟器)详细开发过程

利用STM32单片机移植NES游戏模拟器,完成NES游戏开发,可以玩标准的NES游戏,已测试超级玛丽、魂斗罗之类的都可以正常运行。

4万+

即插即用系列(代码实践)| GRSL 2024 ARConv核心模块:自适应矩形卷积——专为遥感图像设计,打破固定方形卷积束缚

摘要: 本文提出了一种用于遥感图像处理的自适应矩形卷积模块(ARConv),解决了传统方形卷积核在处理复杂几何结构(如细长道路、密集建筑物)时导致的光谱混叠和边缘模糊问题。ARConv通过动态调整卷积核的长宽比和旋转角度,使卷积核形状与地物特征自适应匹配。该模块可即插即用于全色锐化、语义分割等遥感任务,有效提升边缘保持能力和光谱保真度。核心代码基于PyTorch实现,包含偏移量生成和几何变换逻辑,支持梯度缩放以稳定训练。

分享顶会顶刊论文即插即用模块 140

MSM实现tomcat集群中session共享的高可用

1、测试环境概述     采用两台linux x64主机,主机上分别安装memcached与tomcat,memcached提供key/value的存储服务,tomcat提供jsp程序的web容器,两主机关闭iptables,关闭selinux。     主机规划如下: 主机1 IP地址:192.168.0.201 主机名:nod2.tes.com   别名:nod2 安装服务:j

Erica_1230的专栏 909

[EdgeAI] NXP eIQ 机器学习Toolkit (二):模型篇

eIQ™机器学习(ML)软件开发环境支持在恩智浦EdgeVerse™微控制器和微处理器(包括i.MX RT跨界MCU和i.MX系列应用处理器)上使用ML算法。eIQ ML软件包括称为eIQ Toolkit的ML工作流工具以及推理引擎、神经网络编译器和优化库。......

HowieXue 薛永浩的博客 1万+

基于MSM实现nginx负载均衡+tomcat集群+memcached(session共享)

摘要: 基于 MSM(memcached-session-manager)做session共享来实现tomcat集群,并使用 nginx 实现负载均衡,负载均衡方案使用 nginx-sticky-module Session共享的方案介绍 Session 共享有多种解决方法,常用的有四种:客户端 Cookie 保存、服务器间 Session 同步、使用集群管理 Session(如本文...

Jay Chang 240

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

tomcat集群添加msm实现session共享

1 起因     最近对新开发的web系统进行了压力测试,发现tomcat默认配置下压到600人的并发登录首页响应速度就有比较严重的影响,一轮出现2000多个的500和502错误。我把登录的时间统计做了一下,把服务器处理总时间打印出来,看了一下发现有个别响应确实在20秒,但平均时间和lr测试出来的还是相差很远。所以可以断定不是程序处理处理花费了这么多时间,由于在局域网测试,所以也可以排除网络问题

wen_demon的专栏 972

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Nginx+Tomcat7+MSM1.9+实现集群部署及Session共享

系统运行环境为CentOS6.5云服务器,其实在Windows Server服务器上也是一样的。 一、软件准备 1、安装Nginx 安装博文链接:http://blog.youkuaiyun.com/kevin_coder/article/details/66971711 2、安装Tomcat7 CentOS上Tomcat的安装其实就是个解压操作,去Tomcat官网下载7*.tar.gz包,使用命令

kevin_coder的博客 692

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Memcached-Session-Manager多tomcat实现session跨域共享配置

Memcached-Session-Manager多tomcat实现session跨域共享配置 当高并发出现的时候,我们通常想到的是使用nginx配置负载均衡来实现对多个服务器(tomcat部署应用)的iphash来处理,这样的场景下 同一个应用服务部署在多个tomcat集群下,高并发访问的时候通过nginx分发实现负载均衡在实际应用中非常好的解决当个应用难于超负荷承载高并发访问的缺陷,但是多tom

三片叶子的修行日记 2437

Tomcat集群环境下session共享方案梳理(1)-通过memcached(MSM)方法实现

转载:https://www.cnblogs.com/kevingrace/p/6398672.html 对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块。要实现这一点, 大体上有两种方式: 一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器...

xqhys的博客 564

Tomcat通过Memcached实现session共享

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

weixin_42073629的博客 1416

Tomcat基于MSM+Memcached实现Session共享

前言在Tomcat集群中,当一个节点出现故障,其他节点该如何接管故障节点的Session信息呢?本文带来的解决方案是基于MSM+Memcached实现Session共享。相关介绍MSMMSM--Memcached Session Manager是一个高可用的Tomcat Session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同...

weixin_34220963的博客 135
上一篇: linux上部署与配置tomcat
下一篇: KVM虚拟化
MicePro
博客等级 码龄8年 216粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MicePro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值