复杂事件处理(Complex Event Processing)--5. 复杂事件处理案例分析

对适合使用复杂事件处理技术,或者说适合使用规则引擎来开发的应用做出特征的总结。即这个应用本身包含很多具备不同行为规则的个体,没有整体的行为规则;或者不论整体还是个体,他们的行为规则复杂且多变。在外部环境发生变化时,这些实体会按照既定的行为规则做出反应。应用还需要从所有这些整体和个体的状态,行为中提取出需要的结果,这种提取也是按既定的一些规则来做的。得到的结果总结为以下几类:得出一些判断结论;寻找导致现象的原因;为实现既定目标而决定采取什么行动决策;为执行的某种行为预测未来的结果。

再来看通常的企业应用,这些应用系统都是按处理数据流的模式设计的,不论是交易系统,工作流审批系统等等。 在程序设计中,虽然都是按面向对象的思想构建很多具备一定方法的对象,但这些对象都是死的,是由外部的处理流程按一定的流程逻辑一一调用已有这些对象的各个方法。所以我说这些应用系统都是整体层面的数据批量处理流程,描述现实世界的方式是整体主义的方式。

但是这种描述方式不能满足所有的实际需求。一种是应用系统没有明显的整体的行为表现,系统完全由大量具备不同行为方式的个体组成,应用系统需要描述每个个体的行为。这是个体主义的描述现实世界的方式。 比如即时战略游戏里由计算机负责操控的人和物,他们完全是具备自主行为的个体,共同组成一个虚拟的现实世界;另一种是对批量数据流处理过程的监控需求。 首先监控的对象比较多,涉及整个应用系统的各个对象,每个对象时刻都在发生着变化;其次监控的规则比较多,需要随时对大量的对象和外部事件进行大量规则的判断推理,来得到结论。 这些新的需求正好使用复杂事件处理技术来开发实现。

下面举几个例子来说明,什么样的应用适合复杂事件处理实现,什么样的应用可以用传统的数据流处理方式实现。

(1)     证券行情数据计算。

这是做过的一个项目。需求是接收一个证券市场的行情数据,计算出每个品种的 K 线数据和 K 线指标数据。曾经有人推荐使用复杂事件处理产品来实现这个功能。每个市场包含很多的证券品种(个体)。市场有状态(开闭市),每个品种有状态(停盘与否),每个品种记录当前的价格和成交量,新的行情数据相当于外部事件,接收到事件后更新每个品种的当前值,再根据历史的数值来计算 K 线和 K 线指标。 好像挺适合使用复杂事件处理技术的,细想一下其实不然。虽然有大量的品种,但每个品种计算 K 线和 K 线指标的逻辑相同,相当于个体的行为规则一样。这种处理使用标准的数据流批处理方式即可,每收到一批行情,按统一的计算处理逻辑处理每个品种即可。复杂事件处理不适合这种需求,或者说大材小用了。

(2)     风险控制系统。

在银行领域,风险包括信用风险,市场风险和操作风险。风险控制系统需要监控银行多个业务系统的多个对象和多种数据,按照大量既定的风险控制规则进行对交易行为的判断甄别,发现存在风险的交易行为,及时做出应对措施。这种需求适合使用复杂事件处理。

(3)     算法交易。

算法交易是使用计算机来进行证券交易的行为,系统需要同时监控大量的数据信息,按照若干交易策略,决定何时什么价格买什么品种买多少。 这个也比较适合使用复杂事件处理技术。

(4)     即时战略游戏。

之前也提过,即时战略里计算机控制的人和物,是对现实世界个体的一个描述。 所以适合使用规则引擎来模拟每个个体的行为。我不知道这些游戏都是怎么模拟这些人和物的行为的,但规则引擎的确也适合来做这个事情。

以上说了一大堆,可能有些抽象,也不一定完全准确。简单说一下,如果在写程序时,发现有很多的对象或者数据结构,针对这些对象和数据结构存在很多条件 + 动作的语句。只要上下文或者对象,数据结构的属性发生变化,就要去一一检查这些条件,看需要执行什么动作,如果程序如此,那就尝试使用复杂事件处理技术和规则引擎来帮助实现吧。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值