级别: 初级 Joachim (Jim) H. Frank, 高级软件架构师, IBM
2009 年 3 月 19 日
对 WebSphere® Business Monitor 中的事件处理的工作方式感到迷惑不解吗?究竟什么是筛选器表达式、关联谓词和监视上下文,以及它们如何协作以确保正确的事件更新正确的度量,以便您的业务能够迅速做出反应?在本文中,Joachim Frank 将拉开帷幕,向您介绍幕后发生的事情,以及一切如何聚合在一起以确保业务随时随地在需要时获取所需的信息。
来自 IBM Business Process Management Journal。
WebSphere Business Monitor (Monitor) 的用户有时告诉我说,它的事件处理算法非常难于掌握。基本上,他们似乎是被筛选器表达式和关联谓词的用途、各种事件交付选项以及监视上下文中驱动更新的方式难住了。
在本文中,我将让您了解这些概念的幕后秘密。我将不详细回顾 Monitor 编程模型的细微之处,如触发器、计时器和嵌套监视上下文,而是仅重点讨论事件处理的基础。
我还提供了一个简单的幻灯片演示可供下载,其中通过简单的故事情节演示了 Monitor 处理事件时事件所经历的路径。
事件处理概念
Monitor 的核心是观察器对象。为您希望监视的每个实体创建了一个观察器对象。所监视的实体可以是有形的,如设备、服务器或车辆;或者是抽象的,如流程执行或销售业绩。观察器对象订阅那些报告所监视实体中任何状态更改的事件,然后基于那些事件中的信息更新自己的状态。
Monitor 观察器对象称为监视上下文 或 MC,因为它所收集的信息为监视特定实体提供了上下文。MC 中的数据字段称为度量,因为它们通常表示与业务相关的信息的测量结果。
例如,假设一家豪华汽车公司希望监视其车队。该公司可能为其开始的每次旅行分配一个 MC。可以使用在路上从豪华汽车公司接收的信息更新此上下文,例如旅客上车时间、交通拥塞和旅客下车时间。一次旅行的 MC 可能包含旅行持续时间、上车和下车延迟、从这些度量得出的客户满意度指数、平均行车速度等度量。
通过扩展监视能力,该豪华汽车公司可能为驾驶员创建 MC,其中包含诸如准时性、每月旅行次数、平均客户满意度等度量,或者为汽车创建 MC,其中包含诸如里程油耗、下一次计划的维修等度量。这些 MC 就是针对驾驶员和车辆的观察器对象。
MC 的度量和事件订阅由监视上下文定义 所定义。正如 MC 是专用对象一样,其定义也是专用类,用于定义其实例的结构和行为。
现在您了解了基本概念和术语,下面让我们看看它究竟是如何工作的。
事件处理逐步过程
处理事件的过程包括三个步骤:
- 筛选——这是什么类型的事件?
- 关联——哪些 MC 与此事件有关?
- 更新 MC——此事件更新哪些度量,如何更新?
每个 MC 仅订阅某些类型的事件。
例如,在该豪华汽车公司中,旅行 MC 可能订阅那些报告旅行调度、乘客上车、乘客下车、交通拥挤和汽车事故的事件。旅行 MC 定义将需要定义五个事件订阅,每个事件订阅分别针对一种类型的事件。
事件订阅包含筛选器,这是一个布尔表达式,对所订阅的事件求值为 True,对其他所有事件求值为 False。定义筛选器的唯一规则在于,它必须允许所需类型的事件通过并阻止所有其他事件。出于性能的考虑,应该将筛选器保持尽可能小,换句话说,它们应该尽可能简单,足以在各种各样的预期事件中可靠地确定特定类型的事件即可。
如果所订阅的事件包含了确定其有效负载的 xsi:type 属性,并且不同的事件实例具有不同的类型,则所需做的工作就是测试此属性。另一方面,如果使用通用事件来报告不同类型的实例,并且其类型只能通过进一步检查事件内容来确定,则筛选器必须测试额外的字段。
在该豪华汽车示例中,如果小汽车使用有效负载始终为 limo:Trip(其中 limo 表示命名空间)的事件来报告旅行状态,并使用 event nature 字段来区分调度、上车和下车事件,则需要测试 event nature 字段以及 xsi:type 属性以确定到达的事件是什么类型。
在事件通过订阅的筛选器以后,将针对 MC 定义的每个实例对订阅的关联谓词求值。关联谓词通常将事件中的某个键值(例如唯一旅行标识符)与包含相同键的度量作比较。如果找到匹配的 MC,则该 MC 可以接收事件以做进一步的处理。如果未找到,则可以创建新的 MC 上下文。
但是如果这不是您希望的结果,该怎么办呢?例如,假设某个乘客上车事件到达并且没有找到匹配的 MC。在此情况下,您可能不希望创建新的 MC,而是引发一个错误条件,指示未接收到“已调度小汽车”事件(此事件应该先发生并创建 MC)。类似地,如果某个“已调度小汽车”事件到达,并且关联处理找到了匹配的 MC,这表明已接收到了相同旅行的“已调度小汽车”事件。这同样表示一个错误,向已经存在的上下文交付重复调度事件不是您希望的结果。
可以看到,能够控制事件关联算法是非常重要的。这可以通过配置事件交付设置来实现。每个事件订阅具有三个设置,其中涵盖了零个、一个和多个 MC 满足关联谓词的情况。
下表显示了所有可能的事件交付设置。
事件交付设置
| 零个匹配 | 一个匹配 | 多个匹配 |
|---|
| 忽略 | 忽略 | 忽略 | | 视为错误 | 视为错误 | 视为错误 | | 创建新 MC | 交付给(单个)匹配 MC | 交付给任何匹配 MC | | 回滚所有更改并在以后重试此事件的处理 |
| 交付给所有匹配的 MC |
在关联处理确定用于事件交付的 MC 以后,事件将更新那些 MC。
要理解这是如何工作的,您可以将 MC 看作是电子表格,其单元格表示度量。对于每个度量,MC 定义定义了更新其值的一个或多个映射。映射就像电子表格公式。一个映射可能依赖多个事件订阅,并潜在地依赖其他度量。
当将某个事件交付到某个 MC 时,依赖该事件的所有映射都会自动运行,并使用结果更新它们的目标度量。然后以级联方式处理进一步的更新,就像在电子表格中一样:依赖更新后的度量的映射将运行,然后依赖其目标的映射将运行,以此类推。该级联必须终止,因为映射定义的依赖关系图不允许含有循环。例如,如果度量 B 依赖度量 A,则度量 A 一定不能依赖度量 B。
查看幻灯片演示
如果您仍然对某些概念有点不解,或者只想出于兴趣了解一下该过程是如何工作的,请查看一下本文附带的“事件处理”幻灯片演示。该幻灯片使用简单的图形和易于理解的故事情节,全程演示了我在本文中描述的步骤。
总结
希望本文和配套的幻灯片让您更好地了解了 WebSphere Business Monitor 中的事件处理背后的概念,并对现实场景中实际处理事件的方式有了更清楚的认识。
下载 | 描述 | 名字 | 大小 | 下载方法 |
|---|
| Slide show demo | epdemo.zip | 250KB | HTTP |
|---|
参考资料
关于作者  | 
|  |
Joachim (Jim) H. Frank 是 IBM 的一名高级软件架构师。他负责 WebSphere Business Modeler 和 WebSphere Business Monitor 设计和开发的技术领导工作。 |
对本文的评价
|