Sun Java System Application Server 9.1 部署规划指南

可用性规划

本节包括以下主题:

设置最佳的可用性

要规划系统和应用程序的可用性,请评估访问不同应用程序的用户组的可用性需求。例如,外部付费用户和业务合作伙伴要求的服务质量 (Quality Of Service, QoS) 通常比内部用户高。因此,与外部付费客户相比,内部用户更容易接受应用程序功能、应用程序或服务器不可用的事实。

下图展示了在事件的发生概率不断下降时,防范这些事件的成本和复杂性却不断增加的情况。在图的一端,简单的负载平衡群集可实现本地化应用程序、中间件以及硬件的容错能力。在图的另一端,位于不同地理位置的群集可以防范影响整个数据中心的重大灾难。

要实现较好的投资回报,确定应用程序中的功能可用性要求通常是非常有必要的。例如, 保险报价系统不可用(可能会丢失新业务)是不可接受的,而帐户管理功能(现有客户可查看其当前的保险项目)暂时不可用,则不太可能使现有客户流失。

使用群集提高可用性

在最基本的情况下,群集是一组应用服务器实例(通常位于多个物理服务器上),对于客户机而言,这些实例显示为单个实例。这可提供水平伸缩性以及比单个计算机上的单个实例更高的可用性。这种基本级别的群集与 Application Server 的 HTTP 负载平衡器插件结合使用,它接受 HTTP 和 HTTPS 请求,并将其转发到群集中的某个应用服务器实例。ORB 和集成的 JMS 代理也会为应用服务器群集执行负载平衡。如果某个实例出现故障、变得不可用(由于网络故障)或无法作出响应,则会将请求仅重定向到现有的可用计算机中。负载平衡器还可以识别有故障的实例何时得到恢复并相应地重新分配负载的情况。

HTTP 负载平衡器还提供一个运行状况检查器程序,它可以监视服务器和特定 URL 以确定它们是否可用。必须小心地控制运行状况检查的开销,以免其本身成为较大的处理负载。

对于无状态应用程序或仅包含较小值的简单用户事务的应用程序,通常只需要使用简单的负载平衡群集。对于有状态的重要应用程序,请考虑使用 HADB 保存会话持久性。有关 HADB 的概述,请参见 Application Server 管理指南第 1 章,产品概念中的高可用性数据库

要联机执行应用程序的升级,最好将应用服务器实例划分到多个群集中。Application Server 可以将应用程序和实例设置为休眠状态。休眠是指以可控制的方式将实例(或实例组)或特定应用程序设置为脱机状态,而不会影响用户当前使用实例或应用程序。将某个实例设置为休眠状态后,新用户将使用另一个实例上已升级的应用程序。这种类型的应用程序升级称为滚动升级。有关升级实时应用程序的更多信息,请参见《Sun Java System Application Server 9.1 高可用性管理指南》中的“升级应用程序而不使可用性受到损失”

在系统中添加冗余功能

一种实现高可用性的方法是,在系统中添加硬件和软件冗余功能。当一个单元出现故障时,冗余单元将接管该单元。这也称为容错。通常,要最大限度提高可用性,请确定并消除系统中每个可能的故障点。

确定故障类

冗余级别是由系统需要容错的故障类(故障类型)确定的。下面是一些故障类示例:

重复的系统进程可实现单个系统进程和单个计算机的容错能力。通过将重复的镜像(成对)计算机连接到不同的电源,可以实现单个电源的容错能力。通过在不同的建筑物中配置镜像计算机,可以实现单个建筑物火灾的容错能力。通过在不同的地理位置配置这些计算机,可以实现自然灾害(如地震)的容错能力。

使用 HADB 冗余单元提高可用性

为提高可用性,应始终在数据冗余单元 (Data Redundancy Unit, DRU) 中使用 HADB 节点,如设定性能目标中所述。

使用 HADB 备用节点提高容错能力

使用备用节点可提高容错能力。虽然并不强制要求使用备用节点,但它们可提供最大限度的可用性。

故障转移容量规划

故障转移容量规划是指,确定需要在 Application Server 部署中添加多少个额外的服务器和进程,以便在出现服务器或进程故障时,系统可以无缝地恢复数据并继续进行处理。如果系统出现过载,则可能导致进程或服务器出现故障,从而使响应时间变慢,甚至造成服务全部中断。为此类情况做好准备对成功部署至关重要。

要保持容量(尤其是峰值负载时),请在现有部署中添加运行 Application Server 实例的备用计算机。

例如,请考虑一个包含两台计算机的系统,每台计算机运行一个 Application Server 实例。这两台计算机共同处理每秒 300 个请求的峰值负载。如果其中的一台计算机变得不可用,则系统只能处理 150 个请求,假定负载是在两台计算机之间均等分配的。因此,有一半的请求在峰值负载期间无法处理。