分布式SESSION一致性
  QXMMzNamQf6Z 2023年11月02日 49 0

分布式SESSION一致性

​SESSION​​​是服务器为客户端创建的一个会话,存储用户的相关信息,用以标识用户身份等。在单服务器环境下是不需要考虑会话的一致性的问题的,但是在集群环境下就会出现一些问题,假如一个用户在登录请求时负载均衡到了​​A​​​服务器,​​A​​​服务器为其分配了​​SESSION​​​,下次请求数据时被分配到了​​B​​​服务器,此时由于​​B​​​服务器不存在此用户的​​SESSION​​​,此用户会被重定向到登录页面,这种情况是不合理的业务逻辑,所以需要维护​​SESSION​​的一致性。

解决方案

SESSION 同步

多个服务器之间互相同步​​SESSION​​​,即​​A​​​服务器生成一个​​SESSION​​​信息后同步传输到​​B​​​、​​C​​​、​​D​​​等服务器,同样​​B​​​、​​C​​​、​​D​​​服务器生成​​SESSION​​​信息后也需要同步到​​A​​​,这样每个服务器之间都包含全部的​​SESSION​

优点

  • 大部分应用服务器都提供了​​SESSION​​复制的功能来实现集群

缺点

  • ​SESSION​​需要网络传输进行同步,其会占用带宽,并且存在一定的延迟
  • 一旦某台机器的​​SESSION​​​信息有所变化,必须同步更新所有服务器​​SESSION​​内容
  • 每个服务器都会存储全部的用户信息,性能随着服务器增加急剧下降,而且容易引起广播风暴

SESSION 映射

通过将负载均衡服务器进行修改,通过对返回给用户的​​SESSION ID​​​或者用户请求的​​IP​​​地址进行标记,也就是使用第四层传输层中读取网络层的​​IP​​​或者是在第七层中读取​​HTTP​​​协议中某些属性来做​​HASH​​,保证对于此用户的请求全部落到同一台服务器上

优点

  • 实现相对简单
  • 只要分配服务器时均匀,则多台服务器是负载均衡的

缺点

  • 一旦某台服务器宕机,则会影响落在此服务器请求上的全部用户
  • 负载均衡服务器变为了一个有状态的节点,内存消耗会更大,容灾更麻烦

客户端存储

将数据直接存储到客户端比如​​Cookie​​或请求头中,每次请求客户端自动携带数据信息

优点

  • 简单,高效
  • 服务端不需要储存标记用户信息

缺点

  • 安全性较差,对于敏感信息必须加密
  • 每次请求可能携带大量数据,占用外网带宽
  • 数据存储在客户端就会存在泄密、篡改、窃取等隐患

后端集中存储

将​​SESSION​​​存储在一台单独的服务器中的数据库中,例如​​Mysql​​​、​​Oracle​​​、​​SqlServer​​​、​​Redis​​​、​​Mongodb​​​等等,各​​SERVER​​​服务器需要用户信息时携带​​SESSION ID​​对于集中存储服务器进行请求,进而获取用户信息

优点

  • 没有安全隐患
  • 可以方便的水平拓展
  • ​SERVER​​​服务器重启不会造成​​SESSION​​丢失

缺点

  • 每次请求都增加了一次对于存储服务器的网络请求
  • 会对集中存储服务器存在大量请求,数据库压力比较大

每日一题

https://github.com/WindrunnerMax/EveryDay

参考

https://www.jianshu.com/p/5caed857dc3e

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  ehrZuhofWJiC   2024年05月17日   37   0   0 服务器linux
QXMMzNamQf6Z