分布式session一致性解决方案

分布式Session一致性问题

在早期的时候,不少网站因为用户规模较小,都是采起的单机部署的模式,只用一台服务器来承载用户的请求,这时候Session是存在同一台服务器上,因此可以很容易实现会话跟踪和保持。然而随着用户规模的扩大,单机部署模式已经没法承载全部用户的请求了,这时候人们天然而然想到用多台服务器来处理用户的请求,用户的请求会先到达负载均衡,而后再被转发到某个具体应用服务器上进行处理。这时候咱们就会遇到一个问题,每次处理同个用户的请求的服务可能不一样,那怎么让它们的Session数据保持一致呢?nginx

通常来讲有如下四种方案:redis

  • Cookie存储Session
  • Session粘滞
  • Session复制
  • Session集中管理

咱们来一个一个了解它们的优劣和使用场景算法

分布式Session一致性解决方案

Cookie存储Session

咱们知道Cookie总只有一份的,并且是存在用户端的,因此咱们能够经过Cookie来存储Session信息,这样无论最后发送到哪台服务器处理,咱们都能经过Cookie取到Session信息。使用这个方案有如下优缺点segmentfault

优势后端

  • 简单易用,无需额外的配置
  • 无需额外的外部存储

缺点服务器

  • 为了数据不被泄露,通常须要进行加密,加解密过程须要必定开销
  • Cookie长度和数量有限制,会限制数据的存储
  • 每次请求都多出来了Session的数据,须要消耗更多网络带宽和系统性能
  • 受限于Cookie的开闭,若是用户关闭Cookie,Session就失效了,用户也就没法正常访问了

适用场景:数据量小的状况。网络

Session粘滞

也就是粘性Session,当用户访问负载均衡时,经过某种方法算出该用户应该访问的后端服务器,例如经过hash算法。这样保证了每一个会话都在同一台服务器上。使用这个方案有如下优缺点:负载均衡

优势分布式

  • 使用简单,只须要配置好转发规则便可。
  • 没有额外网络开销

缺点性能

  • 存在单点问题,一但某台机器重启或宕机,相对应的Session数据将会丢失
  • 会话标识是应用层的信息,则负载均衡器要将同一个会话的请求都保存到同一个Web服务器上的话,就须要进行应用层(七层)的解析,这个开销比第四层的交换要大。或许有同窗会说,nginx 四层转发能够支持ip hash的方式,这样就能经过四层转发了。事实上最好的方案是经过会话id进行hash,由于在平常生活中仍是很容易出现ip发生变化的状况,例如从家里出去的时候,咱们手机链接的网络从wifi切换到无线流量会发生ip变化,这时候经过ip hash的方式就会丢失Session了。
  • 负载均衡器变为了一个有状态的节点,须要计算会话和具体Web服务器的映射,所以内存消耗会更大

适用场景:机器数适中、对稳定性要求不是很是苛刻的状况

Session复制

既然只有一台机器存Session容易出现单点问题,那么咱们就全部机器都存Session,每台机器间进行Session同步,这样无论访问到哪台机器都能得到Session。这就是Session复制方式,咱们给服务器之间增长了会话数据的同步,经过同步来保证不一样服务器之间的Session数据的一致。使用这个方案有如下优缺点:

优势

  • 实现简单,只须要少许配置
  • 即便某台机器宕机或者重启也不影响用户访问

缺点

  • 须要依赖支持Session同步的Web服务器,若是Web服务器不支持就不能使用了
  • 存在延迟,由于要等待Session同步过来,特别是在数据量比较大的状况下更加明显
  • 在服务器集群达到数千台的时候,就会出现瓶颈,由于每台机器都会对外广播本身的Session,同时要接收其余几千台机器发出的Session,很是损耗性能。
  • 数据冗余很是严重,几千台服务器就有几千份冗余数据,浪费了至关多的资源

适用场景:服务器比较少且Session数据量少

Session集中管理

经过单独的服务器集群来存储和管理Session数据,例如redis,其余全部的应用服务器都从这个存储集群获取对应的Session,从而实现Session的共享。

优势

  • 可靠性较高,经过单独的集群进行统一管理
  • 减小应用服务器的资源开销

缺点

  • 实现较为复杂,配置较多
  • 需维护单独的存储集群

适用场景:应用服务器较多、可用性要求较高

每一个方案都各有其适用的场景,你们在实际使用过程当中须要根据实际状况进行选择

参考资料

http://blog.itpub.net/69951287/viewspace-2664889/

Enjoy it !

若是以为文章对你有用,能够赞助我喝杯咖啡~

版权声明

转载请注明做者和文章出处
做者: X先生
http://www.javashuo.com/article/p-hjwdbbqw-mw.html
相关文章
相关标签/搜索