当前位置: 首页 > news >正文

Session共享与Sticky模式:优化Web应用性能

在分布式Web应用程序中,会话(Session)管理是确保用户状态在整个服务集群中保持一致的关键。随着应用规模的扩大和用户基数的增长,如何高效地处理会话数据成为了开发者面临的一个重要课题。本文将探讨两种常用的会话管理策略——Session共享与Sticky模式,并讨论它们各自的适用场景及实现方式。

什么是Session?

首先,我们需要了解什么是Session。简单来说,Session是一种用于存储特定用户会话所需信息的方法。它使得服务器能够在一段时间内记住用户的动作和偏好设置,比如登录状态、购物车内容等。然而,在分布式环境中,由于请求可能被路由到不同的服务器实例上,传统的基于内存的Session管理方式面临着挑战。

Session 共享服务器

Session共享指的是所有参与服务的节点都能访问相同的会话数据。这通常通过将Session数据存储在一个中心化的存储系统中来实现,如Redis、Memcached或数据库。

MSM 介绍

注意:当前MSM不支持 tomcat11版本
在这里插入图片描述
MSM(memcached session manager)提供将Tomcat的session保持到memcached或Redis的程序,可以实现高可用。
项目早期托管在google code,目前在Github。
github 网站链接:https://github.com/magro/memcached-session-manager
在这里插入图片描述
支持Tomcat的 6.x、7.x、8.x、9.x
Tomcat的Session管理类,Tomcat版本不同

  • memcached-session-manager-2.3.2.jar
  • memcached-session-manager-tc8-2.3.2.jar

Session数据的序列化、反序列化类

  • 官方推荐kyro
  • 在webapp中WEB-INF/lib/下

驱动类

  • memcached(spymemcached.jar)
  • Redis(jedis.jar)

安装

参考链接
https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
将spymemcached.jar、memcached-session-manage、kyro相关的jar文件都放到Tomcat的lib目录中去,这个目录是 $CATALINA_HOME/lib/,对应本次安装就是/usr/local/tomcat/lib。

kryo-3.0.3.jar
asm-5.2.jar
objenesis-2.6.jar
reflectasm-1.11.9.jar
minlog-1.3.1.jar
kryo-serializers-0.45.jar
msm-kryo-serializer-2.3.2.jar
memcached-session-manager-tc8-2.3.2.jar
spymemcached-2.12.3.jar
memcached-session-manager-2.3.2.jar

Sticky 模式

Sticky 模式工作原理

sticky 模式即前端tomcat和后端memcached有关联(粘性)关系
参考文档
https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

对于最简单的集成,你只需要安装一个 tomcat(6、7、8 或 9)和一个 memcached 或 Redis(或支持 memcached 协议的 s.th)。 
在您的生产环境中,您可能会有多个 tomcat,并且还应该在不同的硬件上提供多个 memcached 节点。
或者,您可以将会话数据存储在 Redis 中,而不是 memcached 中。
你可以使用粘性会话和非粘性会话,memcached-session-manager (msm) 支持两种作模式。以下描述显示了一个具有粘性会话的设置示例,其中安装了两个 tomcat 实例和两个 memcached 实例。
Tomcat-1 (t1) 将主要将其会话存储在运行在另一台机器上的 memcached-2 (m2) 中(m2 是 t1 的常规节点)。
仅当 m2 不可用时,t1 才会将其会话存储在 memcached-1 中(m1,m1 是 t1 的 failoverNode)。
使用此配置,当计算机 1(服务 t1 和 m1)崩溃时,会话不会丢失。
下面非常好的 ASCII 图片展示了这种设置。<t1>   <t2>. \ / ..  X  .. / \ .
<m1>   <m2>

t1和m1部署可以在一台主机上,t2和m2部署也可以在同一台。
当新用户发请求到Tomcat1时, Tomcat1生成session返回给用户的同时,也会同时发给memcached2备份。即Tomcat1 session为主session,memcached2 session为备用session,使用memcached相当于备份了一份Session。
如果Tomcat1发现memcached2 失败,无法备份Session到memcached2,则将Sessoin备份存放在memcached1中。

配置过程
下载相关jar包

下载相关jar包,参考下面官方说明的下载链接
https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
tomcat和memcached相关包
在这里插入图片描述

