企业级应用系统很少是部署在单台服务器上的,这样就带来了跨服务器如何进行session共享的问题,笔者提供了两种方案,分别适用于两种不同场合,持久化session适合于高可靠性的环境,性能上可能有所损坏,而基于memcache的解决方案相对来说性能较好,但一旦memcache重启,数据丢失。
分布式session之持久化
以mysql举例
1.建立数据库
create database session_persistence;
use session_persistence;
create table session(
session_id varchar(100) NOT NULL,
valid_session char(1) NOT NULL,
max_inactive int(11) NOT NULL,
last_access bigint(20) NOT NULL,
app_name varchar(255) DEFAULT NULL,
session_data mediumblob,
primary key (session_id),
KEY kapp_name (app_name)
) engine=InnoDB default charset=utf8;
注:表的字段必须和下面的配置对应
2.配置tomcat的context.xml
<Manager className="org.apache.catalina.session.PersistentManager"
distributable="true" duplicates="-1" saveOnRestart="true"
maxActive="-1" maxActiveSessions="0" minIdleSwap="-1" maxIdleSwap="-1"
maxIdleBackup="-1" maxInactiveInterval="-1" sessionCounter="-1">
<Store className="org.apache.catalina.session.JDBCStore"
checkInterval="1"
connectionURL="jdbc:mysql://server_address:port/session_persistence?user=username&password=password"
driverName="com.mysql.jdbc.Driver" sessionAppCol="app_name"
sessionDataCol="session_data" sessionIdCol="session_id"
sessionLastAccessedCol="last_access" sessionMaxInactiveCol="max_inactive"
sessionTable="session" sessionValidCol="valid_session" />
</Manager>
参数与数据库字段对应
3.在tomcat的lib目录下导入mysql
驱动jar
分布式缓存session
以memcache举例
笔者使用google
code下面的memcached-session-manager来实现分布式环境下session的缓存,经笔者测试性能还不错。当然,读者可以按照类似思路自己实现。
memcached-session-manager项目地址:http://code.google.com/p/memcached-session-manager/
笔者使用kryo来做对象序列化。
1.WEB-INF下面需要引入
kryo-1.04-all.jar
kryo-serializers-0.9.jar
msm-kryo-serializer.1.5.0.jar
2.tomcat的lib下面引入
memcached-2.5.jar
memcached-session-manager-1.5.0.jar
memcached-session-manager-tc6-1.5.0.jar
3.context.xml的context标签下面加入:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:127.0.0.1:11211" sticky="false" lockingMode="auto"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync="false" sessionBackupTimeout="0"
memcachedProtocol="binary" copyCollectionsForSerialization="true"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
其中memcachedNodes表示memcache节点,如需配置多个中间空格分开(如
n1:192.168.0.11.1:11211
n2:192.168.0.10:11211)
分享到:
相关推荐
以下是对几种分布式Session解决方案的详细解析: 1. 客户端存储: 这种方法将Session信息直接存储在客户端的Cookie中,确保每次请求都能携带完整的Session信息。然而,这种方法的安全性较低,因为Cookie中的数据...
分布式Session解决方案是为了在分布式系统环境下实现用户会话的共享,以克服HTTP协议无状态的特性。在传统的Web应用中,Session通常存储在单个Web服务器的内存中,但在分布式环境中,用户请求可能会被负载均衡器分配...
本文主要探讨了几种在分布式系统中实现session共享的解决方案。 首先,我们需要理解session的基本概念。session是在服务器端创建的一种存储用户会话状态的机制。每当新的客户端发起HTTP请求时,服务器会创建一个...
### 分布式Session一致性解决方案 在现代互联网应用中,随着业务规模的增长和技术的发展,传统的单体应用模式已逐渐被分布式架构或微服务架构所取代。在这种架构下,系统的可扩展性和高可用性得到了显著提升,但...
实现基于ZooKeeper的分布式Session,主要涉及以下几个步骤: 1. **Session创建与注册**:当用户首次访问应用时,服务器会在ZooKeeper上创建一个与该Session关联的节点,并存储Session数据。这个节点通常包含用户的...
分布式Session管理需要解决以下几个问题: 1. 如何在多个服务器之间共享Session信息? 2. 如何确保Session信息的安全性? 3. 如何快速地检索和存储Session信息? 解决方案之一是使用Hash算法来存储Session信息,并...
本资料将深入探讨分布式Session的解决方案。 首先,我们需要理解什么是分布式会话。分布式会话是指在分布式系统中,用户的会话状态能够在集群中的所有节点间共享和同步。这样,无论用户请求发送到哪台服务器,都能...
针对这些问题,有以下几种解决方案: **1. 使用StateServer模式** 将`<sessionState>`配置中的`mode`属性设置为`StateServer`,这会将Session数据存储在一个单独的ASP.NET State Service进程中。确保启动该服务,并...
分布式Session共享是指在分布式环境下,多个节点之间能够共享用户的Session信息,确保用户无论访问哪个节点都能保持登录状态。这样即使用户在不同的服务器间跳转,也能维持一致的用户体验,避免重复登录等问题。 ##...
在分布式集群环境下,为了实现WebSocket的有效通信,我们需要考虑以下几个方面: 1. **会话保持(Session Stickiness)**:确保同一客户端始终连接到同一服务器节点。 2. **状态共享(State Sharing)**:实现客户端...
要实现Spring Boot分布式Session与Redis的整合,我们需要以下几个步骤: 1. **添加依赖**: 首先在`pom.xml`或`build.gradle`文件中添加Spring Session和Redis的依赖。对于Maven,可以添加如下依赖: ```xml ...
总结来说,"集群环境下memcache解决session共享"是一个针对分布式系统中session管理的有效解决方案。通过使用memcache作为session的中央存储,可以在Tomcat8集群中实现用户状态的无缝切换,提升应用的稳定性和用户...
"表明这个压缩包提供了一个解决方案,弥补了TP3.2.3框架在Session管理方面的不足。开发者可以下载并集成这个驱动,以便在他们的项目中利用Redis作为Session存储。 标签"tpsession"进一步强调了这个话题与ThinkPHP...
2. **统一Session存储**: - **数据库存储**:文中提供的`Session`类示例展示了如何将Session数据存储在MySQL数据库中。这种方法适用于多台服务器或跨域情况,因为数据存储在集中式位置。但需要注意,频繁的Session...
6. **分布式Session存储**: 如Google的OpenID Connect或OAuth 2.0等协议,允许用户在多个服务间共享身份验证信息,无需在每个服务上独立管理session。这种方法适用于大型分布式系统,但实现起来较为复杂。 在选择...
ZooKeeper作为一种强大的分布式协调工具,为分布式Session管理提供了一个高效、可靠的解决方案。通过利用ZooKeeper的特性,可以有效地克服分布式环境下Session管理的挑战,提高系统的整体性能和用户体验。
Spring框架提供了更高级的Session管理功能,如Spring Session,支持分布式Session存储。 总结,Session在互联网系统垂直架构中的管理是复杂而重要的。选择合适的Session解决方案需要综合考虑系统的规模、性能需求和...
### 集群中几种session同步解决方案的比较 在分布式系统和集群环境中,session管理是一项关键技术,它确保了用户在不同服务器之间的交互能够保持一致性。本文将深入探讨六种常用的session共享方法,包括它们的工作...
分布式部署是大型系统或高并发环境下的常见解决方案,它可以将负载分散到多个服务器上,降低单点故障的风险,同时提高服务的响应速度。 分布式Tomcat的实现通常涉及以下几个关键知识点: 1. **负载均衡**:通过...
这个解决方案主要解决分布式系统中的session共享问题,使得用户在不同服务器之间切换时,仍然能够保持会话状态。 Spring Boot是Spring的一个模块化、简化版,它提供了快速构建独立、生产级别的Java应用程序的能力,...