分布式session存储方案
Session Stick
Session Stick 方案即将客户端的每次请求都转发至同一台服务器,这就需要负载均衡器能够根据每次请求的会话标识(SessionId)来进行请求转发
这种方案实现比较简单,对于Web服务器来说和单机的情况一样。但是可能会带来如下问题:
1. 如果有一台服务器宕机或者重启,那么这台机器上的会话数据会全部丢失。
2. 会话标识是应用层信息,那么负载均衡要将同一个会话的请求都保存到同一个Web服务器上的话,就需要进行应用层(第7层)的解析,这个开销比第4层大。
3. 负载均衡器将变成一个有状态的节点,要将会话保存到具体Web服务器的映射。和无状态节点相比,内存消耗更大,容灾方面也会更麻烦。
Session Replication
Session Replication 的方案则不对负载均衡器做更改,而是在Web服务器之间增加了会话数据同步的功能,各个服务器之间通过同步保证不同Web服务器之间的Session数据的一致性
Session Replication 方案对负载均衡器不再有要求,但是同样会带来以下问题:
1. 同步Session数据会造成额外的网络带宽的开销,只要Session数据有变化,就需要将新产生的Session数据同步到其他服务器上,服务器数量越多,同步带来的网络带宽开销也就越大。
2. 每台Web服务器都需要保存全部的Session数据,如果整个集群的Session数量太多的话,则对于每台机器用于保存Session数据的占用会很严重。
Session 数据集中存储
Session 数据集中存储方案则是将集群中的所有Session集中存储起来,Web服务器本身则并不存储Session数据,不同的Web服务器从同样的地方来获取Session
相对于Session Replication方案,此方案的Session数据将不保存在本机,并且Web服务器之间也没有了Session数据的复制,但是该方案存在的问题在于:
1. 读写Session数据引入了网络操作,这相对于本机的数据读取来说,问题就在于存在时延和不稳定性,但是通信发生在内网,则问题不大。
2. 如果集中存储Session的机器或集群出现问题,则会影响应用。
Cookie Based
Cookie Based 方案是将Session数据放在Cookie里,访问Web服务器的时候,再由Web服务器生成对应的Session数据
但是Cookie Based 方案依然存在不足:
1. Cookie长度的限制。这会导致Session长度的限制。
2. 安全性。Seesion数据本来是服务端数据,却被保存在了客户端,即使可以加密,但是依然存在不安全性。
3. 带宽消耗。这里不是指内部Web服务器之间的宽带消耗,而是数据中心的整体外部带宽的消耗。
4. 性能影响。每次HTTP请求和响应都带有Seesion数据,对Web服务器来说,在同样的处理情况下,响应的结果输出越少,支持的并发就会越高。
总结
前面四个方案都是可行的,但是对于大型网站来说,Session Sticky和Session数据集中存储是比较好的方案。
参考
http://blog.csdn.net/t894690230/article/details/50477923
《大型网站系统与Java中间价实践》
相关推荐
主要介绍了Java分布式session存储解决方案图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
4.掌握分布式Session和分布式调度解决方案度解决方案 多场景落地六大分布式解决方案 1.实战分布式锁实现高并发引起的超卖问题 2.实战Redisson框架解决用户重复注册问题 3.实战Seata事务解决下订单减库存一致性问题 ...
7.分布式Session使用redis实现 8.分布式服务追踪与调用链Sleuth+ZipKin C.项目运营与部署环境 1.分布式设施环境,统一采用docker安装 2.使用jenkins+docker实现自动部署 3.微服务API管理ApiSwagger 4.使用GitLab代码...
主要介绍了PHP分布式中Redis实现Session的方法,文中详细介绍了两种方法的使用方法,并给出了测试的示例代码,有需要的朋友可以参考借鉴,下面来一起看看吧,
FourInOne对于分布式大数据量并行计算的解决方案不同于复杂的hadoop,它不像hadoop的中间计算结果依赖于hdfs,它使用不同于map/reduce的全新设计模式解决问题。FourInOne有“包工头”,“农民工”,“手工仓库”的几...
支持多种Session存储方案,默认是redis; 合并session的写操作,一个request里的多次session操作,只会写一次缓存; 支持Tomcat,netty等Web服务器,理论上j2ee的Web服务器都支持; 支持标准的session api,可以和...
2. 分布式 Session 方案分布式会话方案原理主要是将关于用户认证的信息存储在共享存储中,且通常由用户会话作为 key 来实现的简单分布式哈希映射 3.
分布式web server集群部署后需要实现session共享,针对 tomcat 服务器的实现方案多种多样,比如 tomcat cluster session 广播、nginx IP hash策略、nginx sticky module等方案,本文主要介绍了使用 redis 服务器进行...
web服务部署多个,nginx反向代理,其中要实现session共享,采用spring-session的redis集群存储方案 mysql主从复制,读写分离 3技术要点 后端: spring-boot、spring-session、spring-security等全家桶 dubbo + ...
但是fourinone并不提供一个分布式存储系统,比如文件数据的导入导出、拆分存储、负载均衡,备份容灾等存储功能,不过开发人员可以利用这些api去设计和实现这些功能,用来满足自己的特定需求。 二、自动化class...
基于Shiro+Redis的分布式session解决方案。 3.可商用的权限设计方案(提供菜单,按钮,超链接,API粒度的权限控制)。 4.完整的代码生成器教程。 5.采用JasperReport完成企业级PDF报表生成。
web服务部署多个,nginx反向代理,其中要实现session共享,采用spring-session的redis集群存储方案 mysql主从复制,读写分离 3技术要点 后端: spring-boot、spring-session、spring-security等全家桶 dubbo + ...
2.1.3 分布式session 69 2.2 持久化存储 71 2.2.1 MySQL扩展 72 2.2.2 HBase 80 2.2.3 Redis 91 2.3 消息系统 95 2.3.1 ActiveMQ & JMS 96 2.4 垂直化搜索引擎 104 2.4.1 Lucene简介 105 2.4.2 ...
session跨域共享及企业级单点登录解决方案实战 分布式事务解决方案实战 高并发下的服务降级、限流实战 基于分布式架构下分布式锁的解决方案实战 分布式架构实现分布式定时调度 分布式架构-中间件 分布式消息...
使用Redis的set实现点赞,zset实现关注,并使用Redis存储登录ticket和验证码,解决分布式session问题。 使用Redis高级数据类型HyperLogLog统计UV(Unique Visitor),使用Bitmap统计DAU(Daily Active User)。 使用Kafka...
当服务端水平扩展的时候,就不用处理session复制(session replication)/ session黏连(sticky session)或是引入外部session存储了。 适用于多客户端(特别是移动端)的前后端解决方案 移动端使用的往往不是...
下面简单说下PHP项目分布式部署中,SESSION的同步方案中的一种,使用Memcache来存储SESSION。并总结了三种配置方式,需要的朋友可以参考下
不支持一些花哨的东西,例如跨多个Redis实例的分布式存储。 随意添加您认为合适的内容。 该库不提供任何与缓存有关的内容,仅适用于Rails应用程序。 要获得其他框架或对缓存的直接支持,请查看 。 安装 对于Rails ...
方案1:在负载均衡服务器上做一个session 映射,如果有记录则分发到原服务器上。 方案2:在负载均衡服务器中运行一个精灵线程,预测服务器压力过大时会自动把session转移压力过小的服务器中。 3、做专门的图片...
为了解决单机处理的瓶颈,增强软件的可用性,我们... 我们使用MemCache+Cookie方案来解决分布式系统共享登录状态的问题。 Memcache服务器本身就是一个Socket服务端,内部数据采用键值对的形式存储在服务器的内存中