深入浅出事件流处理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测试套件。

相关文章:

事件流处理框架NEsper for .NET

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏司想君

接受“不完美”:分布式事务学习总结

作为一个前端专业的人来说,对于事务的理解,一直停留在“要么都成功,要么都不成功”的小白阶段。既然自己将2018年定义为”深入理解“的一年,那么就从深入理解事务开...

2925
来自专栏CSDN技术头条

浅谈分布式事务

现今互联网界,分布式系统和微服务架构盛行。一个简单操作,在服务端非常可能是由多个服务和数据库实例协同完成的。在一致性要求较高的场景下,多个独立操作之间的一致性问...

20810
来自专栏微信公众号:Java团长

为什么多线程是个坏主意

在 Unix编程艺术 中,提到了尽量避免多线程编程模型, 认为这样只会增加复杂度, 提倡使用多进程, 这样本质上就可以避免多线程『共享内存数据』产生的 “cor...

862
来自专栏后端技术探索

高并发高性能分布式框架从无到有微服务架构设计分享

微服务架构模式(Microservice Architect Pattern)。近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注。

611
来自专栏魏琼东

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET平台开发指南 - 实现业务

业务分层         依据行业经验来看,分层是解决复杂问题的简单方法,通过分层,可以把一个复杂问题分解为不同层次应用的小问题,解决各层小问题的难度小于总的问...

17310
来自专栏携程技术中心

干货 | 携程App网络服务通道治理和性能优化

编者:本文作者为携程无线开发总监陈浩然。陈浩然,计算机博士,2008年iOS SDK发布后,投身移动互联网。先后在外企、创业型和国内一线旅游公司从事无线App的...

2645
来自专栏即时通讯技术

脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

本文接上篇《脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手》,继续脑残式的网络编程知识学习 ^_^。

672
来自专栏JAVA高级架构

基于分布式环境下限流系统的设计

前提 业务背景 就拿前些天的双十一的 “抢券活动” 来说,一般是设置整点开始抢的,你想想,淘宝的用户群体非常大,可以达到亿级别,而服务接口每秒能处理的量是有限的...

2705
来自专栏张善友的专栏

面向资源与面向活动的 Web 服务

每当一些 Web 应用服务提供方提出允许开发者集成他们的服务的 Web 服务 API 时,大家都非常关心由 API 实现的互操作设计模式。如果 API 使用的是...

1715
来自专栏IT技术精选文摘

使用API网关构建微服务

当您选择将应用程序构建为一组微服务时,您需要确定应用程序的客户端将如何与微服务器进行交互。使用单体应用程序,只有一组(通常是复制的,负载均衡的)端点。然而,在微...

2648

扫描关注云+社区