深入浅出事件流处理NEsper(一)

简介:

对实时信息分析和处理,常常需要客户应用程序的开发相应功能。一般地,这些功能需要提供以下的处理流程,分析获取的数据,筛选数据,提取出有用的信息,然后将其通过特定的形式展现出来。由于具体实时信息的高并发性和高吞吐量的需求,这就需要客户应用程序具有高度扩展性和响应能力,而在数据处理领域。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”微信公众号

目录
相关文章
|
8月前
|
存储 缓存 JavaScript
深入浅出 RxJS 核心原理(响应式编程篇)
在最近的项目中,我们面临了一个需求:监听异步数据的更新,并及时通知相关的组件模块进行相应的处理。传统的事件监听和回调函数方式可能无法满足我们的需求,因此决定采用响应式编程的方法来解决这个问题。在实现过程中发现 RxJS 这个响应式编程库,可以很高效、可维护地实现数据的监听和组件通知。
167 0
深入浅出 RxJS 核心原理(响应式编程篇)
|
2月前
|
消息中间件 存储 Apache
精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的事务性消息的底层原理并在分析其实际开发场景
事务消息(Transactional Message)是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ的事务消息提供类似 X/Open XA 的分布事务功能,通过事务消息能达到分布式事务的最终一致。
361 2
精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的事务性消息的底层原理并在分析其实际开发场景
|
存储 前端开发 Dubbo
响应式编程的实践
响应式编程的实践
响应式编程的实践
|
数据采集 消息中间件 XML
【Esper技术专题】一个简单的事件响应功能的案例(2)复杂事件处理引擎
【Esper技术专题】一个简单的事件响应功能的案例(2)复杂事件处理引擎
245 0
|
Java
【Esper技术专题】针对于Esper事件驱动框架的数据模型分析| 8月更文挑战
【Esper技术专题】针对于Esper事件驱动框架的数据模型分析| 8月更文挑战
209 0
|
弹性计算 数据可视化 API
EventBridge 事件领域重点特性介绍(一)| 学习笔记
快速学习 EventBridge事件领域重点特性介绍。
161 0
EventBridge 事件领域重点特性介绍(一)| 学习笔记
|
JSON 监控 机器人
EventBridge 事件领域重点特性介绍(二)| 学习笔记
快速学习 EventBridge事件领域重点特性介绍。
140 0
EventBridge 事件领域重点特性介绍(二)| 学习笔记
|
JavaScript 前端开发
【重温基础】20.事件
【重温基础】20.事件
103 0
|
消息中间件 Java 微服务
消息队列面试解析系列(六)- 异步编程妙用(下)
消息队列面试解析系列(六)- 异步编程妙用
145 0