经过查询资料,解决网站跨服务器之间的Session共享方案大概有以下3种方案:
非红色字体为网上的文章摘录:
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头中传递到服务器。
这种解决方法的优点是减轻了服务器的压力、节省资源。而且一个session中的两次或多次请求可以在一个群集中的多个服务器上完成。
总结,由于整个系统较大,不能局限于web端。用户的Session(只需简单的username,userid,权限,登入统计,用户状态,其余的还是靠数据库服务处理)必定需在coreserver有处理,就web应用服务较多,如用户信息服务(注册之类,较多的依靠jsf,离不开httpSession),文件服务,地图服务,没必要在放在同一台服务器上,也没必要将httpSession共享,后2者甚至不需要httpsession,直接使用 coreserver的session数据即可。
而对于一个实际项目来说,不能太局限,采取一般解决思路就是选择某一种方案为依托,并汲取其他方案的优点,针对项目实际设计开发出满足要求的方案。手头上的资料比较贫乏,现阶段得出的结论会有所偏差,需继续调研。
- 大小: 10.2 KB
分享到:
相关推荐
在was集群中,通常需要设置session共享,按照文档步骤可以完成session共享设置,解决你应用中的问题
SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...
主要为大家详细介绍了Springboot实现多服务器session共享,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
所以系统一旦引入shiro后,采用传统的tomcat session共享机制是无效的,必须采用面向shiro 的session共享。 网上针对“shiro session共享”的文章比较多,但是大同小异,基本是基于redis实现的。但是该套实现,代码...
PHP实现多服务器session共享之memcache共享
nginx+tomcat8+memcached session共享所需jar包 直接放到tomcat/lib下即可
C#不同域名之间的Session共享,挺简单的,也挺有用
springboot +shiro+redis实现session共享(方案二)1
大量的并发访问或数据流量分担到多台节点设备上分别处理,减少...但是负载均衡有一个问题就是不同的服务器间进行session共享问题的处理;肯定不可能每分配到一个服务上让用户进行一次登录,这样的用户体验会是极差的;
自己做的一个nginx+tomcat+redis完成session共享小例子,包括所需jar,适合初学者,希望大家一起学习交流
集群session共享jar包之tomcat8。集群插件,redis方式实现session共享插件
Windows+Nginx+Tomcat做负载均衡同时实现session共享Demo
适配与Tomcat7、8、9的redis session共享jar包
linux.tomcat-session共享.redis.安装包
weblogic session共享的sql语句_mysql 官方网站提供了DB2、oracle、sqlserver、 如果想要那些数据库,就去官网上看吧, 我这个是mysql的。 都别下错了!
完整tomcat8内含session共享包,亲自测试可以使用,有问题可以私聊。
ssm+redis+nginx实现session共享和负载均衡,大家一起来研究吧
SpringBoot+MyBatis+SpringSession+Redis实现session共享及单点登录开发实例
此压缩包为tomcat8利用redis实现session共享所需要的jar包,包含(commons-pool2-2.6.0.jar、jedis-2.9.0.jar、tomcat-redis-session-manager.jar)直接将三个jar包复制Tomcat目录lib下面,在修改conf下context.xml...
tomcat集群session共享