在单机系统中,不存在Session共享问题,但是在分布式系统中,我们必须实现session共享机制,使得多台应用服务器之间会话统一,如果不进行Session共享会出现数据不一致,比如:会导致请求落到不同服务器要重复登录的情况。

解决方案

1.session复制
原理:任何一个服务器上的session发生改变(增删改),该节点会把这个 session的所有内容序列化,然后广播给所有其它节点,不管其他服务器需不需要session,以此来保证Session同步。

优点:可容错,各个服务器间session能够实时响应。
缺点:

  • 大量的session的同步需要数据传输,占内网带宽,有时延,拖慢服务器性能。

  • 有更多web-server时,容易造成网络风暴。

2. 客户端存储
将session存储到浏览器cookie中。每次请求服务器的时候,将session放在请求中发送给服务器,服务器处理完请求后再将修改后的session响应给客户端。
缺点:

  • 数据存储在端上,并在网络传输,存在泄漏、篡改、窃取等安全隐患。
  • session存储的数据大小受cookie限制。

3. 粘性session

原理:粘性Session是指将用户锁定到某一个服务器上,例如用户第一次请求时,负载均衡器(nginx)将用户的请求转发到了A服务器上,如果负载均衡器设置了粘性Session的话,那么用户以后的每次请求都会转发到A服务器上,相当于把用户和A服务器粘到了一块,这就是粘性Session机制。

优点:简单,不需要对session做任何处理。

缺点:

  • 如果服务器出现故障,一部分session会丢失,会产生业务影响,例如部分用户重新登录。
  • 如果服务器水平扩展,rehash后session重新分布,也会有一部分用户路由不到正确的session。

4. 后端统一集中存储

原理:将session存储在一个单独的服务器的存储层,数据库或者缓存,一般用redis/memchache缓存。

优点:服务器出现问题,session不会丢失。

缺点:如果网站的访问量很大,把session存储到数据库中,会对数据库造成很大压力,还需要增加额外的开销维护数据库。

refer:https://www.cnblogs.com/yumingxing/p/9505512.html

最新文章

  1. MVC之路随记1--Filter的应用
  2. JDK QUEUE队列
  3. discuz模板文件列表
  4. 去除list集合中重复项的几种方法
  5. 【转】C++ STL快速入门
  6. spring创建bean及数据注入
  7. 『Two 树的直径求解及其运用』
  8. 关于python那些事儿
  9. leetcode中的python学习
  10. position属性absolute与relative 的区别
  11. Python 学习参考书目推荐
  12. 《Lua程序设计》第1章 开始 学习笔记
  13. 洛谷 1020:导弹拦截(DP,LIS)
  14. JavaEE各种Javadoc的下载
  15. win7语音识别开发(sapi)
  16. springBoot整合MyBatise及简单应用
  17. 图:centrality
  18. HTTP Transaction Delays
  19. 数据库中存放着HTML并附带样式,如何在界面上对已有的样式进行修改
  20. Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift(BN)

热门文章

  1. java String 转Json报错 java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntim
  2. Ingress-nginx 部署使用
  3. 已知X,Y独立,那么X^2与Y也独立
  4. python脚本容器化
  5. php_mvc实现步骤六
  6. Synchronized实现原理及和Lock的区别
  7. 【转帖】从原理到应用,Elasticsearch详解
  8. python 安装pytorch 及 安装失败解决办法
  9. Python-22-并发编程
  10. 函数的学习1——定义函数&传递实参——参考Python编程从入门到实践