分布式session一致性处理方案
分布式Session一致性问题
在早期的时候,很多网站因为客户规模较小,都是采取的单机部署的模式,只用一台服务器来承载客户的请求,这时候Session是存在同一台服务器上,所以能够很容易实现会话跟踪和保持。然而随着客户规模的扩大,单机部署模式已经无法承载所有客户的请求了,这时候人们自然而然想到用多台服务器来解决客户的请求,客户的请求会先到达负载均衡,而后再被转发到某个具体应用服务器上进行解决。这时候我们就会遇到一个问题,每次解决同个客户的请求的服务可能不同,那怎样让它们的Session数据保持一致呢?
一般来说有以下四种方案:
Cookie存储Session
Session粘滞
Session复制
Session集中管理
我们来一个一个理解它们的优劣和使用场景
分布式Session一致性处理方案
Cookie存储Session
我们知道Cookie总只有一份的,而且是存在客户端的,所以我们可以通过Cookie来存储Session信息,这样不论最后发送到哪台服务器解决,我们都能通过Cookie取到Session信息。使用这个方案有以下优缺点
优点
简单易用,无需额外的配置
无需额外的外部存储
缺点
为了数据不被泄露,一般需要进行加密,加解密过程需要肯定开销
Cookie长度和数量有限制,会限制数据的存储
每次请求都多出来了Session的数据,需要消耗更多网络带宽和系统性能
受限于Cookie的开闭,假如客户关闭Cookie,Session就失效了,客户也就无法正常访问了
适用场景:数据量小的情况。
Session粘滞
也就是粘性Session,当客户访问负载均衡时,通过某种方法算出该客户应该访问的后台服务器,例如通过hash算法。这样保证了每个会话都在同一台服务器上。使用这个方案有以下优缺点:
优点
使用简单,只要要配置好转发规则就可。
没有额外网络开销
缺点
存在单点问题,一但某台机器重启或者宕机,相对应的Session数据将会丢失
会话标识是应用层的信息,则负载均衡器要将同一个会话的请求都保存到同一个Web服务器上的话,就需要进行应用层(七层)的解析,这个开销比第四层的交换要大。或者许有同学会说,nginx 四层转发可以支持ip hash的方式,这样就能通过四层转发了。事实上最好的方案是通过会话id进行hash,由于在日常生活中还是很容易出现ip发生变化的情况,例如从家里出去的时候,我们手机连接的网络从wifi切换到无线流量会发生ip变化,这时候通过ip hash的方式就会丢失Session了。
负载均衡器变为了一个有状态的节点,需要计算会话和具体Web服务器的映射,因而内存消耗会更大
适用场景:机器数适中、对稳固性要求不是非常苛刻的情况
Session复制
既然只有一台机器存Session容易出现单点问题,那么我们就所有机器都存Session,每台机器间进行Session同步,这样不论访问到哪台机器都能取得Session。这就是Session复制方式,我们给服务器之间添加了会话数据的同步,通过同步来保证不同服务器之间的Session数据的一致。使用这个方案有以下优缺点:
优点
实现简单,只要要一些配置
即便某台机器宕机或者者重启也不影响客户访问
缺点
需要依赖支持Session同步的Web服务器,假如Web服务器不支持就不能使用了
存在推迟,由于要等待Session同步过来,特别是在数据量比较大的情况下更加显著
在服务器集群达到数千台的时候,就会出现瓶颈,由于每台机器都会对外广播自己的Session,同时要接收其余几千台机器发出的Session,非常损耗性能。
数据冗余非常严重,几千台服务器就有几千份冗余数据,白费了相当多的资源
适用场景:服务器比较少且Session数据量少
Session集中管理
通过单独的服务器集群来存储和管理Session数据,例如redis,其余所有的应用服务器都从这个存储集群获取对应的Session,从而实现Session的共享。
优点
可靠性较高,通过单独的集群进行统一管理
减少应用服务器的资源开销
缺点
实现较为复杂,配置较多
需维护单独的存储集群
适用场景:应用服务器较多、可用性要求较高
每个方案都各有其适用的场景,大家在实际使用过程中需要根据实际情况进行选择
参考资料
http://blog.itpub.net/69951287/viewspace-2664889/
Enjoy it !
假如觉得文章对你有用,可以资助我喝杯咖啡~
版权公告
转载请注明作者和文章出处
作者: X先生
首发于 https://www.songma.com/p/cb90cb188306
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 分布式session一致性处理方案