复合事件处理CEP简介
什么是复合事件处理?
这是一个IT事件爆发的时代,各种IT系统之间或系统内部,每天产生大量事件。系统在关键点打日志、系统之间交流信息,都是事件。但我们对这些事件往往视而不见,当成垃圾一股脑儿全扔了。其实只要处理得当,垃圾也可以变成资源。
复合事件处理(CEP,Complex Event Processing)是一种基于动态环境中事件流的分析技术,事件在这里通常是有意义的状态变化,通过分析事件间的关系,利用过滤、关联、聚合等技术,根据事件间的时序关系和聚合关系制定检测规则,持续地从事件流中查询出符合要求的事件序列,最终分析得到更复杂的复合事件,主要用于网络诈欺识别等防止犯罪,银行等金融行业防止,以及风险规避和营销决策等。
首先,CEP是一种框架。和其他框架一样,它也提供了一套流程或一种标准。CEP提供的则是一套处理复合事件(complex event)的流程。其次,CEP的特点和核心能力在于可以便捷地处理复合事件。CEP之所以有这样的能力,是由于它可以处理多输入对多输出的映射关系,“复合(complex)”也正是相对于传统的单一输入和单一输出而言的。CEP多个输入之间的关系可以是独立的,也可以是相关的,它的多个输出亦是如此。举个例子:
输入:
- 皮肤感觉温度下降
- 鼻子感觉湿气很重
- 耳朵听到远方雷声
- 眼睛看到乌云闪电
判断模块得出结论:即将下雨
输出:
- 把衣服收到屋内
- 出门要带伞
最后,CEP天然拥有强大的可扩展性(Scalability)。因为输出可以很方便的转化为下一个系统的输入,所以可以用串联、级联等多种方式连接不同的CEP系统,从而组合成一个复合系统,以应对复杂的业务需求。
复合事件处理过程包括:
- 格式化:将事件获取模块得到的事件信息转化为内部处理的形式
- 预处理:将事件按照字段内容进行处理
- 模式侦测:将数个事件复合起来,找出复合事件
- 事件发派:将复合事件发送到相应的处理模块
- 执行动作:处理模型按照事件状况执行相应的动作
复合事件处理系统中的关键模块:
- EPL解析器:复杂事件处理系统中EPL语言被解析器解析为处理引擎能理解的语言(类SQL解析器)。
- 规则管理:管理EPL。
- 事件接入:通过SOA、ESB、MOM、读取日志等方式将消息接入。
- 预处理:将事件依据字段内容进行处理。
- CEP引擎:找出事件关联。
- 数据模型:维护内部数据。
- 事件发派:将已经发现的复合事件发派到负责处理的行动模块中。
- 行动模块:对复合事件采取行动。
此外,CEP系统的辅助工具有:
- 规则制作工具
- 报表输出工具
- 实时仪表板
事件应该包含一些基本的要素:类型、发生事件以及更多的一些定义属性。通常需要关联多个事件进行分析处理,其中事件间的关系主要有5种:
- 时间顺序关系:动作事件和动作事件之间,动作事件和状态变化事件之间,都存在时间顺序。
- 聚合关系:动作事件和动作事件之间,状态事件和状态事件之间都存在聚合关系。即个体的聚合形成整体集合。
- 层次关系:动作事件和动作事件之间,状态事件和状态事件之间都存在层次关系,即父类事件和子类事件的层次关系,从父类到子类是具体化,从子类到父类是泛化。
- 依赖关系:事物的状态属性之间彼此的依赖关系和约束关系。
- 因果关系:对于完整的动作过程,结果状态为果,初始状态和动作都可以视为原因。类比哲学上论述事物如何发展也是有两个因素的,一是内部本质,二是外部作用。
复合事件处理面临的挑战:
- 减少应用存储数据(在分析数据之前)造成的延迟
- 能够持续,实时地分析多个数据流
- 能够关联不同数据流中的事件,从而发现新的相关情形
- 能够迅速响应新发现的危险或机会
- 能够迅速的将先前发现的规律应用到新的数据流分析模型中
- 能够利用已有的应用开发能力快速开放新的高性能,高扩展度的应用
- 确保应用和系统的连贯性。
CEP 依赖下面的一组技术:
- Event-pattern detection 事件模式
- Event abstraction 事件抽象
- Event filter 事件过滤
- Event aggregation and transformation 事件聚合和传输
- Modeling event hierarchies 模型化事件层次结构
- Detecting relationships (such as causality, membership or timing) between events 事件间关系检测(比如因果、从属或者时间先后等)
- Abstracting event-driven processes 事件驱动过程抽象
事件处理语言(EPL,Event processing language)用于系统中制定和查询感兴趣的事件序列,通常是类SQL的语句,从SQL语句中扩展而来。
相关开源项目:
- Esper: http://www.espertech.com/esper/
- Drools Fusion: http://www.drools.org/
- FlinkCEP: https://ci.apache.org/projects/flink/flink-docs-stable/dev/libs/cep.html
- Siddhi: https://github.com/wso2/siddhi
- EventStore: https://github.com/EventStore/EventStore
CEP和实时计算有什么关系
实时计算也是一种框架,负责提供低延迟的计算服务,这样就给人一种“实时”的感觉,它本身并不关心被计算的是什么。大部分实时计算框架采用了流式(stream)计算的方法,是因为该方法可以很好地满足实时计算的设计需求。CEP和实时计算其实是属于两个不同领域的框架,但两者在业务和具体实现的需求下,紧密地结合到了一起。CEP只是提供了一种处理复合事件的框架,并没有对时效性做严格要求。我们也可以用传统技术实现CEP系统,只不过从事件发生到结果获取,再到采取行动,中间的延迟很大。而我们通常希望降低这种延迟,来获取更大的业务价值。实时计算恰恰提供了一种低延迟的计算服务,所以多数CEP系统在实现其计算模块时采用了实时计算的技术。
再者,如同前面提到的,CEP较佳的设计模式是管线架构设计。这种设计可以让事件像水一样流过各个处理模块,它和实时计算的流式计算非常相似。基于这个共同点,CEP和实时计算紧密地结合在一起。总的来说,我感觉两者的关系是:实时计算提供了一种底层的计算服务,CEP可以架构其上。
CEP应用案例:滴滴
实时营销
- 地理围栏
- 乘客线上冒泡1min内没有发单
- 乘客下单后2min内没有被司机接单
- 乘客在不同业务线之间的比价行为
异常检测(事后回溯->提前干预)
- 司机开始计费后12小时还未更新成下一状态
- 企业级乘客2min内连续重复发送3个以上订单
- 同一用户5min内重复进线5次
- 订单超时未支付
The post 复合事件处理CEP简介 appeared first on 标点符.
Related posts: