对实时信息分析和处理,常常需要客户应用程序的开发相应功能。一般地,这些功能需要提供以下的处理流程,分析获取的数据,筛选数据,提取出有用的信息,然后将其通过特定的形式展现出来。由于具体实时信息的高并发性和高吞吐量的需求,这就需要客户应用程序具有高度扩展性和响应能力,而在数据处理领域。NEsper就是一个.NET 开源的针对此类问题的事件流处理解决方案,其目的在于简化有此需求的客户应用程序的开发。
1.1.CEP与事件流
NEsper 的目的在于为应用程序提供分析和响应事件的要求。典型的应用需求如下
• 业务流程管理和自动化。(提供流程监控,异常报告)
• 财务(算法交易,欺诈检查,风险管理)
• 网络及应用程序监控(入侵检测,SLA(Service Level Agreement)监控)
• 传感器网络应用(RFID 读取,生产线调度和控制,空中交通)
这些应用的共同特点是,有实时或类实时事件处理的需求,有时也称为复杂事件处理和事件流分析。其业务事件具有吞吐量,延时性及业务的复杂性等关键因素。
• 高吞吐量 - 处理大量的消息(1000至100K每秒的消息之间的应用程序)
• 低延迟 - 应用在实时条件下发生的(从几毫秒到几秒钟)的反应
• 复杂的计算 - 应用程序根据规则检测相关事件,过滤事件,将对满足条件的事件加入基于时间的事件流或基于窗口期的事件流中,当事件离开时触发相应的操作。
NEsper的事件引擎就是用于构造此类应用需求,并能扩展复杂事件处理。
1.2.CEP与关系数据库
关系数据库和结构化查询语言的目标在于处理相对静态的并且有复杂查询要求的应用系统的数据要求。因此大部分的这类数据库(基于内存的数据库除外)将数据存储在硬盘上。因此对其优化往往在于硬盘存取访问的优化。
应用程序常常利用查询来获取数据库中的数据。如果应用程序需要每秒10次查询数据,那么必然产生相应频繁的数据查询。对于每秒成百上千的大规模的请求,这种方式并非表现的很优秀。
数据库的触发器可以对的更新操作作出相应响应。然而数据库的触发器会很慢,并且不能轻松的对复杂条件进行逻辑检测和响应。
相比传统的关系数据库,在查询性能方面基于内存的数据库可能会更适合复杂事件处理应用程序。然后内存的数据库并没有针对此类查询性能需求方面有所优化。
1.3.NEsper引擎
NEsper 的工作原理有些类似数据库倒置。与传统的先存储后查询数据的方式不同。NEsper引擎预先设置查询条件,然后让实时数据通过这些查询条件,引擎抓取符合条件的数据,这种查询是连续不断的。
它提供两种方式处理这些事件,事件模式和事件流查询。
NEsper提供基于表达式的事件匹配规则。模式匹配引擎是一个状态机的实现。这种事件处理的方式是对于到达或离开的事件,进行匹配和处理。他基于时间窗口的事件流。
同样NEsper提供了另外一种方式。这种基于窗口事件流,他提供聚合,连接,分析函数,来处理这些复杂的事件。对过EPL(NEpser定义的一套类sql的语法 )查询这个事件窗口。获取满足条件的事件。EPL语言类于SQL,但是与sql也不同。在EPL中查询基于视图而非表。视图提供许多操作,用便能从事件流中获取相应的数据。
NEsper提供了相应的API,支持以上两种方式 。
1.4所需的第三方包
NEsper 的运行环境需要以下的第三方包
• ANTLR EPL syntax.的生成和解释工具, 在编译环境时需要可以访问: http://www.antlr.org 。
• CGLIB 基于. The Apache 2.0 许可的开源字节码的动态生成工具。
• Apache Log4Net 开源日志工具。
NEsper 其他编译和测试环境需要的第三方包
• NUnit 基于.NET的优秀单元测试框架。
• MySQL /SQL Server:Nesper 的 sql测试套件。
本文来自云栖社区合作伙伴“doNET跨平台”,了解相关信息可以关注“opendotnet”微信公众号