集群及Session管理

读一篇文章需要把握文章结构,所以还是按照惯例,先对文章大纲列举一下。

===========本文主要内容===========

1,几个相关概念简介

——Session工作原理

——集群概念

——反向代理/负载均衡

2,集群种常见Session问题及解决方案

3,记忆方式或总结

==================================

一、几个相关概念简介

1,Session工作原理

Session我之前举例子给朋友说是服务端创建的一个水池,可以放东西进去,也可以取。

常用的如:打开浏览器访问网页,服务端会生成一个key(sessionId),放进去,并且返回给客户端,客户端拿到以后每次请求都带上它给服务端,服务端通过sessionId判断是否是同一个Session(会话)。如还不理解,请回复:session,见详解。

2,集群概念

相同的东西重复几次就是集群。相同应用,重复部署几台。

集群解决什么问题:

(1)解决访问量增高,增加服务的吞吐量。如:10000个请求过来,我可以部署100台(重复),每台处理100个请求,而不是10000个访问一台。

(2)集群还有一个作用,解决服务高可用的问题(失效转移功能),一台服务器宕机,保证访问可以到其他服务器,保证服务可用。

3,反向代理/负载均衡

上面说的重复部署100台(集群),怎么把用户请求合理分配到这100台服务器上面,就是代理需要做的事情,现在大多企业用的都是nginx,如需要对nginx理解,请回复:nginx,见详解。

负载均衡的主要是在业务访问量增加,一台服务扛不住,需要集群,而怎么把请求分发到最优的一台服务器上就是负载均衡解决的问题。比如说这台服务器压力上限5000个,结果得了1万个请求,那第5001个请求,发到另一台服务器了。见名知意——负载均衡。

注1:负载均衡策略简单说一下,其实通过心跳机制,去发现哪台服务器是正常,哪台是压力小的,哪台是最优的(需要研究的可以底部实现自行修炼)。

注2:一般企业部署项目组,也一般至少也要不做两台服务器,使用负载均衡技术能够构建一个小的那个集群,这样的话一台服务器挂了另一台可以保证运行,这样不至于服务不可用。

二、集群种常见Session问题及解决方案

集群种常见Session问题

1,session丢失问题。比如说用户一个用户登录了,然后这个用户登陆状态保存session中存放在一台服务器,但是突然这台机器挂了,这时候他的指向指向到另一台机器了,这个时候他的那个登录状态就会消失,就没有登录状态,用户在上一步操作,是登录了,下一步操作就需要重新登陆,这种这种就是session丢失的问题。

2,session管理。还有常见的,比如说像什么电子商务,一些网站吗?比如说增加购物车啊,你可能这次请求请留到这个服务器可能就挂了,你加购物车,你的session状态是不存在的,那这时候你就要重新登录,所以这个就是session丢失的问题,session管理是集群中的一个最大的一个难题。

一般有三种解决方案:

第一:session复制

第二:基于ip地址发起的负载均衡策略

第三:session单独集中管理放入缓存/数据库

第一种:Session复制,集群的服务器,同步session。session对象是每台服务器保存,比如说用户登陆这台服务器,session也保存在这台应用服务器中,那这个时候会把同步复制到另一台服务器.

这种方案存在两个问题:(1)全部重复复制耗内存,如果集群部署很大,那将将耗费系统的大量资源。(2)session同步会有延时,尤其不同服务器部署不同机房,网络传输。

第二种:基于ip地址发起的负载均衡策略,就是通过负载均衡的方式,比如说你一个ip地址,然后利用这个请求的IP,哈希算哈希算法实现,然后就是你同一个ip地址,计算出来一个哈希值,就只指向同一个服务器,也可以根据COOkie将同一个请求分发到同一个服务器上。

这样也会存在两个问题:(1)一台服务器宕机挂掉了,然后这个这个服务器上面所有的session全部都丢失了,这个时候,比如这个用户这数据访问,那么就请求就会转发到另一台服务器上,那这个时候,就用户状态就不不存在了。(2)当需要扩展的时候,比如说你现在两台吧,假如我再加入一台服务器,最后三台那个哈希算法就需要再做调整,这个所以导致哈希算法指向就不是之前一台服务器可能,造成session丢失。

第三种(最佳):session单独集中管理放入缓存/数据库。这种方式目前来说,采用可能是最优的一种方案了,就专门搞一台服务器存放session,然后session集群,进行统一管理,管理也比较方便。即使你的应用服务器重启了或宕机,也不会造成session的丢失,而且它灵活性也比较高,即使应用服务器以后再扩展,对session影响不大,因为应用服务器跟那个session可存放不同的服务器

缺点就是可能,你要单独部署,需要添加新的机器,然后呢把这个当做缓存缓存,也有一定的网络应用网络延时,有几个注意事项,比如你放缓存(一般是redis里面),你这个session里面对象要是可序列化的,另一个session失效时间是缓存的时间,而不是应用服务器配置的。

================= END ==================

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180814G1WZT000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券