`
uule
  • 浏览: 6358436 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

如何实现Session共享

 
阅读更多

多个tomcat要一起协同工作有几种办法,可以考虑的方案有以下几个:

 

1. 使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单。但这个方案的效率比较低,在大并发下表现并不好。

2. 利用nginx的基于访问ip的hash路由策略,保证访问的ip始终被路由到同一个tomcat上,这个配置更简单。但如果应用是某一个局域网大量用户同时登录,这样负载均衡就没什么作用了。

3. 利用memcached把多个tomcat的session集中管理,前端在利用nginx负载均衡和动静态资源分离,在兼顾系统水平扩展的同时又能保证较高的性能。

 

==========================================================================

分布式Session管理的必要性

Web应用在单机部署的情况下,Session是被单个应用服务器存储管理的,由于只有一个应用服务器,用户的所有请求都是通过它进行响应处理的,所以能够很容易实现会话跟踪和保持。随着业务量的增长,系统架构需要做出调整以适应发展的需要,可能会使用分布式架构或微服务架构,无论使用哪种架构方式,应用系统单机部署的模式已经不能满足需求,所以会将应用系统部署到多台应用服务器上,用户的请求也会通过负载均衡转发到某个具体应用服务器上执行,可能会出现在A1系统登录后创建并保存Session,再次发起请求,请求被转发到A2系统上显示未登录的情况,此时单机部署模式下的Session机制已不能满足要求。所以,在分布式架构或微服务架构下,必须保证一个应用服务器上保存Session后,其它应用服务器可以同步或共享这个Session。

 

 

分布式Session有如下几种实现方式

 

1.Session复制机制

 

在支持Session复制的Web服务器上,通过修改Web服务器的配置,可以实现将Session同步到其它Web服务器上,达到每个Web服务器上都保存一致的Session。

 

优点:代码上不需要做支持和修改。

缺点:需要依赖支持的Web服务器,一旦更换成不支持的Web服务器就不能使用,在数据量很大的情况下不仅占用网络资源,而且会导致延迟

 

适用场景:只适用于Web服务器比较少且Session数据量少的情况。

可用方案:开源方案tomcat-redis-session-manager,暂不支持Tomcat8。

 

2.Session粘滞机制

 

将用户的每次请求都通过某种方法强制分发到某一个Web服务器上,只要这个Web服务器上存储了对应Session数据,就可以实现会话跟踪。

 

优点:使用简单,没有额外开销。

缺点:一旦某个Web服务器重启或宕机,相对应的Session数据将会丢失,而且需要依赖负载均衡机制

适用场景:对稳定性要求不是很高的业务情景。

 

3.Session集中管理机制

 

在单独的服务器或服务器集群上使用缓存技术,如Redis存储Session数据,集中管理所有的Session,所有的Web服务器都从这个存储介质中存取对应的Session,实现Session共享。

 

优点:可靠性高,减少Web服务器的资源开销。

缺点:实现上有些复杂,配置较多。

适用场景:Web服务器较多、要求高可用性的情况。

 

可用方案:开源方案Spring Session,也可以自己实现,主要是重写HttpServletRequestWrapper中的getSession方法,博主也动手写了一个,github搜索joincat用户,然后自取。

 

4.基于Cookie管理机制

 

这种方式每次发起请求的时候都需要将Session数据放到Cookie中传递给服务端

 

优点:不需要依赖额外外部存储,不需要额外配置。

缺点:不安全,易被盗取或篡改;Cookie数量和长度有限制,需要消耗更多网络带宽。

适用场景:数据不重要、不敏感且数据量小的情况。

 

最后的总结

以上四种方式,相对来说,Session集中管理更加可靠,使用也是最多的

分享到:
评论
2 楼 yin_bp 2017-06-24  
可以看看bboss session,支持集群session共享和不同域名之间的session共享(支持不同根域名和不同子域名两种情况下的session共享),还提供强大的可视化session管理(session数据查看、剔除session记录等)和监控统计功能哦:

https://www.oschina.net/p/bboss-session
1 楼 kutygou 2015-10-14  
请问一下 这个memcache实现session的原理是什么呢? 我自己实现过一次 也成功了  但是不是很理解 能麻烦讲解一些吗?

相关推荐

    springboot +shiro+redis实现session共享(方案二)1

    "Spring Boot + Shiro + Redis 实现 Session 共享方案二" 1. 概述 本文档旨在介绍如何使用 Spring Boot、Shiro 和 Redis 实现分布式 session 共享,以解决 Web 应用程序的登录 session 统一问题。 2. 相关依赖 ...

    ssm+redis 实现session共享

    SSM+Redis 实现Session共享是现代Web应用中常见的技术组合,主要目的是在分布式系统中保持用户Session的一致性。SSM是指Spring、Spring MVC和MyBatis这三大Java Web开发框架的组合,而Redis则是一种高性能的键值存储...

    ssm+redis+nginx实现session共享和负载均衡

    接下来我们将深入探讨如何利用这三者来实现session共享和负载均衡。 1. **SSM框架中的Session管理** 在SSM框架中,通常会将session存储在本地服务器的内存中,但这种方式在多服务器部署时会导致会话不一致,用户在...

    集群redis实现session共享jar包之tomcat8

    本篇文章将深入探讨在Tomcat 8中通过`集群redis`实现session共享的方法。 一、session共享的重要性 在Web应用中,session是服务器端用来存储用户状态的一种机制,比如用户的登录信息、购物车内容等。在单台服务器...

    Tomcat8(Tomcat9)+redis实现Session共享(支持Redis集群)

    本教程将详细介绍如何利用Tomcat 8或9以及Redis实现Session共享,支持Redis集群,以提高系统的可伸缩性和数据一致性。 首先,我们需要理解Session的概念。Session是服务器端用于存储用户状态的一种机制,通常在用户...

    spring session实现session共享

    Spring Session 是一个开源项目,由 Pivotal Software 开发,旨在提供一种在分布式环境中实现Session共享的解决方案。在传统的Web应用中,Session信息通常存储在单个服务器的内存中,当应用部署在集群或者分布式环境...

    springboot + redis实现session共享

    本文将详细解释如何使用Spring Boot和Redis来实现session共享,并探讨相关的核心概念和技术。 首先,我们要了解什么是session。在Web应用程序中,session是一种用于跟踪用户状态的技术。当用户登录后,服务器会为该...

    利用redis实现session共享

    本篇文章将深入探讨如何利用Redis实现Session共享,同时结合Nginx的负载均衡策略,以及Spring Boot的应用框架,构建一个高效、可靠的分布式系统。 一、Session共享的挑战与解决方案 在传统的单体应用中,Session...

    学习Spring-Session+Redis实现session共享

    ### Spring-Session与Redis结合实现Session共享 在分布式系统中,单点登录(Single Sign-On,简称SSO)成为一种常见的需求。为了实现这一目标,就需要解决不同服务器间Session共享的问题。Spring-Session正是为此而...

    Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    本篇文章将探讨如何利用Redis、Tomcat和Nginx来实现Session共享,以便在分布式环境中保持用户状态的一致性。 首先,让我们了解一下Session的概念。Session是Web服务器用来跟踪用户状态的一种机制。当用户登录后,...

    tomcat8集群与redis实现session共享所需Jar包

    因此,引入外部存储如Redis来实现session共享成为了更优的解决方案。 标题"tomcat8集群与redis实现session共享所需Jar包"指的是将Redis作为中央存储来保存Tomcat集群中的session数据。Redis因其高性能、轻量级以及...

    集群redis实现session共享jar包之tomcat7

    "集群redis实现session共享jar包之tomcat7"这个主题涉及到的是如何在基于Tomcat 7的Web应用集群中,利用Redis作为中央存储来共享用户的Session数据。下面将详细解释这一技术的实现原理和步骤。 首先,理解Session...

    tomcat8、8.5、9与redis实现session共享

    很好用,使用也很简单,把其中的三个Jar包拷贝到你的tomcat中的...tomcat8、8.5、9与redis实现session共享,并可以通过修改源码可自定义session键,访问地址:http://blog.csdn.net/fackyou200/article/details/78929008

    tomcat8集群实现session共享,内含session共享包

    在这个场景中,我们关注的是如何在Tomcat集群环境中实现Session共享,以便提高应用程序的可扩展性和可用性。标题和描述提到的“session共享包”是解决这一问题的关键。 **什么是Session?** 在Web应用中,Session是...

    nginx实现多个tomcat7直接session共享所需jar包

    标签中的“session共享”指的就是上述的会话共享需求,“nginx”是实现此功能的反向代理服务器,“tomcat7”是Java Web应用服务器,它需要与Nginx配合实现Session共享。 具体到压缩包内的文件“npp.6.1.Installer....

    linux.redis+tomcat实现session共享

    linux.tomcat-session共享.redis.安装包

    tomcat实现session共享

    其他服务器在处理请求时,会从Redis中获取session数据,从而实现session的跨服务器共享。 值得注意的是,这种解决方案也有一些潜在的问题,例如网络延迟可能导致性能下降,以及Redis作为单点故障,可能需要考虑高...

    nginx+Redis+tomcat实现session共享jar

    包含的jar包如下: commons-pool2-2.0.jar jedis-2.5.2.jar tomcat-juli-adapters.jar tomcat-juli.jar tomcat-redis-session-manager1.2.jar

    SpringSession+Redis实现Session共享案例

    SpringSession结合Redis实现Session共享是Web开发中一种常见的解决方案,特别是在分布式系统中,为了保持用户在不同服务器之间访问时的会话一致性。本案例旨在教你如何配置和使用SpringSession与Redis来达到这一目的...

    tomcat7集群实现session共享

    当我们谈论“Tomcat7集群实现session共享”时,我们关注的是如何在多个Tomcat实例之间有效地同步用户会话信息,以便在集群环境中提供高可用性和负载均衡。 首先,理解session共享的重要性。在Web应用中,session是...

Global site tag (gtag.js) - Google Analytics