随着企业信息化的进一步深入,企业产生大量的实时数据(比如证券市场的交易数据,电力行业的探测数据),用关系型数据库处理这些大量的实时数据,已经力不从心了。更重要的是,企业需要从这些大量的实时数据里面,及时发现、挖掘一些有意义的数据,比如证券市场那些交易有违规操作的嫌疑,如果对某些交易存在嫌疑,需要进一步跟踪观察,进而进行人工干预。这样的需求,用关系型数据库去解决,需要将所有的数据导入到库中后,用统计分析工具去分析,虽然也能得到部分有意义的数据,但是无法保证实时性,无法对部分有意义数据的出现做出及时处理。
基于以上的需求,出现了复杂事件处理( CEP)的概念,随之也出现了不少 CEP的产品,这其中,比较著名的产品有: Tibco Business Event, IBM CEP, Oracle CEP。 CEP认为任何事情的发生可以认为是一个“事件”,事情的发生产生一项数据,那么一项数据也可以认为是一个“事件”,证券市场的一个交易是一个事件,传感器探测一次数据,也是一个事件。这些事件有共同点:数据量特别庞大、流式数据、永不止境。这些事件,多数是我们不关心的,我们认为无意义的。我们需要的是从这些大量的无意义的事件中,找出对我们有意义的单个事件或者事件组合,比如可疑交易数据(和正常交易价格有很大出入的多笔交易),我们理解这些找出的单个事件或者事件组合为有意义事件,认为是事件发生,把发现这个有意义事件为复杂事件处理。 CEP通过规则,从不同的事件源中找出相关的事件组合(发生事件),并对发现的做进一步处理(处理发生事件)。
通常的 CEP,实现方式如下:
大量的实时数据作为事件源接入事件处理总线 , CEP引擎通过指定的规则,处理这些实时数据和缓存的历史数据(缓存的目的是解决发现一些跨时间的事件,比如分析多次交易看是否可疑)。
如果根据规则,发现事件后,需要做进一步处理:
发现事件后, CEP调用相应的业务流程,比如启动证券交易中违规交易的告警流程,然后结束 CEP的一个处理周期。
CEP不光是能够及时发现事件,更重要的是,它具有逻辑推理,对下次事件发生能做一个较为准确的预测。
综上, CEP适合处理大量的、多个数据源的实时数据,并对这些实时数据做处理得出实时的结果。