1. 单体架构
- 最直接的方案, session就保存在
web-server
上
2. 反向代理多服务架构
2.1 session同步方案
2.2 session保存在cookies中
- 将session保存在客户端的cookies中
优点
web-server
不需要处理session的问题
缺点
- 外网贷款占用太大
- 安全问题得不到保障
- 单个session内容大小受cookies限制
2.3 反向代理hash一致性(四层, 七层)
- 通过hash算法, 将session进行分片, 存入不同的
web-server
中 - 有两种分片方式:
- 在第四层协议进行分片, 通过IP分片(如nginx根据IP进行hash路由)
- 在第七次协议进行分片, 应用层找个字段进行分片(如nginx根据HTTP请求中的某项属性进行hash路由)
优点
- 只需要修改nginx配置,不需要修改应用代码
- 支持
web-server
的水平扩展 - 可以起到负载均衡的作用
缺点
web-server
重启会丢失一部分session- 如果
web-server
进行水平扩展, 会重新hash,相当于还是会导致一部分session丢失
2.4 后端统一存储法
- 将session统一存在某个中间件中
- 可以是DB
- 可以是缓存, 建议使用缓存, session的数据丢失是可以接受的
优点
- web层可以任意水平扩展
- 上面几个方案的缺点都没了
缺点
- 增加了一次网络调用
- 多维护了一套session的存储设备, 经济上可能会贵一点
- 需要自己来开发处理session的代码(比如shiro的处理)
2.5 自建通用鉴权授权服务
- 自建一套统一的鉴权授权服务
- 这也是很多大公司的方案
优点
- 业务系统几乎不需要改造, 只需要引入jar包, 或者标准化的增加filter即可
缺点
- 需要专人开发一套鉴权授权系统, 成本较大