`

分布式集群系统下的高可用session解决方案

    博客分类:
  • Java
 
阅读更多

目前,为了使web能适应大规模的访问,需要实现应用的集群部署. 而实现集群部署首先要解决session的统一,即需要实现session的共享机制。

 目前,在集群系统下实现session统一的有如下几种方案:

  • (1) 应用服务器间的session复制共享(如tomcat session共享)
  • (2) 基于cache DB缓存的session共享

应用服务器间的session复制共享

    session复制共享,主要是指集群环境下,多台应用服务器之间同步session,使session保持一致,对外透明。 如果其中一台服务器发生故障,根据负载均衡的原理,web服务器(apache/nginx)会遍历寻找可用节点,分发请求,由于session已同步,故能保证用户的session信息不会丢失。

 

此方案的不足之处:

  • 技术复杂,必须在同一种中间件之间完成(如:tomcat-tomcat之间).
  • session复制带来的性能损失会快速增加.特别是当session中保存了较大的对象,而且对象变化较快时, 性能下降更加显著. 这种特性使得web应用的水平扩展受到了限制。
  • Session内容序列化(serialize),会消耗系统性能。
  • Session内容通过广播同步给成员,会造成网络流量瓶颈,即便是内网瓶颈。  

 基于cache DB缓存的session共享

即使用cacheDB存取session信息,应用服务器接受新请求将session信息保存在cache DB中,当应用服务器发生故障时,web服务器(apache/nginx)会遍历寻找可用节点,分发请求,当应用服务器发现session不在本机内存时,则去cache DB中查找,如果找到则复制到本机,这样实现session共享和高可用。

目前有开源的msm用于解决tomcat之间的session共享:Memcached_Session_Manager(MSM)

http://code.google.com/p/memcached-session-manager/
一个高可用的Tomcat session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用memcached存取Session,以实现高可用。

特性

  • 支持Tomcat6、Tomcat7支持黏性、非黏性Session
  • 无单一故障点
  • 可处理tomcat故障转移
  • 可处理memcached故障转移
  • 插件式session序列化
  • 允许异步保存session,以提升响应速度
  • 只有当session有修改时,才会将session写回memcached
  • JMX管理&监控

该方案的不足之处:

  • memcache支持的数据结构比较单一
  • memcache的内存必须足够大,否则会出现用户session从Cache中被清除
  • 需要定期的刷新缓存
  • 服务器故障时,存在于内存的memcache数据将会丢失

 为了解决基于memcache中存在的不足,故提出了下面的一种解决方案:

基于redis缓存的session共享

 结合上面的 MSM 思想,由 redis负责 session 数据的存储,而我们自己实现的 session manager 将负责 session 生命周期的管理。

一般的系统架构:

图1

    此架构存在着当redis master故障时, 虽然可以有一到多个备用slave,但是redis不会主动的进行master切换,这时session服务中断。

    为了做到redis的高可用,引入了haproxy或者keepalived来解决redis master slave的切换问题。即:

图2

 

 此体系结构中, redis master出现故障时, 通过haproxy设置redis slave为临时master, redis master重新恢复后, 再切换回去. 此方案中, redis-master 与redis-slave 是双向同步的, 解决目前redis单点问题. 这样保证了session信息在redis中的高可用。

 

实现此方案:

nginx        1   192.168.1.102

tomcat1    1  

tomcat2    1

redis-master   1 

redis-slave      1

slave1     1

slave2     1

haproxy vip  1

 

 装载自http://tendyming.iteye.com/blog/1815136

分享到:
评论

相关推荐

    分布式服务集群下实现session共享解决方案.docx

    本文主要探讨了几种在分布式系统中实现session共享的解决方案。 首先,我们需要理解session的基本概念。session是在服务器端创建的一种存储用户会话状态的机制。每当新的客户端发起HTTP请求时,服务器会创建一个...

    分布式集群系统中Session会话的高效共享方法研究.pdf

    分布式集群系统是在互联网和企业级应用中,为了解决高可用性、高扩展性以及高性能问题而广泛采用的一种架构设计。在这种设计中,通常会有多个服务器节点组成一个集群,协同处理用户的请求。会话(Session)管理是...

    分布式环境下session解决方案1

    【分布式环境下Session解决方案】 在构建分布式系统时,Session管理是一个重要的环节,因为它涉及到用户状态的保持和一致性。本文主要探讨了五种在集群/分布式环境下处理Session的策略,旨在提高用户体验并确保系统...

    分布式session方案

    分布式 Session 方案是指在分布式系统中,为了解决 Session 问题而采用的方法。 Session 是 Web 应用程序中保存用户信息的机制,当用户请求时,服务器需要记录用户的信息,以便在后续请求中使用。然而,在分布式系统...

    tomcat集群session共享解决方案

    例如,小规模应用可能更倾向于简单的session复制,而大型分布式系统则可能需要更复杂的解决方案,如使用共享存储或Spring Session。 在学习这些解决方案时,可以参考“Tomcat集群资料”中的文档,它们通常包含配置...

    Memcahed分布式缓存服务替换Session解决方案

    标题中的“Memcached分布式缓存服务替换Session解决方案”是指一种使用Memcached作为分布式缓存来管理Web应用中的Session状态的方法,以替代传统的基于服务器端Session存储的策略。这种方案主要针对的是多服务器环境...

    分布式Session解决方案.docx

    在分布式系统中,Session管理是一...总的来说,分布式Session管理是现代Web应用不可或缺的一部分,通过合理选择和实施解决方案,我们可以确保用户在多服务器环境下的体验连贯一致,同时保证系统的可扩展性和高可用性。

    基于ZooKeeper的分布式Session实现

    ZooKeeper是一个高可用、高性能的分布式协调系统,它维护着一个分布式的、有序的命名空间,提供诸如配置管理、集群同步、选举等服务。在分布式Session的场景下,ZooKeeper可以作为中央存储节点,保存用户的Session...

    zookeeper实现分布式session sample

    Zookeeper,作为Apache的一个开源项目,是一个高可用、高性能的分布式协调服务,它为解决分布式环境下的session共享提供了有效的解决方案。本示例将探讨如何利用Zookeeper实现分布式session。 1. **Zookeeper的基本...

    集群中几种session同步解决方案的比较

    ### 集群中几种session同步解决方案的比较 在分布式系统和集群环境中,session管理是一项关键技术,它确保了用户在不同服务器之间的交互能够保持一致性。本文将深入探讨六种常用的session共享方法,包括它们的工作...

    Centos7搭建minio分布式集群

    在CentOS 7上搭建MinIO分布式集群是一项重要的IT任务,这将帮助我们构建一个可扩展、高可用的云存储解决方案。下面将详细阐述如何在CentOS 7系统上实现这个过程。 首先,我们需要了解MinIO的基本概念。MinIO由多个...

    集群中几种session同步解决方案的比较共1页.pdf

    集群环境下的session管理对于提高系统的可扩展性和可用性至关重要。以下是对集群中几种session同步解决方案的详细比较: 1. **Session复制**: 这是最基础的策略,所有服务器都复制一份相同的session数据。当一个...

    集群环境下memcache解决session共享

    总结来说,"集群环境下memcache解决session共享"是一个针对分布式系统中session管理的有效解决方案。通过使用memcache作为session的中央存储,可以在Tomcat8集群中实现用户状态的无缝切换,提升应用的稳定性和用户...

    一文读懂分布式Session常见解决方案.docx

    以下是对四种常见分布式Session解决方案的详细解释: 1. **Session集中式存储**: 这种方法的核心是将Session数据从单一服务器内存迁移到中心化的存储系统,如Redis集群。当用户在服务器上创建Session时,服务器会...

    分布式Session的一个实现.

    分布式Session的实现是...在实际应用中,开发者需要考虑性能、可用性、安全性等多个方面,选择最适合项目需求的解决方案。无论是自己编写代码还是使用现有的工具,理解和掌握分布式Session的核心原理都是至关重要的。

    集群分布式以及需要注意的问题.docx

    在总结以上关键问题的基础上,设计分布式集群系统时,应从系统架构、数据一致性、资源管理、服务协调等多方面进行综合考虑,并制定出相应的策略和解决方案。这些方案应以确保系统的高性能、高可用性和良好的用户体验...

    Nginx+Tomcat+Memcached集群Session共享

    总之,Nginx+Tomcat+Memcached的架构为大型Web应用提供了强大的Session共享和负载均衡能力,是现代分布式系统中常见的一种解决方案。通过深入理解和熟练掌握这一技术,开发者可以构建出更稳定、更可扩展的应用系统。

    针对负载均衡集群中的session解决方案的总结.docx

    选择哪种Session解决方案取决于具体的应用场景、负载需求、安全性和可用资源。例如,小型应用可能更倾向于使用Session保持,而大型电商网站可能需要更复杂的Session共享或数据库存储方案。在设计解决方案时,还需要...

Global site tag (gtag.js) - Google Analytics