社区
Web 开发
帖子详情
JAVA WEB开发中,跨服务器如何保证session的延续?
shenyi0106
2011-04-27 09:47:49
在WEB开发中,跨服务器如何控制session的延续?
...全文
250
15
打赏
收藏
JAVA WEB开发中,跨服务器如何保证session的延续?
在WEB开发中,跨服务器如何控制session的延续?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shenyi0106
2011-04-27
打赏
举报
回复
[Quote=引用 10 楼 rainsilence 的回复:]
分布式存贮解决方案
[/Quote]
提供何种IO接口?
hepeng_8
2011-04-27
打赏
举报
回复
可以把session放在数据库吗 这样想在那用就在那用啊
rainsilence
2011-04-27
打赏
举报
回复
分布式存贮解决方案
shenyi0106
2011-04-27
打赏
举报
回复
非常感谢各位,尤其是ouwaner,还提供了好几种方案。
Memcache是一种内存数据库产品吗?
rainsilence
2011-04-27
打赏
举报
回复
session复制不是一种好的方法。当集群中的session流量总和超过一台计算机的承受极限的时候,将会造成大面积崩溃。。我建议你从sna架构的角度去考虑
用RequestWrapper+SessionWrapper+Filter把session给包裹掉,集成Memcache。
ouwaner
2011-04-27
打赏
举报
回复
跨服务器之间的Session共享方案需求变得迫切起来,最终催生了多种解决方案,下面列举4种较为可行的方案进行对比探讨:
1. 基于NFS的Session共享
NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发。
这个方案实现最为简单,无需做过多的二次开发,仅需将共享目录服务器mount到各频道服务器的 本地session目录即可,缺点是NFS依托于复杂的安全机制和文件系统,因此并发效率不高,尤其对于session这类高并发读写的小文件, 会由于共享目录服务器的io-wait过高,最终拖累前端WEB应用程序的执行效率。
2. 基于数据库的Session共享
首选当然是大名鼎鼎的Mysql数据库,并且建议使用内存表Heap,提高session操作的读写效率。这个方案的实用性比较强,相信大家普遍在 使用,它的缺点在于session的并发读写能力取决于Mysql数据库的性能,同时需要自己实现session淘汰逻辑,以便定时从数据表中更新、删除 session记录,当并发过高时容易出现表锁,虽然我们可以选择行级锁的表引擎,但不得不否认使用数据库存储Session还是有些杀鸡用牛刀的架势。
3. 基于Cookie的Session共享
这个方案我们可能比较陌生,但它在大型网站中还是比较普遍被使用。原理是将全站用户的Session信息加密、序列化后以Cookie的方式,统一 种植在根域名下(如:.host.com),利用浏览器访问该根域名下的所有二级域名站点时,会传递与之域名对应的所有Cookie内容的特性,从而实现 用户的Cookie化Session 在多服务间的共享访问。
这个方案的优点无需额外的服务器资源;缺点是由于受http协议头信心长度的限制,仅能够存储小部分的用户信息,同时Cookie化的 Session内容需要进行安全加解密(如:采用DES、RSA等进行明文加解密;再由MD5、SHA-1等算法进行防伪认证),另外它也会占用一定的带 宽资源,因为浏览器会在请求当前域名下任何资源时将本地Cookie附加在http头中传递到服务器。
4. 基于Memcache的Session共享
Memcache由于是一款基于Libevent多路异步I/O技术的内存共享系统,简单的Key + Value数据存储模式使得代码逻辑小巧高效,因此在并发处理能力上占据了绝对优势,目前本人所经历的项目达到2000/秒 平均查询,并且服务器CPU消耗依然不到10%。
另外值得一提的是Memcache的内存hash表所特有的Expires数据过期淘汰机制,正好和Session的过期机制不谋而合,降低了过期Session数据删除的代码复杂度,对比“基于数据库的存储方案”,仅这块逻辑就给数据表产生巨大的查询压力
ouwaner
2011-04-27
打赏
举报
回复
session复制的方法,一种是基于db的,一种是基于memory的
session replication 的数据库持久化配置,也可以不用编程的:
1、创建数据库
create database was_sess;
2、在管理控制台创建 datasource
Resource -> JDBC -> JDBC provider -> data sources -> jndi: jdbc/sessions
3、在管理控制台配置session replication
Servers -> Application servers -> app name -> session management -> distributed environment -> in database
设置数据源 JNDI 名称、用户名、密码、行大小即可(DB2专用)、是否使用多行(推荐,特别Session Object里面内容太多的时候)即可。
qingyuan18
2011-04-27
打赏
举报
回复
你说的应该是多个服务器集群的session复制吧?这个所有的Web服务器厂商都有这样的功能
shenyi0106
2011-04-27
打赏
举报
回复
听说weblogic可以配置session复制?
是不是有这么一说?
ouwaner
2011-04-27
打赏
举报
回复
因为SessionId是一致的,所以你可以在跨服务器间建立查询机制,通过SessionId,和key查询想要的数据
阿凡提提
2011-04-27
打赏
举报
回复
跨服务器。。。这个真有点难。。。不过来学习学习。
wangjiangbo2
2011-04-27
打赏
举报
回复
感觉不成,session应该只针对一个服务器
shenyi0106
2011-04-27
打赏
举报
回复
谢谢
结贴给分
rainsilence
2011-04-27
打赏
举报
回复
搜百度,很多的。
Java
Web
开发
详解
Web
在英文
中
的含义是网状物、网络。在计算机领域,它通常指的是后者,即网络。像WWW是由 3 个单词组成的,即World Wide
Web
,
中
文含义是万维网。他们的出现都是为了让我们在网络的世界
中
获取资源,这些资源的存放之...
Java
Web
中
session
session
对象: ...当用户(浏览器)向
Web
应用
服务器
发送第一次请求时,
服务器
会为该用户创建一个唯一标识的会话,会话一直
延续
到访问结(浏览器关闭或用户长时间不访问
Web
应用)。JSP使用
session
对象表示会话...
Java
Web
——
session
对象
①
Web
应用
中
,会话指在一段时间内,一个用户通过浏览器与
服务器
(
Java
工程项目)之间进行的一系列的请求和响应的交互过程。在一个会话
中
,用户可以访问该
Web
应用系统
中
包括网页在内的多种资源。 ②当用户(浏览器)...
java
ee 框架
web
,
java
ee
web
开发
框架的优势和特色
在2004年底
中
国软件技术大会Ioc微容器(也就是Jdon框架的实现原理)演讲
中
指出:我们需要一个
跨
J2SE/
WEB
/EJB的微容器,保护我们的业务核心组件(
中
间件),以
延续
它的生命力,而不是依赖J2SE/J2EE版本.此次J2EE改名为...
Java
Web
中
的
session
对象
什么是
session
对象 ... 当用户(浏览器)向
Web
应用
服务器
发送第一次请求时,
服务器
会为该用户创建一个唯一标识的会话,会话一直
延续
到访问结束(浏览器关闭或用户长时间不访问
Web
应用)。JSP使用...
Web 开发
81,092
社区成员
341,717
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章