简介
事件驱动是解决复杂应用依赖关系的主要架构思路,以异步分发事件模式将应用高度解耦,辅以复杂事件计算,增强事件覆盖领域,提高全行架构的高扩展性。
应用架构
事件中心包含三个角色,即事件生产者,事件处理器和事件消费者。整个模型与消息驱动类似,不同的是,事件中心处理器包含了三类事件处理实现,分别是简单事件处理器,复杂事件处理器和动态事件处理器。简单事件模式直接退化为消息驱动,只实现了系统解耦和消息分发;复杂事件处理器也叫静态事件处理器,是基于siddhi(西迪)构建复杂事件计算;动态事件处理器是基于现实业务问题抽象出来的解决框架,前期以问题驱动,面向业务问题,进行定制化开发,后期沉淀出一套具有通用逻辑和配置化体验的框架。
服务交互图
- 业务系统与事件中心通过消息队列通讯,事件中介根据eventName对消息进行分发到指定的事件通道
- 针对不同的事件类型,由具体的事件处理器对事件进行计算
- 处理好的事件结果,分发到订阅者监听的队列中
动态事件处理器
- 1、用户配置动态事件逻辑模板,动态事件处理器同步配置
- 2、业务系统订阅指定事件,动态事件处理器从逻辑模板实例化该事件的逻辑算子(规则)
- 3、业务系统实时产生事件流,动态事件处理器将事件与逻辑算子进行模式匹配,若能完全匹配,则向事件的回调队列写入匹配结果;否则,直到动态事件过期,丢弃中间匹配结果。
简单事件处理器
略
复杂事件处理器
等
数据架构
复杂事件处理器以计算时间窗口较小,精确度严格和时效性较高的需求为主要场景,以KV存储作为中间状态的存储介质;
简单时间处理器仅作简单事件判断和事件分发;
动态事件处理器是自定义抽象的事件处理框架,以半业务的定制化开发而存在。伴随着事件算子的丰富,逐渐沉淀通用逻辑和抽象的业务场景。
事件模型
| 事件属性 | 事件属性名 | 默认值 | 备注 |
|---|---|---|---|
| eventName | 事件名称 | ||
| eventId | 事件全局id | ||
| eventTime | 事件发生时间 | ||
| eventType | 事件类型 | 0简单、1复杂、2动态 | |
| backTopic | 回传队列topic | 如果指定了backTopic,则不需指定回传事件;如果指定了backEventName,则backTopic是事件中心的topic;事件在订阅的过程可以重写backTopic和backEventName,该过程为事件规则实例化。 | |
| backEventName | 回传下一个事件的名称 | ||
| eventRule | 事件规则 | CEP是类SQL;动态事件规则案例:idCard=#{idCard} ,占位符会在事件订阅时被替换,该过程为事件规则实例化。 |