Session sticky
对访问的ip进行hash。然后通过Nginx 跳转固定的web-server。这样保证了同一个用户访问的Server保持不变,session自然不会消失。
优点:
- 只需要改nginx配置,不需要修改应用代码
- 负载均衡,只要hash属性是均匀的,多台web-server的负载是均衡的
- 可以支持web-server水平扩展(session同步法是不行的,受内存限制)
缺点
- 单个Server宕机或重启之后,部分session会消失,该部分用户需要重新登录
session本身就有有效期,即使部分用户需要重新登录,事实上也是可以接受的,所以缺点也没有那么明显
Session 复制
session在各web-server间复制,保证每一个web-server有全部的用户session
优点:
- 实现方便,tomcat有集成插件。配置即可,建议访问量不大的小型系统使用
缺点:
- 互相复制增加了网络内网的开销,每台web-server都存了全部session,数据冗余严重,内存占用大。
cookie中存储Session
Session加密后存储在cookie中,这样Session就存放在了客户端,服务端无状态化。
缺点:
- 安全性差。用户数据容易泄露。只适合敏感度不高的系统
Session cache
将所有登录信息存在redis的集群中,每一次的用户请求都去redis cache 中获取用户登录状态。
优点:
- 安全
- 跟web-server无关,不管是宕机还是更新重启都不影响已登录用户
- 方便水平扩展
缺点:
- 增加运维成本
- 增加了一次额外的后端调用
- 需要增加相应的代码