事件驱动的应用架构和应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 适用场景
相关文档
最新文档