修改tomcat配置

修改 $CATALINA_HOME/conf/context.xml 特别注意,t1配置中为failoverNodes=“n1”, t2配置为failoverNodes=“n2”

#以下是sticky的配置
<Context>...<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:192.168.1.80:11211,n2:192.168.1.70:11211"failoverNodes="n1"requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/></Context>

配置说明

memcachedNodes="n1:host1.yourdomain.com:11211,n2:host2.yourdomain.com:11211"memcached的节点: n1、n2只是别名,可以重新命名。
failoverNodes 为故障转移节点,n1是备用节点,n2是主存储节点。
另一台Tomcat将此处的n1改为n2,其主节点是n1,备用节点是n2
实战案例 1:tomcat和memcached集成在一台主机

在这里插入图片描述
环境准备
时间同步,确保NTP或Chrony服务正常运行
防火墙规则
禁用SELinux 三台主机

192.168.1.60 nginx nginx
192.168.1.70 tomcat1 jdk21,tomcat10,memcached1.6.24
192.168.1.80 tomcat2 jdk21,tomcat10,memcached1.6.24

配置 Nginx 充当 Proxy
[root@nginx conf.d]#cat tomcat.conf 
upstream tomcat {server 192.168.1.70:8080;server 192.168.1.80:8080;
}
server {listen 80;server_name www.caoge.com;location / {proxy_pass http://tomcat;
}
}
[root@nginx conf.d]#systemctl restart nginx.service 
配置 Memcached

在 tomcat1 上配置 memcached

[root@tomcat1 ~]#apt -y install memcached
[root@tomcat1 ~]#vim /etc/memcached.conf 
#-l 127.0.0.1
#-l ::1
[root@tomcat1 ~]#systemctl restart memcached.service 

在 tomcat2 上配置 memcached

[root@tomcat2 ~]#apt -y install memcached
[root@tomcat2 ~]#vim /etc/memcached.conf 
#-l 127.0.0.1
#-l ::1
[root@tomcat2 ~]#systemctl restart memcached.service 
配置 Tomcat
[root@tomcat1 conf]#vim context.xml
......
http://www.dtcms.com/a/338418.html

相关文章:

  • [激光原理与应用-296]:理论 - 非线性光学 - 线性光学与非线性光学对比
  • SpringBoot校园商铺运营平台
  • 跨平台RTSP播放器深度对比:开源方案与商业SDK的取舍之道
  • MiniMax Agent 上线 Market Place ,AI一键复制克隆网站
  • 视觉语言导航(5)——VLN的具体工作原理——Seq2Seq CMA模型 KL散度 TRANSFORMER 3.1前半段
  • PMP-项目管理-十大知识领域:资源管理-管理团队、设备、材料等资源
  • Win10下配置WSL2后nvidia-smi不正常显示问题
  • 第一阶段C#基础-15:面向对象梳理
  • python-----机器学习中常用的数据预处理
  • 【前端面试题】JavaScript 核心知识点解析(第二十二题到第六十一题)
  • 【数据分析】R语言在生态学数据分析中的应用:从数据处理到可视化
  • 美图披露半年报:AI应用取得突破,净利润同比大增71.3%
  • C++11列表初始化 {}
  • GitHub Actions 从核心思想到最佳实践
  • 宋红康 JVM 笔记 Day04|双亲委派机制、沙箱安全机制、类的自动使用与被动使用
  • 电子电气架构 --- 软件会给汽车带来哪些变化?
  • 鸿蒙生态7月技术月报 | HarmonyOS 5.1 开发特性详解
  • 蓝池参与雅江水电工程融资,助力国家基础设施建设与经济发展
  • 08.常见文本处理工具
  • 03.文件管理和操作命令
  • 解读60页全面认识大数据基础知识培训【附全文阅读】
  • 8.18 打卡 DAY 45 Tensorboard使用介绍
  • Mysql——前模糊索引失效原因及解决方式
  • 深度强化学习之前:强化学习如何记录策略与价值?
  • Java面试题储备14: 使用aop实现全局日志打印
  • Nodejs学习
  • 【SkyWalking】单节点安装
  • Linux命令大全-rmdir命令
  • Java中的 “128陷阱“
  • vue从入门到精通:轻松搭建第一个vue项目