复杂事件处理(Complex Event Processing)--3. 复杂事件处理引擎产品

来源:互联网 发布:服装终端数据分析报告 编辑:程序博客网 时间:2024/05/06 03:42

3. 复杂事件处理引擎产品

复杂事件处理的核心产品其实就是规则引擎,规则引擎的工作原理如下图所示。


(1)     开发者使用规则语言或者状态机定义一系列的规则,这些规则定义了系统中实体应对外界变化的反应规律。即一个实体对象当受到外部的作用,内部状态发生了变化,满足一定条件的内部状态又触发对外部的反应,执行一定的动作。无数的有着自身行为规则的对象,彼此相互作用,共同决定了系统整体的行为。应用系统采用这种逻辑处理方式,模拟了真实世界的行为方式,是真正的面向对象的处理方式。

(2)     所有规则在规则引擎里构造为Rete network结构,用于做规则的快速匹配。

(3)     包含状态信息的对象,代表外界对系统作用和系统对外界作用的事件对象,都存储在引擎的内存里。

(4)     当外部事件产生时,规则引擎对所有定义的规则做匹配,选择出满足条件可以执行的规则策略。这些规则按定义好的优先级排列,预备按顺序执行。

(5)     如果规则执行的结果不影响内存里任何对象的状态,那继续第二条规则的执行,直至列表中的规则都执行完毕。否则重复之前的过程。

(6)     在处理过程中,内存里的状态对象和事件对象是可以删除的,当然也可以创建新的状态对象和事件对象。

(7)     这种程序不会结束,除非内部所有的对象都被清除,或者外部没有任何新的事件发生。

总之,使用复杂事件处理规则引擎来构建开发系统,是一种更贴合真实世界运行状况的描述形式。这里大量的具备自由行为规则的对象决定了系统整体的行为表现。所以我说这才是真正的面向对象的编程方式。在经济等其他领域,这也是一种好的结构模式。:)

 

基于规则引擎开发的应用程序,包含如下内容。

(1)     包含各种状态信息的对象的类定义。

(2)     事件对象的类定义。

(3)     描述对象状态变化和行为反应的规则和状态机模型。

(4)     一些常量定义。

(5)     输入事件和输出事件的消息通道。

(6)     需要查询或者加载的历史数据。

这种应用程序的处理逻辑如下图所示。

 

(1)     外部作用系统的事件产生。对这些事件做过滤,删除不需要的事件。

(2)     过滤出的事件赋值给内部的对象,开始做事件的聚合,事件的泛化。

(3)     根据定义的规则和系统的需求,进行事件的匹配,判断和推理。最后得到一个判断结论,或者找到一个导致事故的原因,决定一个决策,或者一个对系统未来变化的一个预测。

(4)     这些结果会发布出去,作用于其他系统。

 

最后有个很重要的问题需要阐述一下,就是什么样的系统适合用事件处理规则引擎来做,即行为规则声明式开发方式,什么样的系统适合传统的过程式开发方式(不管是过程式的编程,还是过程式的图形化流程编排)。我的答案是:

(1)    抽象一些这个问题是,使用系统整体过程的描述方式,还是使用系统个体行为规则的描述方式。所以如果系统包含的内部对象很多,每个对象都有自己的行为反应规则,系统整体行为依赖于所有个体的行为规则,那就使用规则引擎来开发。反之,如果系统包含的对象不多,系统有一套比较固定的,依赖很少的影响因素的行为,则使用过程式开发比较便利。

(2)     不论整体描述形式,还是个体描述形式,如果行为规则很多且在系统运行阶段规则变化比较频繁,则适合使用规则引擎。毕竟规则引擎使用很优化的规则匹配算法,使用过程式的编程来实现这个功能可不容易。

总之,过程式开发和声明式开发的界限并不是泾渭分明的,编程做出的系统使用规则引擎也能做,规则引擎开发的系统编程也能实现。但选择不好开发方式和工具,结果肯定是事倍功半的。用工具一定要用的准。