分布式集群下的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都是保 ...
随机推荐
- 正则API
正则表达式:规定字符串中字符出现规律的公式 如果备选字符列表中个别字符之间是连续的,可用-省略中间的字符.比如: 匹配1位数字: [0-9]匹配1位小写字母 : [a-z] 匹配1位大写字母 : ...
- Uva 1599 Ideal Path - 双向BFS
题目连接和描述以后再补 这题思路很简单但还真没少折腾,前后修改提交了七八次才AC...(也说明自己有多菜了).. 注意问题: 1.看清楚原题的输入输出要求,刚了书上的中文题目直接开撸,以为输入输出都是 ...
- 【开发技术】refactor 重构----实现文件改名
当我们要改类名或接口名时,可能会遇到该类(接口)在其它文件中也有使用的情况,如一个个找比较麻烦也容易漏,这里推荐使用右键refactor->rename进行修改.
- 使用BIOS进行键盘输入和磁盘读写
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- Log4j源码解析--核心类解析
原文出处:http://www.blogjava.net/DLevin/archive/2012/06/28/381667.html.感谢上善若水的无私分享. 在简单的介绍了Log4J各个模块类的作用 ...
- There were X failed login attempts since the last successful login
如题,开始玩Linux的人,每次登陆的时候,肯定会遇到这个提示,好担心系统被人攻破,那怎么把这些试探的IP抓出来,并屏蔽呢,今天就记录一下我的做法,供大家参考 其实这个问题已经在系统级别支持解决,目前 ...
- TP手册学习第一天
调试执行的sql语句 User::get(1); echo User::getLastSql(); 方法直接返回当前的查询SQL而不执行fetchSql echo User::fetchSql()-& ...
- Gitlab权限管理-issue管理[六]
标签(linux): git 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 设置好密码后登录进入管理目录 创建组 设置组名和权限 创建用户 已有四个用户了 给p ...
- LVS负载均衡介绍
LVS介绍 负载均衡器 • 链路负载均衡 (三层负载均衡) • 服务器负载均衡 (四层负载均衡) • 应用层负载均衡 (七层负载均衡) • 全局负载均衡 基本情况 • 实现服务器负载均衡 • 核心功能 ...
- poj2479 最大子段和
题意:给定一个数列.求出数列中不相交的两个子段和,要求和最大 解题思路:对每一个i来说,求出[0-i-1]的最大子段和以及[i-n-1]的最大子段和,再加起来,求出最大的一个.[0-i-1]的最大子段 ...