且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

一种支持细粒度时间限定的分布式CEP模型

更新时间:2022-08-22 19:34:13

背景

传统CEP(复杂事件处理,Complex event processing)引擎功能较为单一,往往仅是NFA(非确定有穷自动机,Non-deterministic finite automaton)基本功能连接、或和闭包的简单堆积。当前,随着移动设备的大范围普及,数据量越来越大,而传统CEP引擎对应的NFA只能运行在单台机器上,处理性能不能横向扩展。

本文针对CEP引擎对应的NFA增加了“不发生” 及细粒度时间管理功能,扩展了CEP引擎的应用场景。并且将CEP引擎部分功能实现了并行化,提升了CEP引擎的整体处理性能,实现了一种支持复杂事件处理的分布式匹配模型。

怎么实现的?

   A)自动机构建,用于构建扩展了“不发生”功能的复杂事件处理模型对应的非确定性自动机。本步骤通过CEP包含的四个基本函数(连接、或、闭包、不发生)组合成功能复杂的自动机。

连接函数表示当前事件满足某种特定条件即可由当前状态跳转到目的状态,此函数由事件触发。

或函数表示两个状态的跳转条件包含多个,只需要满足其中一个即可发生状态跳转。此处的跳转条件可以是连接函数、或函数、闭包函数和不发生函数四类基本函数或组合函数,此函数由事件触发。

闭包函数表示单个状态可以循环无数次,只要满足跳转条件即可,此函数由事件触发。

不发生函数表示“所有事件”或“符合特殊条件的事件”没有发生,此函数由事件或者时间触发。

事件条件支持复杂的算术、逻辑、比较和字符串校验等基本运算,目的是为了定位事件的独特类型。

为了满足事件分组处理,此自动机还支持按照上述事件条件分组的功能。由于没有发生的事件不能被分组,因此只包含不发生函数的自动机的前驱不能为分组函数。

同时,为了简单起见,不允许组合函数内部自定义时间限定,只允许自动机的顶层“单个函数”或“多个函数组合而成的连接函数”才允许设置时间限定。并且,自动机的窗口时间定义为顶层函数所有算子的时间之和。

告警触发频次通过控制自动机的触发模式和滑动时间来实现。如果触发模式为事件,则每来一个事件均需判断是否会触发告警,此触发模式实时性较高。如果触发模式为时间,则通过滑动时间控制触发告警的时间间隔,如果滑动时间参数为空或超出窗口时间,则将滑动时间预置为窗口时间,即表示为滚动触发模式。

自动机实例参照附图

一种支持细粒度时间限定的分布式CEP模型

                             

   B)分布式调度,分析自动机并将其函数调度到分布式计算机系统。本步骤在保证自动机语义正确性的前提下,以提升引擎的并行性。

传统CEP算子(例如:Flink CEP)往往作为一个独立的运行单元,只能串行执行,具有处理性能低和横向扩展差的缺点,不能满足海量数据业务场景。复杂事件处理CEP非常高频的一个操作是通过条件判断定位特定类型的事件,此操作往往贯穿CEP引擎的全部流程,将此操作并行化能够显著提升CEP引擎的执行效率。

按照是否存在分组函数,可以将分布式调度模型分为两类。

第一类是不包含分组函数的简单调度模型,此模型由数据源Source、类型判别器Filter、核心处理器CEPOperator、目的地Sink依次组成。此模型,Source、Filter和Sink均可并行执行,CEPOperator为串行执行。同时,当多条CEP规则同时运行在同一个分布式计算机系统时,需要将“核心处理器CEPOperator”较为均衡的分配到各个处理单元。

第二类是包含分组函数的复杂调度模型,此模型由数据源Source、类型判别器Filter、分组器GroupBy、核心处理器CEPOperator、目的地Sink依次组成。此模型,Source、Filter、CEPOperator和Sink均可并行执行。GroupBy表示Filter和CEPOperator之间的数据流,通过网络栈实现,不是实际的计算执行算子。

简单调度模型参照附图

一种支持细粒度时间限定的分布式CEP模型

                        

复杂调度模型参照附图

一种支持细粒度时间限定的分布式CEP模型

                                 

   C)运行时触发,由于增加了细粒度时间限定,不同应用场景下,各类函数的运行触发机制具有特殊性。

    为了保证CEP的正确性,事件的顺序非常重要。本发明支持事件时间和系统时间两种。当时间为系统时间时,事件到来的先后顺序即为正确顺序,无需做特殊处理。当时间为事件时间时,为了保证事件的顺序,采用了水位线和延时机制,新事件首先放到有序队列中,只有小于水位线的事件才会被处理,对于晚到的数据则直接丢弃。

    “所有事件不发生”和“符合特殊条件的事件不发生”实现机制不同。“所有事件不发生”无需特殊处理,只需扫描公共的有序队列既可以。“符合特殊条件的事件不发生”事件类型需要采用特有的有序队列存储,当判断此类事件是否发生时,扫描此有序队列即可。

    当自动机只包含“不发生”函数,且时间类型为事件时间时,事件可能永远不会到来,因此需在CEP启动时,即可运行对应的定时器。

    当“不发生”函数出现在自动机的末尾,且时间类型为事件时间时,事件可能永远不会到来,为了及时告警,也需在CEP启动时,即可运行对应的定时器。

    当“不发生”函数出现在自动机的开头,且时间类型为事件时间时,需要满足此“不发生”函数的限定时间才能触发,如果小于此限定时间则不予触发。

有哪些实际价值?

1)功能丰富:新增了“不发生”基本算子及细粒度时间管理功能,丰富了异常检测的业务场景。

2)执行速度快:并行化了高频的事件判定模块及核心的事件处理模块,适配分布式计算机系统,提高了事件处理速度。

具体的应用场景?

复杂事件处理CEP技术广泛应用于网络安全异常检测领域。网络带宽和流量的急剧提升,对复杂事件处理CEP引擎的性能要求越来越高。最近一段时间没有收到某台服务器心跳日志,则表明此服务器出现了死机或者网络不通的异常现象,由此传统CEP引擎不支持的“不发生”是一个重要的异常检测应用场景。如何实现一个包含“不发生”功能的分布式CEP引擎,针对网络安全异常检测领域是一个亟需解决的问题。

通过本发明,采用增加“不发生”基本算子及细粒度时间管理功能,并行化事件判定模块,实现了一种支持复杂事件处理的分布式自动机,具有更广泛的异常检测功能,加快了数据处理速度,提升了CEP引擎的横向扩展性,能较好的应用于海量数据场景。