分布式集群下的Session存储方式窥探
传统的应用服务器,自身实现的session管理是大多是基于单机的,对于大型分布式网站来说,支撑其业务的远远不止一台服务器,而是一个分布式集群,请求在不同的服务器之间跳转。那么,如何保持服务器之前的session同步呢?
分布式环境下,如果一次请求被负载均衡分配到了服务器A,如果按照一般的方式存储session,在A的本地会存储session,如果此次会话没有结束,下一次的请求被负载均衡到了B服务器(或者其他的非A服务器)那么上次的请求的session信息将不再存在。如果不做任何处理的话,用户将出现频繁登录的现象。所以分布式环境下session的存储显得格外重要。
那么有哪些方法可以做到分布式环境下的session存储呢?
<1>持久化
可以将session的存储放在数据库中,进行持久化,每台服务器要使用session的时候,可以同时向数据库中去存取,这样可以保证当服务器宕机的时候,可以保持数据不容易丢失;
但是缺点也很明显,整个系统的吞吐量下降。
<2>粘性session(Sticky Session在实现上可以用Nginx的ip_hash机制)
原理:粘性session 是指将一个请求绑定到固定的服务器上,正如上面所说,如果设置了粘性session,负载均衡将请求转发到了服务器A上,此用户以后的每一次请求都会转发到服务器A上,相当于用户和服务器黏在一起了。
优点:实现很简单,不需要对session做处理。
缺点:不是高可用的,如果当前访问的宕机了,请求会转发到其他的服务器,当前请求的session信息将会失效。适合用在故障对用户的的影响较小的场景下。
<3>session复制
原理:任何一个服务器上的session发生变化,该节点会把这个 session的所有内容序列化,然后广播给所有其它节点,不管其他服务器需不需要session,以此来保证Session同步。
优点:可容错,各个服务器之间session能够实时响应;
缺点:网络负荷会有一定的压力(可能会堵塞,拖慢服务器)。
<4>session缓存
不管是memcache还是redis要以集群的方式来提供session服务。并且memcache和redis的快速访问具有很大的优势,可以提供较高的读写性能,这一点对并发量大的系统来说很重要。从安全性来考虑,session时候过期时间的,利用缓存存储可以利用缓存的失效机制。
分布式集群下的Session存储方式窥探的更多相关文章
- 用redis实现TOMCAT集群下的session共享
上篇实现了 LINUX中NGINX反向代理下的TOMCAT集群(http://www.cnblogs.com/yuanjava/p/6850764.html) 这次我们在上篇的基础上实现session ...
- 分布式集群环境下,如何实现session共享二(项目开发)
在上一篇分布式集群环境下,如何实现session共享一(应用场景)中,介绍了在分布式集群下,需要实现session共享的应用场景.并且最后留下了一个问题:在集群环境下,如何实现session的共享呢? ...
- 分布式集群环境下,如何实现session共享五(spring-session+redis 实现session共享)
这是分布式集群环境下,如何实现session共享系列的第五篇.在上一篇:分布式集群环境下,如何实现session共享四(部署项目测试)中,针对nginx不同的负载均衡策略:轮询.ip_hash方式,测 ...
- Apache shiro集群实现 (六)分布式集群系统下的高可用session解决方案---Session共享
Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...
- Apache shiro集群实现 (五)分布式集群系统下的高可用session解决方案
Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...
- 分布式集群环境下,如何实现session共享四(部署项目测试)
这是分布式集群环境下,如何实现session共享系列的第四篇.在上一篇:分布式集群环境下,如何实现session共享三(环境搭建)中,已经准备好了相关的环境:tomcat.nginx.redis.本篇 ...
- 分布式集群环境下,如何实现session共享三(环境搭建)
这是分布式集群环境下,如何实现session共享系列的第三篇.在上一篇:分布式集群环境下,如何实现session共享二(项目开发)中,准备好了一个通过原生态的servlet操作session的案例.本 ...
- spring-session实现分布式集群session的共享
前言 HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的.但是我们把应用搭建成分布式的集群,然后利用LVS或Nginx做负载均衡,那么来自同一用户 ...
- spring-session实现分布式集群session的共享(转)
原文: https://www.cnblogs.com/youzhibing/p/7348337.html HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保 ...
随机推荐
- 什么是A记录 域名
A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录.用户可以将该域名下的网站服务器指向到自己的web server,FTP server等上面.同时也可以设置域名的子域名. 通俗 ...
- iis配置完成,出现HTTP 错误 403.14 - Forbidden
版权声明:本文为博主原创文章,未经博主允许不得转载.转载请标明文章出处和原文链接. 403.14 禁止访问:在 Web 服务器上已拒绝目录列表 解决方案一:一般情况站点都是不会允许直接读取目录内容的, ...
- Oracle 数据库中在使用中文模糊查询时输入中文查询不到结果的解决方法
添加环境变量 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
- MYSQL Optimizing LIMIT Queries
如果要指定查询的数据行数,在查询语句中使用limit子句,而不是获取所有数据行结果集,然后去掉没用的数据. MYSQL有时会对没有having子句,带有limit关键字的查询进行优化: 1:如果用li ...
- LINUX文档管理命令
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- sudo 无效命令
mac系统中由于不小心修改了/etc/sudoers下的权限为777,故而sudo命令不能使用. 解决办法 1.重新启动mac并且按command+s进入单用户界面 2.此时默认的系统状态是只读状态, ...
- _2_head_中标签
创:20_3_2017修:5_4_2017 什么是title标签? --title 页面名(双) -- 整个html的页面名字,相当于一本书的书名 <title>北门吹雪</ti ...
- ELK入门级介绍--打造实时日志查询系统
这几天一直在研究ElasticSearch,在网上看到一篇好的文章和大家分享. ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 以下内容来自:http://baidu.b ...
- Log4j源码解析--Layout类解析
本文转载上善若水的博客,原文出处:http://www.blogjava.net/DLevin/archive/2012/07/04/382131.html.感谢作者的分享. Layout负责将Log ...
- zabbix action理解
Maintenance status not in maintenance 谷歌翻译:维护状态不在维护中,中文意思就是监控的设备有problem,触发器报警了,然后执行action {TRIGGE ...