一、背景
一个服务要部署在多台服务器上时,用户信息记录在session中。如果用户小白的登录请求打到服务器A上,这时服务器A会记录session。之后用户小白的下单请求打到服务器B上,由于服务器B 没有保存用户A的session,所以用户小白需要再次登录后,才能下单。为了解决用户重复登录的问题,提出了分布式session。
二、概念
在分布式架构或者微服务架构中,必须保证一个应用服务器上保存了session后,其他应用服务器会同步或者共享这个session。
三、分布式session管理方案
- session sticky--不推荐
- 解决方法:负载均衡服务器对请求地址中的IP进行hash运算,根据hash结果将请求打到对应的服务器上。
- 缺点:(1)造成资源浪费。会造成个别服务器请求数特别多,其他服务器闲置的情况。(2)无法避免单点故障问题。
- session Replication(session复制)
- 解决方法:将一个应用服务器上session复制到其他服务器上。
- 缺点:(1)耗内存、耗宽带。
- session center--推荐
- 解决方法:将session存储在redis缓存中。
- 缺点:需要增加额外的技术,维护redis的高可用。