1.背景
随着互联网的日益壮大,网站的pv和uv成线性或者指数倍的增加.单服务器单数据库早已经不能满足实际需求。目前大多数大型网站的服务器都采用了分布式服务集群的部署方式,所谓集群,就是让一组计算机服务器协同工作,解决大并发,大数据量瓶颈问题。但是在服务集群中,session共享往往是一个比较头疼的问题。因为session是在服务器端保存的,如果用户跳转到其他服务器的话,session就会丢失,一般情况下,session不可跨服务器而存在。于是就有了分布式系统的session共享问题。
2.Session共享实现方案
Session共享有多种解决方法,常用的有四种:客户端Cookie保存、服务器间Session同步、使用集群管理Session、把Session持久化到数据库。下面分别就这四种方案进行介绍和比较。
2.1客户端Cookie保存
介绍说明
以cookie加密的方式保存在客户端.优点是减轻服务器端的压力,每次session信息被写在客服端,然后经浏览器再次提交到服务器。即使两次请求在集群中的两台服务器上完成,也可以到达session共享。
这种解决方法的优点是session信息不用存放在服务器端,大大减轻了服务器的压力。另一个优点是一个session中的两次或多次请求可以在一个集群中的多个服务器上完成,可以避免单点故障。目前,淘宝是采用的这种解决方案。
缺点有几个,一是传递cookie时,http信息头的长度限制使我们只能够在cookie中存入一部分用户信息;二是需要额外地做session信息加密的工作;第三,如果采用这种方式,每次访问网站二级域名时都会在http信息头中带有这些以cookie形式存储的session信息,会占用一定的带宽;最后,由于这种方式是在客户端进行信息存储,用户完全可以禁用cookie或删除cookie,不是很可靠。
2.2服务器间Session同步
介绍说明
使用主-从服务器的架构,当用户在主服务器上登录后,通过脚本或者守护进程的方式,将session信息传递到各个从服务器中,这样,用户访问其它的从服务器时,就可以读到session信息。
缺点:比如速度慢、不稳定等,另外,如果session信息传递是主->从单向的,会有一些风险,比如主服务器down了,其它服务器无法获得session信息
2.3 使用集群统一管理Session
介绍说明
提供一个群集保存session共享信息.其他应用统统把自己的session信息存放到session集群服务器组。当应用系统需要session信息的时候直接到session群集服务器上读取。目前大多都是使用Memcache来对Session进行存储。
以Memcache来实现Session共享的方式目前比较流行的有两种实现方案,下面主要对这两种方案进行介绍。
2.3.1 使用Filter方式
此方式使用过滤器的方式重新对httpRequest 对象进行了包装,并加入memcached客户端,此方式的优点是:使用简单,把过滤器配置进去即可,另外比较灵活,因为它是在客户端实现的,配置比较灵活,而且服务器无关,你可以在任何支持servlet的容器上部署。
2.3.2 memcached-session-manager(MSM)
memcached-session-manager,俗称MSM,是一个用于解决分布式tomcat环境下session共享的问题的开源解决方案。它的实现原理为以tomcat插件的方式部署在服务器,修改了servlet容器代码中的session相关代码,使其连接memcached,在memcached中创建和更新session。MSM拥有如下特性:
- 支持Tomcat6、Tomcat7
- 支持黏性、非黏性Session
- 无单一故障点
- 可处理tomcat故障转移
- 可处理memcached故障转移
- 插件式session序列化
- 允许异步保存session,以提升响应速度
- 只有当session有修改时,才会将session写回memcached
- JMX管理&监控
MSM(memcached-session-manager) 支持tomcat6 和tomcat7 ,利用 Value(Tomcat 阀)对Request进行跟踪。Request请求到来时,从memcached加载session,Request请求结束时,将tomcat session更新至memcached,以达到session共享之目的, 支持 sticky 和 non-sticky 模式。
优点:开发者不用考虑session共享的问题了,可以专注于程序开发,像正常使用session那样使用就完事了。不用显示编写代码,只需要对服务器进行配置即可使用。
缺点:如果你想改变session策略的话,必须重新部署每个服务器的servlet容器。
2.4 把Session持久化到数据库
介绍说明
这种共享session的方式即将session信息存入数据库中,其它应用可以从数据库中查出session信息。目前采用这种方案时所使用的数据库一般为mysql。
利用数据库共享session的方案有一定的实用性,但也有如下缺点:首先session的并发读写在数据库中完成,对mysql的性能要求比较高;其次,我们需要额外地实现session淘汰逻辑代码,即定时从数据库表中更新和删除session信息,增加了工作量
附:这份调研报告主要是从网上的资料综合整理而成,如有涉及到侵权的地方,请作者及时联系我,我会第一时间删除。
分享到:
相关推荐
在SSO系统中,OAuth 2.0常被用来实现跨域资源共享和第三方认证。 - **授权码模式**:最常用的OAuth 2.0流程之一,适用于Web应用程序。用户同意授权后,会获得一个授权码,再通过这个授权码换取访问令牌。 - **隐式...
- 不同子系统的登录实现可能不一致,需要对每个系统进行调研,以确定获取和使用令牌或Session的最佳方法。 - 如果多个子系统中存在相同的用户名但密码不同,这可能导致混乱。一种解决方案是建立统一的身份验证策略...
- 软件优化:包括Session复用、OCSP Stapling、False Start、动态记录大小、TLS1.3和HSTS等,但面对日益增长的流量,这些方案逐渐力不从心。 - 硬件加速方案:Tengine利用Intel QAT(QuickAssist Technology)实现...
- 通过Session对象实现用户信息跨页面共享,Request对象获取客户端提交的信息,Response对象响应客户端请求。 3. **进度安排**: - 从确定课题到完成论文,整个过程分为多个阶段,包括文献调研、基础知识学习、...
ASP网上办公自动化系统是一款基于ASP技术的毕业设计项目,它为用户提供了一套高效、便捷的在线办公解决方案。ASP(Active Server Pages)是微软开发的一种服务器端脚本环境,主要用于构建动态网页应用程序。在这个...
在这个系统中,开发者可能使用了ASP的内置对象如Response、Request、Session和Application等,来处理用户请求、响应数据、管理会话状态和共享应用程序级信息。 BingSNS系统作为一个社交互动平台,可能具备以下核心...
在ASP科研信息管理系统中,开发者可能利用ASP的内置对象如Request(接收客户端数据)、Response(发送服务器端数据)和Session(处理用户会话)来实现与用户的交互和数据管理。 该系统的功能可能包括但不限于以下几...
在这个特定的压缩包中,我们关注的是"投票模块设计",这是一个常见的功能,用于收集用户的意见或偏好,常见于论坛、调查问卷等网站。 在ASP.NET 3.5中开发投票模块,我们需要掌握以下核心知识点: 1. **控件使用**...
本文提供了Oracle RDBMS如何利用锁(latches)保护共享内存(SGA)的概述、常见的锁竞争原因及其解决方案,并总结了Quest Software进行的一些研究,该研究表明调整(现在是未公开的参数)`_spin_count`能够有效地缓解...
我负责前期的技术方案调研和自控设备选型工作,这让我有机会将理论知识应用到实际项目中,增强了我的实践操作技能。 最后,我在部门内部的其他事务中发挥了自己的作用,例如协助领导安排日方来访的工作。这些经验使...
此外,为了实现跨服务器的用户会话共享,系统采用了**Redis**作为session存储。Redis是一款高性能的键值存储数据库,因其内存操作和快速响应而被广泛用于缓存和会话管理。通过Redis,用户在校园网络的不同设备上登录...
共享池命中率反映了查询在共享池中重用的频率。一个较高的命中率表明缓存效率较高,减少了不必要的解析操作,从而提高了数据库的性能。 ##### 5.3 Library Hit Ratio 库缓存命中率是另一个重要的性能指标,它表示库...
我们开发这个所用的动技术为 JAVA/J2EE 编程技术,要实现这些技术所需要的软件基本上者是共享软件,并不需要花费金钱,至于其他方面的花费也比较少,所以我们觉得该音乐系统的开发的成本并不大,而得到的经济效益较...