文/蔡学镛

这篇文章希望用浅显易懂的方式,介绍一个最近曝光率开始增加的技术领域:复合事件处理(Complex Event Processing,CEP)。有人将它翻译成“复杂事件处理”,但我认为“复合”或许比“复杂”更恰当一些。

人肉CEP

什么是复合事件处理?先看一些生活化的例子。其实你每天都在做人肉CEP,只是你不知道而已。所谓人肉CEP,就是通过各种感知器官,将感觉汇集到大脑,经过综合判断得到一个更具有意义的事件。在这个事件被判定出来之后,你可能会想要为此采取因应之道。

为加强说明,我推出了三个人肉CEP范例:个人版、企业版、家庭版

先看个人版!皮肤感觉温度下降是一个基础事件(Base Event)或称简单事件(Simple Event)。耳朵听到远方传来的雷声、眼睛看到闪电,都是基础事件。集合以上基础事件,得到一个复合事件:快要下雨了。于是,你的因应之道是:收衣服或者出门要带伞。

接着看企业版!身为公司领导,你看到员工经常有一堆事没做完,居然还在上班时间上网偷菜。于是你得到一个复合事件,就是:这是一个不负责任的员工。你的处理方式就是将他辞退。

最后看家庭版!这个版本有点儿童不宜。老公老说要加班,身为老婆的你心里狐疑:哪有公司这么常加班的?回家后发现他在外面洗过澡,身上有肥皂味道,但他又否认。帮他整理衣服发现衣服上有一根长头发,而且不是你的。最糟糕的是,他对你性趣缺缺。帮老公接手机时,电话那头神秘不出声。因为这种种迹象,你得到一个复合事件:老公有外遇了。不过,CEP有误报警的可能。为了避免误报警导致夫妻间无谓的争端,你应该先找侦探跟踪老公,求证外遇是否属实,再决定作何反应。

看了这些例子,现在应该能了解CEP系统的大致作用了:先捕获各种细微的事件(基础事件),然后通过分析整理,找出更有意义的事件(复合事件),最后决定采取什么行动。其中事件的分析整理以找出更有意义的事件,正是CEP的核心,也是最困难的地方。

IT-CEP

下面我们来看看IT领域的CEP。

这是一个IT事件爆发的时代,各种IT系统之间或系统内部,每天产生大量事件。系统在关键点打日志、系统之间交流信息,都是事件。但我们对这些事件往往视而不见,当成垃圾一股脑儿全扔了。其实只要处理得当,垃圾也可以变成资源。

大致上,CEP可以帮助我们:

  • 了解趋势
  • 发现机会
  • 避免威胁

业界普遍将CEP应用在:

  • 商业活动监控(BAM)
  • 发掘群众智能
  • 避免网络攻击
  • 预防金融犯罪
  • 实施系统动态校验
  • 其他……

支付宝大量使用CEP用于防止犯罪(如网络诈欺、网络攻击、洗钱)和资金损失,并了解各种业务的现状、协助营销。支付宝使用外部厂商的CEP系统,也自行开发CEP系统。

目前知名的CEP产品来自Tibco、IBM、Oracle、StreamBase、Sybase等。微软也即将推出名为StreamInsight的CEP产品。

很有意思的是StreamBase与StreamInsight这两个CEP产品名称,刚好是CEP的三个关键字:Stream、Base、Insight。同时具备这三点才能算是CEP。这三个关键字的意义解释如下:

  • Stream

– 连续不间断

– 实时处理

  • Base

– 资料量大

– 数据库

  • Insight

– 有用的信息

– 智能

CEP关键技术

CEP的关键过程包括:

  • 格式化:将外部事件转成内部能处理的格式;
  • 预处理:将事件依据字段内容进行处理;
  • 模式侦测:将数个事件之间关联起来,找出复合事件;
  • 事件发派:将复合事件发送到相应的处理模块;
  • 报警:对严重的事件进行处置。

