天天看点

程序员的量化交易之路(2)----Esper文档学习之技术概览(1)1. CEP和事件序列分析2. CEP和关系型数据库4. 需要的第三方库

在接下来的20个工作日中,我将坚持翻译或者略翻译esper的官方文档。

为什么需要学习esper,因为我们需要理解复合事件处理 complex event processing (cep)。在量化交易系统中,cep是必不可少的。它负责处理海量的实时事件。

关于cep更多知识,大家可以翻阅网络相关资料。我这里集中在学习开源的cep系统,esper。。

今天开始第一篇:技术概览。

esper引擎主要解决现实中某类应用对事件的分析和响应的需求。这类需求的典型代表有:

1)商业管理和自动化(商业事件监听,bam,异常事件紧急处理)

2)金融(程序化交易,欺诈检测,风险管理)

3)网络和应用的监管(入侵检测,sla监管)

4)传感网络应用(rfid读取,生产线的控制和调度,空中航线监管)

这类应用的共同点就是需要实时地处理事件event(消息message),或者至少是接近实时。这种系统也叫complex event processing(cep),或者事件序列分析。这类系统的关键特性是吞吐量、延迟性和复杂逻辑的需求。

1)高吞吐量 - 应用需要处理大量的事件(每秒处理1000至100k)

2)低延时 - 应用需要在事件发生时立即做出响应(从几毫秒到数秒内)

3) 复合计算 - 应用支持对事件的复杂处理,例如事件之间的模式(patterns among events),过滤事件(filter events),合并特定时间窗口或者长度窗口的事件,事件序列的合并,基于事件缺失的触发处理。

esper 引擎就是为了简化应用实现cep功能而生。

关系型数据库和sql语言主要是面向绝大多数数据是静态数据,大多数查询是简单查询的场景。大多数数据库也是将数据保存在磁盘上(除了in-memory 数据库),它们的优化也是针对磁盘存取的。

为了从数据库中获取数据,那么必须对数据库进行查询。如果应用每秒需要得到数据10次,那么势必触发10次数据库查询,这中方法很难扩展到每秒成千上万的查询量。

当数据的数据需要更新时,数据库的trigger会被激发,然后这种数据库触发器执行速度很慢,并且不擅长复杂的条件检测和逻辑处理。

in-memory数据库比传统的关系型数据库更适合cep应用,因为它具备更好的性能。但,它并没有为cep的实时查询结果以及事件序列分析进行设计和优化。

3. esper作为cep引擎

esper和关系型数据不一样的点在于,它并不保存数据,相反,它保存查询。而数据是通过查询来处理。当一个数据(event)来到时,它将通过我们预订的查询语句,决定下一个动作。

esper提供两种机制处理事件流:事件模板(event patterns)和事件流查询(event stream queries)

esper提供事件模板语言,用于基于表达式(expression-based)的事件模板匹配。模板匹配引擎是通过状态机来实现的。这种方法可以处理预料的事件序列、事件缺失和事件融合。它也提供了事件在时间方面上的相关性分析。

esper也提供了事件序列查询方法,用于满足cep应用对事件序列的分析需求。事件序列查询(event series queries)提供窗口(window),统计(aggregation),合并(join)和分析函数,用于处理事件流。这些查询遵循epl语法。epl有点类似与sql,但它是处理视图(view)的,而非表格(table)。视图,代表了对一个事件序列的处理以及产生新的事件序列。

esper 采用统一的api接口提供的这两种方法。

esper需要如下第三方库:

1)antl

2) cglib

3) apache commons logging ,log4j.

4)junit

5)mysql的连接库

本章完毕。。。