应用服务器集群下的session问题解决

前言:由于http协议是无状态的,所以http的协议需要支持会话状态机制;session是产生于服务器端用来保存用户和服务器会话状态的。而传统的单击型web服务器,session是保存在单击上,无需考虑会话session会出现差异而导致用户和服务器的会话发生异常。

问题:由于集群,用户访问的服务器可能存取不确定性,如何保证用户的session不发生丢失和异常,保证会话都是关联到同一个session上呢?(解决办法:保证session同一服务器上/访问的服务器上有同一个session)


以下的方案都是建立在Browser-负载均衡器-n个应用服务器 基础上

1、Session Sticky

由负载均衡器将用户的请求从第一次开始访问的服务器,在session未失效的前提,之后关联固定在上一次访问的服务器上,即同样的session请求送到同一个服务器端处理

带来问题:1、某台服务器宕机就可能丢失数据;2、负载均衡器要解析应用层,开销大,内存消耗大,容灾麻烦

2、Session Replication

将session复制到所有的应用服务器上,不适合集群数量过多的场景

带来问题:1、同步session造成的开销网络宽带开销大,其中一个session数据有变就要同步到其他所有的服务器上;2、每台web服务器都要保持所有的session数据,如何访问人数过多,造成每台机器session占用的空间过多

3、Session数据集中存储

web服务器不存储session,session统一集中保存在一个机器上,web服务器要用session时从该机器上取即可,一般是内网,带宽相对SessionReplication来说少了很多

带来问题:1、由于session的读取需要通过网络,带来延时和不稳定性;2、集中存储session的机器或集群宕机也造成整个应用出现问题

4、Cookie Based

把session的数据保存在cookie里,服务器端通过cookie来生成session

带来问题:1、cookie长度有限,也限制session数据长度;2、安全性,即使通过加密,但是物理上不能接触才是安全的;3、带宽消耗,传输数据过多,外部带宽过多;4、性能影响,对web服务器来说,响应的结果数据越少,支持并发请求越多


小结:对于大型的网站来说,Session Sticky和Session数据集中存储这两种方案是常用的。根据具体的场景,在对 Session存储进行集群,我们也可以结合多种方案来实现


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值