一、Session复制,专业名词叫Session Replication
二、Session 粘性,主页名词叫Session Sticky
三、缓存集中式管理
简介:将Session存入分布式缓存集群中的某台机器上,当用户访问不同节点时先从缓存中拿Session信息
这个是主流的实现方式,最大的缺点就是实现复杂、稳定性依赖于缓存的稳定性、Session信息放入缓存时要有合理的策略写入
就说说第三种的实现方式,假设现在同一个应用,线上有三台服务器A1, A2,A3,通过Nginx做负载均衡,这样用户A的请求就都会按照某种规则落在这三台机器上,用户A第一次进行登录的请求是在A1上进行处理的,所以在A1上创建了这个用户的会话,接下来用户的请求落在了其他两台服务器上,还想拿到A1上创建的会话信息,那么就需要在用户A登录时,将创建的会话信息保存在这三台服务器之外的其他服务器D上,不管在哪台机器上进行请求,都从D服务器获取会话,以上就是大体的实现思路。
至于实现,方式就多了,如果是本地开发或者是自己公司的内部测试环境dev,那么就直接设置成单点的应用,既然是单点的,那么用户A登录创建会话的会话信息可以直接存储在这台机器的内存中,最简单的就是维护一个常量MAP,这样也省去了部署测试机器,环境太复杂的问题。
对于线上服务器,实际上也就是所谓的应用服务器与缓存服务器分离,应用服务器只负责处理请求,而会话的信息都保存在缓存服务器上。
基于数据库的,比如redis,也可以是基于内存的memcached的。
接下来,有时间我会写一个简单点的本地开发服务的基于内存版本的会话保持的demo出来。