[caption id="attachment_3277" align="aligncenter" width="300" caption="图1 CEP关键模块"]图1 CEP关键模块[/caption]

如图1所示,CEP系统中比较关键的模块有八个,分别是:

1. EPL解析器:在CEP系统中,描述如何将基础事件合成复合事件的语言,称为EPL(事件处理语言)。EPL需要被解析成CEP引擎能理解的语言。

slots online australia "宋体";">2.  规则管理:管理EPL。

3. 事件接入:通过SOA、ESB、MOM、读取日志等方式将消息接入。

4. 预处理:将事件依据字段内容进行处理。

5. CEP引擎:找出事件关联。

6. 数据模型:维护内部数据。

7. 事件发派:将已经发现的复合事件发派到负责处理的行动模块中。

8. 行动模块:对复合事件采取行动 。

此外,CEP系统的辅助工具有:

  • 规则制作工具
  • 报表输出工具
  • 实时仪表板

上述的八个CEP关键模块中,有四个值得详细说明:EPL解析器、预处理模块、CEP规则引擎、数据模型。

EPL是用来描述复合事件的语言,会被EPL解析器处理,成为内部可以使用的规则。EPL许多都扩展自SQL(微软的扩展自LINQ),底层的数据模型都是数据库,所以EPL解析器做的就是将EPL转成SQL,通常会使用到数据库的Trigger、Stored Procedure等机制。

预处理模块会将事件送进CEP引擎之前预先做处理,包括字段过滤、字段填入、事件过滤、事件分流、事件合流等。请注意:预处理过程一定需要读取事件内容,然后根据事件内容做处理(但不会将事件关联起来,因为这是CEP引擎的工作)。建议这个模块内部采用管线(pipeline)的架构方式,使用上会更灵活。

[caption id="attachment_3278" align="aligncenter" width="300" caption="图2 复合事件规则引擎表示例"]图2 复合事件规则引擎表示例[/caption]

最后来看最重要的两个模块:规则引擎与数据模型。现在的CEP规则引擎几乎都采用数据库表当做底层数据模型。事件会先进入数据库,一定时间(或数量)之后进行检查,若符合规则,就找到了复合事件,将此复合事件放进另一个表中。以图2为例,外部事件根据类型的不同,分别被放进A、B、C三个表中。A与B表可以侦测出复合事件,放进D中。C与D表可以侦测出复合事件,放进E表中。

[caption id="attachment_3280" align="aligncenter" width="300" caption="图3 规则分解示例"]图3 规则分解示例[/caption]

图3所示,要找到一个有用的复合事件,必须把规则写成许多片段的规则,像是河流的上下游,渐渐汇集成最终有用的复合事件。有些CEP系统允许事件逆流而上,更具有使用上的弹性。

何时扫描数据库表?一般支持定量扫描或定时扫描。扫描事件的方式分滑动或跳跃(也称为批处理)。滑动会连续进行,跳跃则是将事件分批处理。一般来说,滑动方式较耗费计算资源。

支付宝总督CEP

总督系统是支付宝全新打造的一套CEP,与一般CEP最大的差异是,底层不是数据库,而是状态机。

其他CEP系统往往有这些缺点: 无法(或难以)描述相当复杂的复合事件;事件格式受到资料库表 schema的限制,无法自由扩展;需要大量的存储。

总督CEP以状态机引擎为核心,搭配独特的算法,完全解决这三个问题。

各种CEP应用蓄势待发

目前的CEP市场相对小,只有少数企业采用相关技术。随着对信息的重视,CEP的应用势必越来越广。通过这篇文章,希望让大家重视事件和使用CEP。我相信,只要使用得宜,CEP一定可以帮助企业在复杂多变的商业环境中找到机会、躲避威胁。

作者简介:

蔡学庸蔡学镛,台湾台南人,毕业于台湾清华大学Computer Science研究所,现任阿里巴巴支付宝架构师,负责新系统的开发。

(本文来自《程序员》10年06期,更多精彩内容敬请关注06期杂志)

Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