application
Microsoft Application Center 2000 组件负载平衡技术概述
作者:Chris Rees
本技术概述将讨论 Microsoft Application Center 2000 (Application Center) 组件负载平衡技术 (CLB)。
引言
Microsoft Application Center 2000 (Application Center) 是 Enterprise Server 的一部分,而 Enterprise Server 是 Microsoft 公司推出的 .NET 概念的组成部分。Enterprise Server 包括的其它成员有:Commerce Server 2000、BizTalk Server 2000 和 SQL Server 2000。有关 .NET 的详细信息,请查看站点: http://www.microsoft.com/net 。
.NET 中 Application Center 的用途是,为基于 Windows 2000 和 Internet Information Services 5.0 的 Web 站点提供内容部署和管理功能。Application Center 使 Web 站点可伸缩、更强劲、易于管理而且更加安全。其核心思想就是由许多 Web 服务器组成一个群集,对客户来说,这个群集就是一个 Web 站点。与此相配合的思想是,被复制到所有群集成员的单个应用程序映像。应用程序映像含有商务解决方案所需的所有部分, 包括 Web 站点、注册表设置、文件、COM+ 组件等。通过反映群集当前状态的事件、性能计数器和监视器,可以很容易地监视群集的运作状况。
Application Center 群集
通过Application Center,可以构建多级群集,它们可以使用各种负载平衡技术。负载平衡技术有助于 Application Center 提供可伸缩性和稳定性。有两种负载平衡技术受到支持:
- 网络负载平衡 (NLB)
- 组件负载平衡 (CLB)
Application Center 群集的拓扑结构决定了该如何支持负载平衡技术。一种典型的 Application Center 群集拓扑是以 n 层解决方案为基础的,这种解决方案中包括一个 Web 层群集,用来为客户机提供内容服务。这种 Web 层群集就使用了 IIS 和网络负载平衡 (NLB) 来满足传入的 IP 请求。
file:///F:/My%20Work/技术文档/服务器群设置/Microsoft%20Application%20Center%202000%20组件负载平衡技术概述.files/CLBOVR01.gif
图 1 Application Center 群集的典型拓扑结构
Web 层群集上的软件(ASP 页等)可以在本地计算机上创建和使用 COM+ 组件,或者在另一台远程计算机上通过使用分布式 COM 创建和使用 COM+ 组件。如果没有 CLB,远程活动将是静止的,因为它与已经加在远程服务器上的工作负载无关。这就是 CLB 的真正用途 — 让安装在独立服务器群集上的 COM+ 组件进行可靠、可伸缩和负载平衡地操作。
网络负载平衡
网络负载平衡 (NLB) 是 IP 负载平衡技术,它是 Windows 2000 Advanced Server 和 Windows 2000 Data Center 的一部分。有了 NLB,传入的 TCP 通信、用户数据报协议 (UDP) 通信和一般路由封装 (GRE) 通信请求被分发给各个群集成员。分发的依据是基于服务器负载百分比设置的统计算法。NLB 提供了动态伸缩功能,即在不影响客户机的情况下,自动适应群集内服务器的添加和删除。NLB 是鲁棒的,因为它可以检测到服务器故障,并将其从正运行的群集内悄悄地删除。
Application Center 大大简化了对基于 NLB 的群集的管理。Application Center 群集创建向导会自动配置 NLB 设置。这比单机使用 Windows 2000 时所需的步骤要简单得多。Application Center 还易于在群集内添加、删除服务器,以及将服务器置于联机/脱机状态。
有关 NLB 的详细信息,请查看站点:http://www.microsoft.com/windows2000/library/howitworks/cluster/nlb.asp。
组件负载平衡
组件负载平衡技术可以使 COM+ 组件实现负载平衡。COM+ 组件是经过编译的软件对象,可用于多种不同语言,包括 VBS、ASP、Visual Basic 和 C++。它们提供了一种很有用的方法,用来把软件绑定到方便且可重用的实体中。在 CLB 中,COM+ 组件位于独立的 COM+ 群集内的服务器上。旨在激活 COM+ 组件的调用被均衡地加载到 COM+ 群集内的各个服务器上。如图 1 所示,CLB 软件的决策元素运行在 Web 层上。有些收集信息的 CLB 软件的确在 COM+ 群集上运行。
组件对象模型
CLB 的根部是组件体系结构,这一结构由组件对象模型 (COM) 构成。当根据这一标准编写基于对象的软件时,该标准提供了一种使软件服务可用的通用机制。它允许以各种语言、在各种操作系统中编写软件。实现这种灵活性的关键是 COM 接口。
COM 组件的功能通过一个或多个接口来实现。要想使用 COM 组件,客户软件必须以一种知道如何处理接口的语言编写。Visual Basic、ASP、VBS、JavaScript 和 Visual C++ 等语言都是可以的。接口本身只是一个由数字组成的表,其中保存着该接口所支持的方法的地址。
file:///F:/My%20Work/技术文档/服务器群设置/Microsoft%20Application%20Center%202000%20组件负载平衡技术概述.files/CLBOVR02.gif
图 2 COM 组件上的接口
通常,COM 组件位于动态链接库 (DLL) 或者可执行文件 (.exe) 内。它们可以安装在客户机上,也可以位于远程计算机上。当它们被远程使用时,由基于远程过程调用 (RPC) 的分布式 COM (DCOM) 机制来完成调用。
COM+ 服务
COM+ 服务是 Windows 2000 操作系统的一部分,提供了一套基于 COM 和 Microsoft Transaction Sever (MTS) 的服务。COM+ 服务提供了企业级功能,如事务支持、对象生存期服务、安全服务、事件、排队组件等。
COM+ 组件
COM+ 组件是可以利用 COM+ 服务的 COM 组件。对 COM+ 组件的要求之一是它要携带配置信息。配置信息是一组属性,它们使得底层 COM 体系结构能够查明特定的 COM+ 服务(例如事务支持,还有后面我们将要提到的负载平衡)是否被支持。
COM+ 组件被集合组成称为“应用程序”的软件包,这里的应用程序不同于 Application Center 应用程序。COM+ 应用程序是一组 COM+ 组件,而 Application Center 应用程序则是商务解决方案中使用的一系列资源。这方面的例子有 Web 站点、文件、COM+ 组件,以及注册表项。
组件负载平衡的工作方式
CLB 有两大部分:
- 用于 COM+ 群集负载平衡的 CLB 软件。
- COM+ 群集(一个由 Application Center 管理的服务器群集,用来激活和运行 COM+ 组件。)
CLB 软件
CLB 软件负责确定激活 COM+ 组件时使用 COM+ 群集成员的顺序。
用于创建 COM+ 组件的业务逻辑运行在 Web 层群集上。这通常是一个 Visual Basic ASP 脚本,当要求使用 COM+ 组件时,该脚本便调用 CreateObject。(在内部被转换为对 CoCreateInstance 的调用)。使用 CLB 时,不是在本地服务器上创建组件,而是用路由列表和服务器响应时间表来帮助把 COM+ 组件激活请求传递到已实现负载平衡的 COM+ 群集。然后,COM+ 群集成员创建组件并对客户机返回一个接口。组件一经创建,CLB 就不再对其进行更多的操作。
路由列表
路由列表存在于每个 Web 层群集成员上,其中含有需要进行负载平衡的 COM+ 群集成员列表,如图 3 所示。另外,路由列表还存在于一个称为 COM+ 路由群集的位置。这个位置只用于路由,而没有 Web 层功能。本白皮书将重点介绍 Web 层方案。
file:///F:/My%20Work/技术文档/服务器群设置/Microsoft%20Application%20Center%202000%20组件负载平衡技术概述.files/CLBOVR03.gif
图 3 路由列表和响应时间
路由列表最初由 Web 层群集控制器上的管理员创建,然后自动与每个群集成员保持同步。这样一来,就不可能(实际上也不可取)让群集成员具有的路由列表中包含变化的 COM+ 群集成员。在每个 Web 层群集成员上都有路由列表的一大优点是,消除了单点故障。如果某个 Web 层群集成员停止运行(无论是否故意),其它成员将继续通过自己的路由列表对 COM+ 群集进行负载平衡。
响应时间表
每隔 200 毫秒,运行在每个 Web 层群集成员上的 CLB 软件就对自己路由列表中的每个成员进行轮询。自此,就在内存中创建了一个表,其中以响应时间为等级列出了 COM+ 群集成员 — 响应越快的成员在表中的地位就越高。Web 层成员以循环的方式使用响应时间表,以此将接收到的激活请求传递到 COM+ 群集成员。这意味着,当接收到激活请求时,响应最快、最不繁忙的 COM+ 群集成员被首先使用,次快的成员被用来处理下一个请求。响应时间表用完之后,下一个请求将被发送到表中的第一条。就这样依次处理后面的激活请求。这种情形将继续下去,直到对响应时间作了更新为止,并且激活请求被重设到新负载平衡表的开头。
每个 Web 层群集成员都拥有自己的 COM+ 群集成员响应时间表。不要试图在整个 Web 层群集内让这些值保持同步,因为路由列表的复制速度跟不上 COM+ 群集负载的变化。
COM+ 群集
在 Web 层群集内,管理员利用 Application Center 群集创建向导来创建 COM+ 群集。每个群集成员都必须装有相同的 COM+ 组件副本。有一个部署向导可用来安装组件。组件一经创建,就必须知道自己是在 CLB 群集内。
支持群集的 COM+ 组件
为了使用 CLB,必须编写 COM+ 组件来确认它们所处的状况。其关键问题是组件状态。在 COM+ 中,组件不应该保留每个组件的状态信息,因为这样会对可伸缩性和事务管理有负面影响。可伸缩性之所以会受影响,是因为如果组件是有状态的,就无法被重新利用。事务管理之所以会更复杂,是因为每个组件的状态无法穿过事务边界。使用 CLB 时还要考虑其它的因素。从本质上讲,不必担心成员节点的位置,因为在 CLB 群集的任何成员上都可以创建组件。例如在 COM+ 中,全过程存储可以用来存储对服务器上运行的多个组件都有用的信息。在 COM+ 群集内使用这一技术时需要细心的管理,因为无法保证一个组件将在哪个成员上创建。这样一来,后面对于组件的再激活将有可能发生在别的群集成员上。这就使得组件丧失了对前一个成员上的全过程存储的访问权。
组件状态要么应保存为永久状态(如 DBMS),这样可以从任何群集成员访问它;要么应保存在客户机上(如 Cookie 信息就保存在 Internet 客户机上)。
建立组件负载平衡
以下是建立 COM+ 群集所需的步骤。这些步骤基于 Application Center Beta 2 中的功能。
- 建立群集。
CLB 需要两个群集。一个群集用于保存路由列表,如前所述,这个群集通常位于 Web 层群集上。另一个群集是 COM+ 群集。请参见联机帮助中的“Creating Cluster”(创建群集)。 - 将 COM+ 组件部署到 COM+ 群集上。
通过使用部署向导,可以将 Application Center 应用程序部署到其它群集上。对于用来将更新后的内容部署到运行群集上的过渡群集,这很有用。请参见图 4。通常,要从一个 stager(过渡服务器)上运行向导,该 stager 拥有打包在 Application Center 应用程序中的 COM+ 组件。请参见联机帮助中的“Synchronizing and Deploying Content”。
file:///F:/My%20Work/技术文档/服务器群设置/Microsoft%20Application%20Center%202000%20组件负载平衡技术概述.files/CLBOVR04.gif
图 4 Application Center 中的 stager
注意 默认情况下,不部署 COM+ 组件,因为组件部署要求重新启动目标 IIS 服务,还可能导致计算机重启。然而,部署向导提供了一种选项,可以强制进行 COM+ 组件部署。
这样,在组件部署期间避免整个群集宕机就很重要了。这需要进行分阶段部署,让群集成员脱机,更新,然后再联机。有关这个问题的更多信息,请参见 Microsoft Application Center 2000 Resource Kit。 - 将 COM+ 组件部署到 Web 层群集上
CLB 要求将 COM+ 组件安装在每个 Web 层群集成员上。同样,可以使用部署向导来完成这件事。可以将 COM+ 组件打包进已部署到 Web 站点的 Application Center 应用程序中。但要记住,COM+ 组件部署将要求重新启动 IIS 服务。所以,为确保 Web 站点总是可用,分段组件部署就很重要。值得注意的另一点是,Web 层群集组件部署需要与 COM+ 群集保持同步。否则,当 Web 站点处于活动状态时,Web 层群集和 COM+ 群集可能装有不同版本的组件。要了解更多的信息,请参见 Microsoft Application Center 2000 Resource Kit。 - 将 Web 层 COM+ 组件标记为支持 CLB
Web 层群集上的 COM+ 组件需要被标记为支持 CLB。这要通过 Application Center 管理单元中已有的 Component Services Explorer 来完成。标记组件的方法是在包含它的 COM+ 应用程序中找到它,选择属性页上的 Activation 选项卡,然后选中 Component supports dynamic load balancing 复选框。 - 创建路由列表
路由列表是在 Web 层群集控制器上创建的,并自动在整个 Web 层群集上保持同步。可以通过 Application Center 中的 Web 层群集属性页上的组件 Services 选项卡来添加 COM+ 群集成员列表。
这样就可以了。一旦所有的东西安装完毕,代表客户端运行的 Web 层软件将使用 COM+ 群集内的 COM+ 组件,COM+ 组件的位置不会对此操作有影响。