级别: 中级 Karl Gaffney, 软件测试工程师, SDI Corp.
2009 年 4 月 15 日
IBM® WebSphere® Application Server V7.0 引入了与 Java™ Enterprise Edition Connector Architecture (JCA) 兼容的资源适配器,用于实现与 WebSphere MQ 的互操作性,从而使得 z/OS 工作负载管理器功能(z/OS workload manager function,zWLM)能够跨许多服务区域处理不同类型或优先级的消息。这对于优化业务应用程序的性能通常非常重要。本文介绍如何配置消息应用程序、WebSphere Application Server 和 z/OS 系统,以通过 MQ 资源适配器利用 zWLM 功能来处理在 MQ 与 WebSphere Application Server 之间流动的消息。
来自 IBM WebSphere Developer Technical Journal。
引言
从消息的角度看,WebSphere Application Server 的一个至关重要的功能是能够与 IBM 的重要消息产品 WebSphere MQ(以下称为 MQ)互操作。在 WebSphere Application Server Version 6.0 及更高版本中,这种互操作性依赖随同 WebSphere Application Server 或 MQ 客户端提供并安装的 MQ JAR 文件。WebSphere Application Server Version 7.0 引入了与 Java Enterprise Edition Connector Architecture(以下称为 JCA)兼容的完全可插入的 MQ 资源适配器以取代这些 JAR 文件。除了标准 J2EE 资源适配器功能以外,MQ 资源适配器还支持更高级的功能,例如:
- 客户端通道压缩
- 客户端通道出口
- 客户端通道定义表
- 使用 WebSphere MQ 的 Java Messaging Service(以下称为 JMS)应用程序的消息驱动 Bean(message-driven bean,MDB)的 MQ 激活规范
- 更加集成的日志记录和跟踪功能。
WebSphere Application Server 7.0 附带并安装的 MQ 资源适配器目前可与 MQ v6 及更高版本一起工作。
对运行在 z/OS 平台上的 WebSphere 可用的附加服务质量之一是能够利用 z/OS Workload Manager(以下称为 zWLM)。zWLM 支持许多具有不同优先级和需求的不同工作负载在相同的硬件上执行。如果资源(例如 CPU 或存储)变得紧张,则 zWLM 将分布这些资源,从而尝试确保每个工作负载满足其目标。
z/OS 平台上的新 MQ 资源适配器还允许您在 WebSphere Application Server 中使用 zWLM。在 WebSphere Application Server on z/OS 中,您可以跨多个服务区域承载 EJB 容器的多个副本。可以规定每个服务区域处理某些类型的工作负载,例如处理某些类型或分类的消息,而不是让一个服务区域处理所有一切。可以优化 zWLM 功能,为每个服务区域定义工作负载目标,从而为传入请求分配消息处理优先级。例如,对于高优先级的工作项,您可以设定“在 0.1 秒内处理 90%”的目标。zWLM 功能将基于可用的资源竭尽全力实现这些目标。
图 1 演示了多个服务区域如何在 WebSphere Application Server 中通过 zWLM 和 MQ 资源适配器使用消息。多个服务区域承载着使用 MQ 激活规范部署的消息驱动 Bean (MDB) 实例,这些实例使用出现在 MQ 队列上的消息。可以对这些消息进行处理优先级分类;例如 GOLD、SILVER 和 BRONZE。检查消息的顺序为消息到达 MDB 的激活规范请求所监视的 MQ 队列的顺序。然后 MQ 基于对控制区域 Adjunct(control region adjunct,CRA)已知的分类规则为消息分配负载分类。然后 zWLM 使用这些分类来选择某个服务区域以处理消息。运行在该服务区域中的对应 MDB 实例基于为该消息分类设定的目标处理消息。
图 1. WebSphere Application Server 7.0 on z/OS 中的 MQ 资源适配器使用
为 JMS 应用程序配置 MQ 消息分类
该示例 JMS 客户端应用程序使用消息上的任意整数属性来存储消息的优先级。我们使用了 JMSXGroupSeq,因为它是消息对象上预先存在并且应用程序没有以其他方式使用的整数属性。用户还可以明确地为分类定义新的整数属性,但是为了方便起见和演示目的,这里还使用了 JMSXGroupSeq。
整数范围值对应于如下级别:
-
BRONZE:优先级为 0 至 3
-
SILVER:优先级为 4 至 6
-
GOLD:优先级为 7 至 9
就消息处理而言,GOLD 消息应该同时优先于 SILVER 和 BRONZE,并且 SILVER 消息应该优先于 BRONZE。
清单 1. 示例 JMS 客户端应用程序
int count=0;
for (int i = 1; i <= messageCount; i++) {
// 9 = GOLD, 6 = SILVER, 3 = BRONZE
if (count==0) priority=3;
if (count==1) priority=6;
if (count==2) priority=9;
// jmsMessage is the JMS Message object
jmsMessage.setIntProperty("JMSXGroupSeq", priority);
// queueSender is the JMS QueueSender object
queueSender.send(jmsMessage);
++count;
}
|
在清单 1 中,我们简单地按循环方式分配消息优先级。在现实中,您应该基于业务需要为应用程序需求分配优先级。我们在创建 JMS 消息之后和发送消息之前设置优先级。
定义分类规则
下一步,我们需要通过创建(或修改)工作负载分类文档来定义分类规则。这些规则将消息优先级与 zWLM 系统上定义(请参见清单 2)的事务分类相关联,并在 XML 文档中进行定义。
清单 2. 工作负载分类文档
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Classification SYSTEM "Classification.dtd">
<Classification schema_version="1.0">
<WMQRAClassification default_transaction_class="TC_3" schema_version="1.0">
<wmqra_classification_info transaction_class="TC_1"
selector="JMSXGroupSeq>6"
description="High priorities 7,8,9 map to TC_1 = GOLD"/>
<wmqra_classification_info transaction_class="TC_2"
selector="JMSXGroupSeq>3 AND JMSXGroupSeq<7"
description="Medium priorities 4,5,6 map to TC_2 = SILVER"/>
</WMQRAClassification>
</Classification>
|
定义此文件(例如名为 zwlm.xml)之后,MQ 资源适配器消息选择器功能在控制区域 Adjunct 中浏览到的优先级为 GOLD 的消息(在此例中为 JMSXGroupSeq > 7)将由 zWLM 功能中的事务分类 TC_1 处理,以供适当的服务区域使用。SILVER 优先级的消息(JMSXGroupSeq > 3 和 < 8)由事务分类 TC_2 处理,所有其他消息(在此例中为 BRONZE)由 TC_3 处理。
清单 3 显示了关联的 DTD 文件(例如名为 Classification.dtd):
清单 3. 工作负载分类文档 DTD
<?xml version='1.0' encoding="UTF-8"?>
<!ELEMENT WMQRAClassification (wmqra_classification_info+)>
<!ATTLIST WMQRAClassification default_transaction_class CDATA #REQUIRED>
<!ATTLIST WMQRAClassification schema_version CDATA #REQUIRED>
<!ELEMENT wmqra_classification_info EMPTY>
<!ATTLIST wmqra_classification_info transaction_class CDATA #REQUIRED>
<!ATTLIST wmqra_classification_info selector CDATA #IMPLIED>
<!ATTLIST wmqra_classification_info description CDATA #IMPLIED>
|
此 DTD 文件还可以包含针对传入 IIOP、HTTP 和 MDB(监视非 WMQ 队列)调用的分类信息。工作负载分类文件和 DTD 文件应该一起放在 z/OS 系统上的任何适当位置。对于此示例,我们将它们放在了 HFS 文件系统上的 Application Server 概要中名为 /classification 的目录中。
从管理控制台配置 WebSphere Application Server
下一步,我们需要配置 Application Server 以利用 zWLM 功能和上一部分中定义的分类规则。控制区域 Adjunct 必须在启动 WebSphere Application Server 以后存在。这是 MQ 激活规范 MDB 和用于 zWLM 的 MQ 资源适配器消息选择器功能所必需的。
- 在管理控制台中,选择:Servers -> Server Types - WebSphere application servers - <
server_name
> - Messaging - WebSphere MQ CRA settings。选中 Start CRA 复选框。
- 要利用 zWLM 功能,您需要启用多个服务区域。对于此示例,我们将使三个服务区域“可启动”,每个事务分类(以及消息优先级类型)分别对应一个服务区域。但是,您可以调整这些选项以适应您的应用程序需求,例如在可能的情况下启用更多服务区域。每个事务分类在各自的服务区域中运行。在管理控制台中,选择 Servers -> Server Types - WebSphere application servers - <
server_name
> - Java and Process Management - Server Instance。选中 Multiple Instances Enabled 复选框。
- 将 Minimum Number of Instances 和 Maximum Number of Instances 设置为
3(如图 2 所示)。以这种方式设置最小数量(而不是使用最小数量 1)可以确保所有服务区域在 WebSphere Application Server 启动以后可用。否则,针对某个事务分类的第一个请求可能要花一些时间,因为需要启动服务区域。
图 2. 定义服务区域实例数量
- 设置
wlm_classification_file 环境变量以引用工作负载分类文档。可以在单元、节点或服务器级别设置此变量。如果在单元或节点级别进行指定,则其中包含的信息必须可由继承该规范的所有服务器从该单元或节点进行访问。在管理控制台中,选择:
Environment - WebSphere variables - New。
- 将 Name 设置为
wlm_classification_file ,将 Value 设置为 : /WebSphere/Base/AppServer/profiles/default/classification/zwlm.xml。
通过 TSO 配置 WebSphere Application Server 和 zWLM
本部分介绍如何配置 zWLM 以处理通过控制区域 Adjunct 从 MQ 到达的 GOLD、SILVER 和 BRONZE 消息,以便随后在适当的服务区域中使用。当然,您需要基于指定了适当目标的应用程序需求来定义实际的用户实现。
通过从主选项菜单中选择 6. Command(对应于“Command”的任何数字),从而调用 z/OS 命令界面 (TSO) 中的 zWLM 配置界面。然后发出以下命令: iwmarin0
定义服务分类
下一步,我们将为工作负载分类 XML 文件中定义的每种消息优先级类型(GOLD、SILVER、BRONZE)的事务分类创建一个服务分类。这些服务分类指定每种类型的各自服务区域中的消息处理目标。例如,用户可能希望指定每个事务的目标平均响应时间,或者更通常的是指定百分比目标平均响应时间。通常选择平均响应时间的原因在于,如果目标不可达和不切实际,则 zWLM 功能将放弃任何实现该目标的尝试。
对于我们的示例,我们将创建三个分别名为 MQGOLD、MQSILVER 和 MQBRONZE 的服务分类,每个服务分类具有百分比平均响应时间目标。GOLD 具有最快的目标响应时间。
- 选择
(2) Extract definition from WLM couple data set
,如图 3 所示:
图 3. 提取用于定义服务分类的服务定义
- 然后选择
(4) Service Classes
,如图 4 所示:
图 4. 开始定义服务分类
- 下一步,通过选择某个现有分类并输入 1 作为操作,从而在任何现有分类的基础上创建新的服务分类。
图 5. 选择现有服务分类以创建新的服务分类
- 定义带
Workload
Name
(这里选择了 WEB)的
Service Class Name
(在此例中为 MQGOLD),以将分类分组在一起,并在操作下面输入 I 以插入目标,如图 6 所示:
图 6. 为 GOLD 消息定义 MQGOLD 服务分类
- 下面您将选择目标类型(百分比响应时间),并将 MQGOLD 定义为“在 0.1 秒内处理 90% 的消息”。从
goal type 菜单中选择 2,如图 7 所示。在随后的目标数据输入屏幕(请参见图 8)上,输入 90 作为 Percentile,输入 0.1 作为 Seconds。可以将 Importance 字段保留为 1。
图 7. 开始基于百分比响应时间为 MQGOLD 定义目标
图 8. 将目标设置为在 0.1 秒内处理 90% 的消息
图 9. 现在已经为 GOLD 消息定义了服务分类和目标
使用适当的目标对 MQSILVER 和 MQBRONZE 重复这些步骤。图 10 表明现在已经定义了三个服务分类:
图 10. 现在已经定义了 MQGOLD、MQSILVER、MQBRONZE 服务分类
定义 Component Broker (CB) 分类规则
下一步,我们需要创建 CB 分类规则。这些规则本质上将事务分类(TC_1、TC_2、TC_3)与服务分类(MQGOLD、MQSILVER、MQBRONZE)联系在一起。
- 从 WLM Policy 菜单(请参见图 4)中选择
(6) Classification Rules
。选择任何现有的规则以创建新的 CB 分类规则(请参见图 11):
图 11. 选择任何现有的规则以创建新的 CB 分类规则
- 在 Classification Rule 定义屏幕(请参见图 12)中,将
Subsystem Type 定义为 CB。此步骤需要一个缺省服务分类,用于分配未知优先级类型的消息。对于我们的示例,请将此分类设置为 MQBRONZE。在每个事务分类的 Action 下面输入 I,以将每个事务分类名称与各自的服务分类关联起来。将 Type 设置为 bTC。
图 12. 定义三个 CB 分类规则
图 13 显示了新的 CB 分类规则集。
图 13. 现在已经定义了新的 CB 分类规则集
- 退出 zWLM 功能配置,并选择
(2) Install definition on WLM couple data set and continue
以将所有更改安装到系统。
结束语
我们已经完成了针对一个基本设置的系统配置,以支持使用 MQ 资源适配器和 zWLM 功能跨多个服务区域进行优先消息处理和工作负载管理。此配置包括:
- WebSphere MQ 的 JMS 客户端应用程序
- 分类规则 XML
- 事务分类
- Application Server 配置
- 服务分类
- CB 分类规则
当 MQ 的 JMS 客户端应用程序发送消息时(例如发送到 MQ 队列以便由运行在 WebSphere Application Server 中的 MDB 使用),它将启动三个服务区域。每个服务区域将具有运行于其中的 MDB 实例,并基于消息优先级类型处理(使用)来自 MQ 队列的消息。因此,所有 GOLD 消息将在服务区域1 中进行处理,所有 SILVER 消息将在服务区域2 中进行处理,所有 BRONZE 消息将在服务区域3 中进行处理。此外,如果存在系统资源竞争,由于其服务分类中指定的事务目标,GOLD 消息将优先于 SILVER 和 BRONZE 消息。
参考资料 学习
获得产品和技术
讨论
关于作者  | 
|  | Karl Gaffney 在位于英国的 Husley Lab 的 WebSphere Platform Messaging 测试团队工作。他拥有人工智能博士学位。Karl 已在 IBM 工作了 9 年,期间主要负责测试 WebSphere Application Server 跨各种平台的 JMS 消息功能,在从消息角度测试 WebSphere Application Server 与 WebSphere MQ 的互操作性方面拥有丰富的经验。 |
对本文的评价
|