`
yuxie
  • 浏览: 19781 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

应用服务器集群、可用性与无session的企业应用(一)

阅读更多

本文目的

本文的主要目的是讨论企业应用实现高可用性的方案。即如何在保证性能的同时,使得应用保持 24 小时的可用性。 为实现此目的,灾难恢复和性能问题的解决是必不可少的。本文仅就程序和应用服务器两方面进行讨论,不讨论数据库等相关的问题。

1.    灾难恢复

所谓灾难恢复(仅对 Web 应用而言),是指在某个应用失去响应能力后(比如重启),客户端能立即透明的切换到冗余应用。这一切换对客户端来讲应该是感觉不到的。从技术上来讲,就是客户端在与服务器端进行交互的过程中,客户端在服务器端保存的状态能立即切换到新的服务器上。在 web 应用中,这些状态一般保存在 http session 里。所以所谓状态复制,一般来讲就是 http session 复制。

目前能提供灾难的方案之一是集群。对于 Weblogic ,集群的实现方式为 Paired servers replication

<v:shapetype id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" o:extrusionok="f" gradientshapeok="t"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype>


cluster.JPG
(图片引自
http://www.theserverside.com/articles/article.tss?l=J2EEClustering

在这种实现方式里, session 只在相邻的或者指定的两个 server 之间进行复制,当某一个 server down 掉后,需要 servers 前端的 load balancer 知道哪一台 server 是这个 Server1 paired backup server ,并将原来指向 Server1 的请求转发给这台 paired backup server 。应该说这种复制策略是相当高效的,但是对集群前端的路由要求比较高。

2.    性能

企业应用一般会跑在多台服务器上。就性能而言,我们的期望自然是:总体性能 = 单台服务器性能 X 服务器台数。不过从上边的说明就能看出,集群中的每一台 server 都会有一部分性能耗费在 session 复制上。耗费的性能取决于 session 的大小。如果应用中 session 保留了大量的数据,或者用户数量很多,损耗的性能也将相当可观。

(有一种提升性能的方案是使用分布式的对象,例如 EJB ,根据对象耗费性能的不同对其所在服务器进行调整。不过这种方案早已充满了极大的争论。流行的观点认为,对于业务逻辑不是很复杂的应用,使用分布式对象只会让性能下降。因此下边将不再讨论。)

3.    维护

从维护的角度上看,如果我们能不重启应用就能给应用添加新的功能,或者修改已有的 bug ,那显然相当 8 错。

分析

根据上边的说明,我们可以初步得出几个结论:

1、  要使用Weblogic集群所带来的灾难恢复的好处,就必须忍受同时带来的性能损失。

2、  在使用weblogic集群的同时,我们必须拥有高性能的 Server 路由设备。

3、  使用weblogic集群,在重新部署应用时,由于不能重新部署 (redeploy) 集群下单台 server 的应用,导致几台 server 需要同时停掉应用。当所有的 server 全都陷入灾难中,灾难恢复也就失去了意义。

<o:p> </o:p>

那么,如何在实现灾难恢复和高性能的同时,又能避免或者减少上边列举的损失呢?

初步的思路可以有:

<o:p> </o:p>

1、  如果我们能忍受某一台 server down 机后客户状态丢失的后果,那么最简单的方案就是停用集群,前端 load balancer 把相同 IP 的请求转到相同的服务器。在重新部署应用时,分批重起不同 server 上的应用。

2、  全部采用无 session 策略。将客户状态保留在客户端。这样没有Weblogic集群也就无所谓了。我们只需要一个普通的(分发器+失败检测)将请求均匀的分发到可用的服务器上。

 

分享到:
评论

相关推荐

    nginx+tomcat+redis服务器集群session共享

    在构建大型分布式应用时,服务器集群的session共享是至关重要的,因为这关乎到用户状态的一致性和用户体验。本文将深入探讨如何使用nginx、tomcat和redis来实现这一目标。 首先,我们来理解这三个组件的基本角色: ...

    Tomcat服务器集群和负载均衡

    在IT行业中,Tomcat服务器是Java Web...总的来说,Tomcat服务器集群和负载均衡是提升Web应用性能和可用性的有效手段。通过精心设计和配置,可以创建一个高可用、高性能的Java Web服务环境,以满足不断增长的用户需求。

    tomcat集群session共享解决方案

    在分布式系统中,Tomcat集群是一种常见的架构模式,用于提高应用程序的可用性和可扩展性。然而,当多个Tomcat实例组成一个集群时,session(用户会话)共享成为一个挑战,因为每个实例都有自己的内存空间,无法直接...

    Nginx+Tomcat+Memcached集群Session共享

    标题 "Nginx+Tomcat+Memcached集群Session共享" 描述了在分布式环境中如何通过Nginx反向代理服务器、Tomcat应用服务器集群以及Memcached缓存系统来实现Session的共享。这是一个常见的高可用性和负载均衡解决方案。...

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

    在构建分布式Web应用程序时,集群部署是常见的策略,它可以提高系统的可用性和可扩展性。然而,随着集群的建立,一个问题也随之出现:如何在不同的服务器之间共享用户会话(session)。`session共享`成为了多台...

    tomcat集群实现session复制

    在IT领域,特别是Web应用服务器的管理与优化中,Tomcat集群实现Session复制是一个关键的技术点,它确保了高可用性和负载均衡,特别是在处理大量并发请求的场景下。本文将深入探讨这一主题,涵盖其原理、配置方法以及...

    tomcat集群session共享

    在部署高可用性、高并发性的应用时,通常会构建Tomcat集群来提高服务的可扩展性和容错性。然而,当涉及到用户状态管理时,如通过HTTP协议的session进行用户登录状态跟踪,集群中的session共享就成为一个关键问题。 ...

    Weblogic 10.3集群配置指南与Session持久化

    Weblogic 10.3 集群配置与Session持久化是企业级应用部署的关键环节,它涉及到多个方面的知识,包括Weblogic的基础概念、集群架构、安装配置以及Session的管理和持久化。 1. **Weblogic集群名词解释** - **Domain*...

    Tomcat7集群实现共享session,已配置好。

    标题 "Tomcat7集群实现共享session,已配置好" 暗示了这是一个关于在Tomcat7服务器集群环境中实现session共享的配置实例。在多台Tomcat服务器组成的集群中,session共享是解决用户会话在不同服务器之间无缝切换的...

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

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

    集群环境下memcache解决session共享

    在IT行业中,尤其是在大型Web应用部署中,集群环境是常见的架构模式,以提高系统的可用性和扩展性。然而,集群环境下的session共享问题是个棘手的问题,因为它涉及到用户状态的维护和一致性。本篇将深入探讨如何在...

    tomcat7 集群通过redis共享session 所需jar包

    在集群环境中,多个Tomcat实例协同工作,提供负载均衡和故障转移,以提高应用的可用性和性能。 2. **Session共享**:Session是Web应用程序中用来跟踪用户状态的一种机制。在单个服务器上,Session数据存储在服务器...

    应用服务器中间件技术要求.doc

    《应用服务器中间件技术要求》文档详述了对应用服务器中间件的一系列技术指标和功能需求,涵盖了标准兼容性、平台支持、数据库兼容性、集群与可用性、安全性、管理和开发等多个方面。以下是对这些要求的详细解读: ...

    redis+tomcat集群配置session共享

    在分布式系统中,Session共享是一个重要的议题,尤其是在使用Redis与Tomcat构建的集群环境中。当用户在集群中的任一节点登录后,其Session信息需要在其他节点也能访问,以实现会话持久化,保证用户体验的一致性。本...

    tomcat8集群session共享(redis处理)

    通过以上步骤,我们就实现了Tomcat8集群下的Session共享,使得用户在集群中的任意节点访问都能保持登录状态,提高了服务的可用性和用户体验。需要注意的是,虽然Redis是常用的解决方案,但也有其他方式,如Memcached...

    redis 集群共享Session

    - **配置Redis集群**:首先,我们需要部署一个稳定的Redis集群,确保高可用性和数据一致性。这通常包括多个主节点和副本节点,通过槽分区实现数据的分散存储。 - **Session数据序列化**:将Java的HttpSession...

    java应用服务器集群环境下代码编写要注意的问题参照.pdf

    集群是指一组同时运行相同Web应用的服务器,对外表现为单一服务,旨在提高系统的可用性和稳定性,通过负载均衡分散请求到各个节点。 集群技术具有高可靠性和高可用性的特点,当主节点出现故障时,冗余节点能够接管...

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

    在分布式系统和集群环境中,session管理是一项关键技术,它确保了用户在不同服务器之间的交互能够保持一致性。本文将深入探讨六种常用的session共享方法,包括它们的工作原理、优缺点以及适用场景。 #### 1. 客户端...

Global site tag (gtag.js) - Google Analytics