分布式集群的Session问题

1、Session的实现

         在Session开始时候,分配一个唯一的Session标识sessionId,通过Cookie把 sessionId 告诉浏览器,以后每次请求的时候,浏览器都会带上 sessionId 告诉web服务器,这个请求属于哪个Session。

        在web 服务器上,每个Session都有独立的存储,保存不同的Session信息。

        如果遇到禁用Cookie的情况,一般做法是把sessionId方法 放到 URL 参数中。


2、集群的Session 问题的解决方案

        因为Session数据保存在单机上,当应用服务器变成多台之后,要保证对用户透明。


(1)、Session 粘贴

负载均衡器根据每次请求的Session进行转发,即保证同一Session请求都在同一台Web 服务器上处理,那么对这个Session个体来说,与之前安单机的情况是一致的。


优点:简单容易实现,有利于服务器端本地对Session进行缓存。


缺点:(a)、如果集群上有一台服务器down,则上面的Session数据全部丢失,用户需要重新登录。

             (b)、负载均衡器需要解析Session的请求,开销很大

             (c)、负载均衡器变成了有状态的节点,内存消耗大,容灾麻烦。


(2)、Session 复制

Web服务器进行Session数据同步,即同一个Session的数据会复制到所有的Web服务器上。


优点:负载均衡器压力较小。


缺点:(a)、同步Session 需要更多网络通信。

             (b)、每个Web服务器都要保存所有数据,内容过多。


(3)、Session 数据集中存储

与Session Replication类似,但Session不保存在每台Web服务器中,而是保存在另外地方,如 Redis 数据库等。


优点:相比比Session 复制,网络带宽、内存消耗都少。


缺点:(a)、读写Session数据必须使用网络操作,存在延时和不稳定性。

             (b)、若存储Session的机器出现问题,则Web 应用也出问题。


(4)、使用Cookie

把Session 数据放在Cookie 中,对敏感信息进行加密。


优点:不依赖外部系统,无时延,无稳定性问题。


缺点:(1)、Cookie有长度限制。

             (2)、安全性:Session本应该存在服务器端,现在却放在客户端,虽然加密,但是还是能被客户端访问到。

             (3)、有带宽消耗

             (4)、性能影响:每次HTTP请求与相应都必须带Session数据。


在实际中,一般使用Session粘贴、Session 集中存储





原文地址:https://www.cnblogs.com/leeeee/p/7276417.html