事件驱动的应用架构和应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
事件 (Event) 是有意义的状态变化: a signifi cant change in state
股票价格的变化 密码变更 最后一次服务的响应时间 XML POJO Key-value 对
事件在系统中的表述
事件的基本特征
不只是“发生什么事情” 意发生事件的不可变记录 事件要素:标识、发生时间,有意义的属性 事件间可能有某种关联:时间顺序、因果关系
事件处理中间件原理和应用
Event-Driven Application Server
李志强 (li@talkweb..com.cn) 湖南拓维信息系统股份有限公司 研发中心 2008/07/22
主要内容和目的
学习、研究事件流 (Event Stream) 和负责事 件处理 (ESP/CEP )的基本概念 理解事件驱动应用服务器的角色和基本原理 基于 Esper 的应用和开发
事件例子
RFID 设备跟踪
位置信息
设备标识 X Y 基站信息变更 根据用户的位置的变更,定向推送所在区域的服务信 息:商场、电影院、公交站 . 统计/分析用户的日常行为规律。
Use-case
EDA 基本原理
EDA(Even-Driven Architect) 松耦合 基于事件 基于消息排队的架构 异步通讯 事件处理模型
API 概述
EPServiceProvider
引擎 线程 时间 流 Statment/Queries 事件查询语言 :EQL Listener POJI
EPStatement:
UpdateListener:
事件
事件可以是:
POJO Key-value 对 (java.util.map) XML(org.w3c.dom.Node)
服务正交相关 监控
EDA
基于消息传递,松耦合
EDA VS SOA
EDA :“发布/订阅”
通过特定模式来对业务事件作出响应 通常耦合度比较低 允许传递粗力度的事件
SOA :请求/响应
结合 SOA 和 EDA
SOA
垂直( Vertical )系统的请求/响应处理 横向( Horizontal )系统通讯
各类大数据量、高实时性系统
金融分析 RFID 事件处理 流程监控 位置服务 欺诈检测
基于 JAVA 的 EDA
SEP
JMS ESB 无相关标准 有产品: IBM 、 Weblogic , Esper
ESP&CEP
JMS
点对点
JMS
发布订阅
ESB ( Enterprise Service Bus )
定义时钟来监控事件的发生:
A 事件后等待 10 秒 :A -> timer:interval(10 seconds ) 每 5 分钟 every timer:at(5, *, *, *, *)
timer:at
Events: – A1 B1 C1 B2 A2 D1 A3 B3 E1 A4 F1 B4 • pattern [ every A -> B ] – {A1,B1}, {A2,B3}, {A3,B3}, {A4,B4} • pattern [ every ( A -> B ) ]:„ 子表达式“ – {A1,B1}, {A2,B3}, {A4,B4}
EDA 需求
事件流:
高吞吐量 高可靠性 低延迟 事件关联
提供有力的建模语言
事件处理
简单事件处理( SEP ): Simple Eent Processi ng 事件流处理( ESP ): Stream Eent Processin g 复杂事件流处理( CEP ): Complex Eent Pro cessing
Esper EQL/EPL
事件过滤
// Filter for location report by location rectangle select * from LR(x in [4:10], y in [6:12])
滑动窗口和聚合
// Count all assets reporting zone 10 in last 30 sec select count(*) from LR(zone=10).win:time(30 sec)
轮询数据库 浪费大量数据空间 实现复杂,不能简洁的实现临时逻辑和关联事件的因 果关系等。 非标准的 event-processing language 未对临时数据流的优化 不能连续处理事件流
分布式缓存或 JINI 网络空间
规则引擎 (Rule engines) + JMS
什么是事件
例子 : 温度检测
温度传感器探测:
采样样本 Sample :温度,传感器标识
需求:探测温度,如果温度过高就告警 告警条件:
同一个温度传感器在 90 秒内连续检测到 3 次温度超 过 50 度
CEP
every sample= Sample(temp > 50) -> ( ( Sample(sensor=sample.sensor, temp > 50) and not Sample(sensor=sample.sensor, temp <= 50) ) -> ( Sample(sensor=sample.sensor, temp > 50) and not Sample(sensor=sample.sensor, temp <= 50) ) ) where timer:within(90 seconds)
引擎 (Engine) :独立单元(时间、线程、事件 流) 基本语句 (Statements) : Event processing Lan guage(EPL ) 事件处理器 (Listener): 简单 java interface
Epser 产生事件
事件发送
import net.esper.client.*; // Get the same engine instance EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(); EPRuntime runtimeEngine = engine.getRuntime(); ... LocationReport event = new LocationReport(assetId,x,y,zone); runtimeEngine.sendEvent(event);
指定数量范围内的事件
CEP 查询
定义事件匹配模式 标识复杂事件流 模式关键词
模式
周期性/重复性 :every 逻辑操作 :and 、 or 、 not 跟着发生: -> 子查询条件表达式 :timer:within
5 秒内的所有 A 或 B 事件 ( A or B ) where timer:within (5 sec) timer:interval:
EDA :
EDA
问题场景
需要实时、连续地分析数据,并根据历史数据处 理模式来自动检测、发现问题 高实时性:低的处理、分析、响应延迟 大数据量:
巨量数据:每秒超 100000 个请求(事件) 超过通常使用的 OLTP 系统的处理能力
高事务数:
百度文库
事件处理实现方案对比
数据库
Events: – A1 B1 C1 B2 A2 D1 A3 B3 E1 A4 F1 B4 • pattern [ A -> every B ] – {A1,B1}, {A1,B2}, {A1,B3}, {A1,B4}, pattern [ every A -> every B ] – {A1, B1}, {A1, B2}, – {A1, B3}, {A2, B3}, {A3, B3}, – {A1, B4}, {A2, B4}, {A3, B4} and {A4, B4}
处理模式
连续处理 结果集发生改变时通知 Listerners
新的事件到达 旧事件超出结果集/范围
内建数据库
EQL(EPL)
类 SQL 语法
流 streams: 表 事件 Event: 记录 事件属性 Event Attributes: 记录字段 ESP 查询 CEP 查询
Esper sample
ESP/CEP Statement ( EPL)
/ A statement can produce implicit events insert into CountZone select zone, count(*) as cnt from LocationReport.std:unique('assetId') where assetId in (1, 2, 3) group by zone
目录
事件和事件处理 Esper DEMO 总结 Q&A
Esper 简介
基于 JAVA 的 ESP / CEP 容器
轻量级、可嵌入 开源 包括 ESP 和 CEP 商业支持 被广泛集成到商业产品 : weblogic event server
项目背景
Esper 架构
查询 Query :
ESP 查询
单个事件: select * from Withdrawal 时间窗口(范围)内的事件 : select count(*) from Withdrawal(zone=10).win:time (30 sec) 批量处理:在通知 Listener 前累积事件,一次通知
简单事件处理( SEP )
基于单个事件 单个事件触发响应 通常采用:
JMS
Queue: 点对点 Topic :发布/订阅 channel , pipe , router etc.
EAI 模式:
事件流处理 (ESP)
基于“流”的处理 单个时间不会触发“反应” 需要分析事件流
Esper sample
Listener and Engine
import net.esper.client.*; // Get engine instance and register statement EPServiceProvider engine = EPServiceProviderManager.getDefaultProvide r(); EPStatement statement = engine.getEPAdministrator().createEQL ("..."); // Attach a listener statement.addListener(new UpdateListener() { public void update(EventBean[] newEvents, EventBean[] oldEvents) { // Handle complex event ... }
目录
事件和事件处理 Esper DEMO 总结 Q&A
历史背景
SOA&EDA 集成项目发展趋势 主要问题:
网络不可靠 网络带宽不够 应用差异大 变更不可避免
EAI 解决方案
文件传输 共享数据库 远程过程调用 面向消息
从体系结构的角度
SOA
服务本质上是远程调用:点对点通讯 增加复杂度,难以管理
基于时间累积 :select * from Withdrawal.win:time_batch(4 sec) 基于数量累积 :select * from Withdrawal.win:length_batch (5) Select * from Withdrawal.win:length(5)
各种滑动窗口:
基于时间 基于事件数量
复杂事件处理( CEP )
复杂事件:大量其他事件触发的事件 基于“事件流”的处理 需要对多个事件 ( 流)作复杂的分析
分析、发生模式:
过滤 集合 相关 时间关联、 因果关系、 空间 etc.
事件关联:
ESP 适用场景
股票价格的变化 密码变更 最后一次服务的响应时间 XML POJO Key-value 对
事件在系统中的表述
事件的基本特征
不只是“发生什么事情” 意发生事件的不可变记录 事件要素:标识、发生时间,有意义的属性 事件间可能有某种关联:时间顺序、因果关系
事件处理中间件原理和应用
Event-Driven Application Server
李志强 (li@talkweb..com.cn) 湖南拓维信息系统股份有限公司 研发中心 2008/07/22
主要内容和目的
学习、研究事件流 (Event Stream) 和负责事 件处理 (ESP/CEP )的基本概念 理解事件驱动应用服务器的角色和基本原理 基于 Esper 的应用和开发
事件例子
RFID 设备跟踪
位置信息
设备标识 X Y 基站信息变更 根据用户的位置的变更,定向推送所在区域的服务信 息:商场、电影院、公交站 . 统计/分析用户的日常行为规律。
Use-case
EDA 基本原理
EDA(Even-Driven Architect) 松耦合 基于事件 基于消息排队的架构 异步通讯 事件处理模型
API 概述
EPServiceProvider
引擎 线程 时间 流 Statment/Queries 事件查询语言 :EQL Listener POJI
EPStatement:
UpdateListener:
事件
事件可以是:
POJO Key-value 对 (java.util.map) XML(org.w3c.dom.Node)
服务正交相关 监控
EDA
基于消息传递,松耦合
EDA VS SOA
EDA :“发布/订阅”
通过特定模式来对业务事件作出响应 通常耦合度比较低 允许传递粗力度的事件
SOA :请求/响应
结合 SOA 和 EDA
SOA
垂直( Vertical )系统的请求/响应处理 横向( Horizontal )系统通讯
各类大数据量、高实时性系统
金融分析 RFID 事件处理 流程监控 位置服务 欺诈检测
基于 JAVA 的 EDA
SEP
JMS ESB 无相关标准 有产品: IBM 、 Weblogic , Esper
ESP&CEP
JMS
点对点
JMS
发布订阅
ESB ( Enterprise Service Bus )
定义时钟来监控事件的发生:
A 事件后等待 10 秒 :A -> timer:interval(10 seconds ) 每 5 分钟 every timer:at(5, *, *, *, *)
timer:at
Events: – A1 B1 C1 B2 A2 D1 A3 B3 E1 A4 F1 B4 • pattern [ every A -> B ] – {A1,B1}, {A2,B3}, {A3,B3}, {A4,B4} • pattern [ every ( A -> B ) ]:„ 子表达式“ – {A1,B1}, {A2,B3}, {A4,B4}
EDA 需求
事件流:
高吞吐量 高可靠性 低延迟 事件关联
提供有力的建模语言
事件处理
简单事件处理( SEP ): Simple Eent Processi ng 事件流处理( ESP ): Stream Eent Processin g 复杂事件流处理( CEP ): Complex Eent Pro cessing
Esper EQL/EPL
事件过滤
// Filter for location report by location rectangle select * from LR(x in [4:10], y in [6:12])
滑动窗口和聚合
// Count all assets reporting zone 10 in last 30 sec select count(*) from LR(zone=10).win:time(30 sec)
轮询数据库 浪费大量数据空间 实现复杂,不能简洁的实现临时逻辑和关联事件的因 果关系等。 非标准的 event-processing language 未对临时数据流的优化 不能连续处理事件流
分布式缓存或 JINI 网络空间
规则引擎 (Rule engines) + JMS
什么是事件
例子 : 温度检测
温度传感器探测:
采样样本 Sample :温度,传感器标识
需求:探测温度,如果温度过高就告警 告警条件:
同一个温度传感器在 90 秒内连续检测到 3 次温度超 过 50 度
CEP
every sample= Sample(temp > 50) -> ( ( Sample(sensor=sample.sensor, temp > 50) and not Sample(sensor=sample.sensor, temp <= 50) ) -> ( Sample(sensor=sample.sensor, temp > 50) and not Sample(sensor=sample.sensor, temp <= 50) ) ) where timer:within(90 seconds)
引擎 (Engine) :独立单元(时间、线程、事件 流) 基本语句 (Statements) : Event processing Lan guage(EPL ) 事件处理器 (Listener): 简单 java interface
Epser 产生事件
事件发送
import net.esper.client.*; // Get the same engine instance EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(); EPRuntime runtimeEngine = engine.getRuntime(); ... LocationReport event = new LocationReport(assetId,x,y,zone); runtimeEngine.sendEvent(event);
指定数量范围内的事件
CEP 查询
定义事件匹配模式 标识复杂事件流 模式关键词
模式
周期性/重复性 :every 逻辑操作 :and 、 or 、 not 跟着发生: -> 子查询条件表达式 :timer:within
5 秒内的所有 A 或 B 事件 ( A or B ) where timer:within (5 sec) timer:interval:
EDA :
EDA
问题场景
需要实时、连续地分析数据,并根据历史数据处 理模式来自动检测、发现问题 高实时性:低的处理、分析、响应延迟 大数据量:
巨量数据:每秒超 100000 个请求(事件) 超过通常使用的 OLTP 系统的处理能力
高事务数:
百度文库
事件处理实现方案对比
数据库
Events: – A1 B1 C1 B2 A2 D1 A3 B3 E1 A4 F1 B4 • pattern [ A -> every B ] – {A1,B1}, {A1,B2}, {A1,B3}, {A1,B4}, pattern [ every A -> every B ] – {A1, B1}, {A1, B2}, – {A1, B3}, {A2, B3}, {A3, B3}, – {A1, B4}, {A2, B4}, {A3, B4} and {A4, B4}
处理模式
连续处理 结果集发生改变时通知 Listerners
新的事件到达 旧事件超出结果集/范围
内建数据库
EQL(EPL)
类 SQL 语法
流 streams: 表 事件 Event: 记录 事件属性 Event Attributes: 记录字段 ESP 查询 CEP 查询
Esper sample
ESP/CEP Statement ( EPL)
/ A statement can produce implicit events insert into CountZone select zone, count(*) as cnt from LocationReport.std:unique('assetId') where assetId in (1, 2, 3) group by zone
目录
事件和事件处理 Esper DEMO 总结 Q&A
Esper 简介
基于 JAVA 的 ESP / CEP 容器
轻量级、可嵌入 开源 包括 ESP 和 CEP 商业支持 被广泛集成到商业产品 : weblogic event server
项目背景
Esper 架构
查询 Query :
ESP 查询
单个事件: select * from Withdrawal 时间窗口(范围)内的事件 : select count(*) from Withdrawal(zone=10).win:time (30 sec) 批量处理:在通知 Listener 前累积事件,一次通知
简单事件处理( SEP )
基于单个事件 单个事件触发响应 通常采用:
JMS
Queue: 点对点 Topic :发布/订阅 channel , pipe , router etc.
EAI 模式:
事件流处理 (ESP)
基于“流”的处理 单个时间不会触发“反应” 需要分析事件流
Esper sample
Listener and Engine
import net.esper.client.*; // Get engine instance and register statement EPServiceProvider engine = EPServiceProviderManager.getDefaultProvide r(); EPStatement statement = engine.getEPAdministrator().createEQL ("..."); // Attach a listener statement.addListener(new UpdateListener() { public void update(EventBean[] newEvents, EventBean[] oldEvents) { // Handle complex event ... }
目录
事件和事件处理 Esper DEMO 总结 Q&A
历史背景
SOA&EDA 集成项目发展趋势 主要问题:
网络不可靠 网络带宽不够 应用差异大 变更不可避免
EAI 解决方案
文件传输 共享数据库 远程过程调用 面向消息
从体系结构的角度
SOA
服务本质上是远程调用:点对点通讯 增加复杂度,难以管理
基于时间累积 :select * from Withdrawal.win:time_batch(4 sec) 基于数量累积 :select * from Withdrawal.win:length_batch (5) Select * from Withdrawal.win:length(5)
各种滑动窗口:
基于时间 基于事件数量
复杂事件处理( CEP )
复杂事件:大量其他事件触发的事件 基于“事件流”的处理 需要对多个事件 ( 流)作复杂的分析
分析、发生模式:
过滤 集合 相关 时间关联、 因果关系、 空间 etc.
事件关联:
ESP 适用场景