分布式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中间价实践》
相关推荐
为了解决这一问题,有以下几种常见的分布式Session解决方案: 1. **Session复制同步**:所有Web服务器节点之间通过复制的方式同步Session。这种方式简单但效率低下,因为所有Session都要存储在每个服务器上,占用...
Java分布式session存储解决方案图解 Java分布式session存储解决方案是指在分布式系统中,如何存储和管理Session数据的问题。Session数据是指Web应用程序中用户的会话信息,包括用户的身份信息、操作记录等。分布式...
在分布式Session的场景下,ZooKeeper可以作为中央存储节点,保存用户的Session信息,使得各个服务器能够访问这些信息并保持一致。 1. **Session集中存储**: 在传统的单体应用中,Session通常存储在服务器本地或者...
分布式 Session 方案 分布式 Session 方案是指在分布式系统中,为了解决 Session 问题而采用的方法。 Session 是 Web 应用程序中保存用户信息的机制,当用户请求时,服务器需要记录用户的信息,以便在后续请求中...
分布式Session方案是现代大型Web应用中解决用户会话管理的关键技术。在单体应用时代,Session存储在服务器本地,但随着应用的分布式部署,这种模式不再适用,因为服务器集群之间无法共享Session数据,可能导致用户在...
通过以上讲解,我们可以看到Zookeeper在分布式session管理中的作用,它提供了一种高效、可靠的解决方案,使得用户在分布式系统中能够享受到无缝的体验。结合适当的优化策略,可以在保证系统性能的同时,实现高效的...
分布式Session解决方案一:客户端存储 客户端存储是指将信息存储在Cookie中。这种方法简单易行,但存在一些缺点,如数据存储在客户端,存在安全隐患、Cookie存储大小、类型存在限制等。 分布式Session解决方案二:...
在本文中,我们将深入探讨分布式Session存在的问题、现有的解决方案,以及在一个实际项目中的应用实例。 **分布式Session存在的问题** 1. **Session不共享**:当用户在集群中的不同服务器之间切换时,由于每个...
为了解决这个问题,Spring Session提供了一种优雅的解决方案,特别是结合Redis作为持久化存储时,可以实现高效的分布式Session管理。本文将详细介绍Spring Session与Redis集成,以及如何自定义Session来应对分布式...
标题 "改进基于filter的远程分布式session存储" 涉及的是在Web开发中关于Session管理的一个重要主题。...通过对Filter的利用和优化,开发者可以设计出更高效、更健壮的远程分布式session存储解决方案。
分布式Session的实现是现代Web应用中一个至关重要的技术,它涉及到多服务器间的用户会话共享,以确保用户在切换服务器时仍然能保持登录状态和其他个性化设置。本文将深入探讨这个主题,结合给定的标签“源码”和...
Spring Session是Spring框架提供的一种用于处理分布式Session的解决方案,它允许我们将Session数据存储在外部存储如Redis中,从而实现跨服务器的Session共享。 首先,我们需要理解Session的基本概念。在Web应用中,...
### 分布式Session解决方案与一致性Hash详解 #### 一、问题背景及提出 在现代互联网应用中,随着用户量的增长和服务需求的增加,单一服务器往往难以满足高性能、高可用性的需求,因此分布式系统逐渐成为主流架构之...
以下是对几种分布式Session解决方案的详细解析: 1. 客户端存储: 这种方法将Session信息直接存储在客户端的Cookie中,确保每次请求都能携带完整的Session信息。然而,这种方法的安全性较低,因为Cookie中的数据...
以下是对四种常见分布式Session解决方案的详细解释: 1. **Session集中式存储**: 这种方法的核心是将Session数据从单一服务器内存迁移到中心化的存储系统,如Redis集群。当用户在服务器上创建Session时,服务器会...
### 分布式Session一致性解决方案 在现代互联网应用中,随着业务规模的增长和技术的发展,传统的单体应用模式已逐渐被分布式架构或微服务架构所取代。在这种架构下,系统的可扩展性和高可用性得到了显著提升,但...
通过上述讨论可以看出,Spring Session + Redis是一种较为理想的分布式Session共享方案。它不仅能够解决Session共享的基本问题,还能提供良好的扩展性和可靠性。当然,在实际应用中还需要根据项目的具体情况选择最...
在文件名"session-redis"中,我们可以推测解决方案可能涉及到Redis,这是一个非常流行的数据存储和缓存系统,常用于实现分布式Session存储。Redis支持数据结构如字符串、哈希、列表、集合和有序集合,可以高效地存储...