简单的说,事件驱动模式包括三个参与者:事件产生者,事件分发器和事件处理器。
从事件驱动编程(Event-driven Programming)开始
如果你写过GUI程序,对事件处理一定不陌生。事实上,事件驱动编程已经成为一种设计模式。大多数的GUI库都会采用这一模式。
简单的说,事件驱动模式包括三个参与者:事件产生者,事件分发器和事件处理器。
- 事件产生者(Events Generator)
决定是否需要产生事件。比如,GUI上的每个组件都是一个事件产生者,可以根据用户操作产生鼠标事件或者键盘事件。
- 事件分发器(Events Dispatcher)
收集所有事件产生者发出的事件放入事件队列(Events Queue),
并根据事件的类型将事件分发给已经注册的事件处理器。事件分发器通常由GUI框架实现。
- 事件处理器(Events Handler)
根据接收到的事件进行处理,需要GUI框架的使用者自行编写。
事件驱动编程的核心价值在于:程序的执行流程不是预先定义好的,而是由程序的使用者决定的。这将极大增强程序的交互性。
就好像DVD与RPG游戏的区别:前者的剧情是设定好的,你只能进行开始、暂停、快进、回退等有限的交互;后者可以决定主角的行为从而影响故事的结局。
事件驱动业务(Event-driven Business)
代码的世界不可能是现实世界的完整镜像,但一定是对现实世界的某种抽象,这种抽象能够简化代码世界中对问题的分析和处理。
同时,这种抽象还可以反向映射到现实世界,为我们解决现实问题提供思路。
现代企业生存的外部环境处于剧烈的变化之中,“敏捷企业”已经成为生存之道,而事件驱动业务是敏捷企业的一个基本要求。
事件驱动业务(Event-driven Business),是在 连续
的业务过程中进行决策的一种业务管理方式,即根据不同时点上出现的一系列事件触发相关的任务,并调度可用的资源执行任务。
如果说事件驱动编程能够为软件带来更灵活的交互性和强大的功能,那么企业中的事件驱动业务能够大幅度提高业务的效率和灵活性。
事件驱动业务依托于比较成熟的信息化建设。各个业务应用系统在产生连续不断的数据流的同时,根据定义好的条件产生一些“业务事件”,按照策略对这些业务事件进行分析处理,触发新的业务事件或者业务流程,即实现了业务的事件驱动。
从上面的描述可以看出,事件驱动业务要求能够快速(毫秒级)、不间断的处理连续、海量的数据,具备灵活的规则或策略设置,从而具备迅速识别、捕获、响应实时业务数据的能力。
而传统的企业IT架构通常采用:
- 在业务应用系统中处理业务操作
- 遵循固定的业务流程(Business
Process)处理跨系统事务,并且这些流程很少变化 - 基于数据仓库进行海量数据的存储及事后分析
这种IT架构远远达不到事件驱动业务的要求。
事件驱动业务能够应用的业务领域很多,凡是需要快速处理连续性数据、需要能够灵活制定策略的业务,都可以采用事件驱动的业务模式。如证券行业常见的风险分析预警(事前及事中风控)、投资决策(程序化交易)、经纪人绩效计算等。
业务事件处理的几个层次
其实在传统的IT架构中,我们已经实现了业务事件的处理。比如在传统的业务应用系统中,我们通常将业务数据存储在数据库中,通过应用系统的操作界面由人工发现和处理业务事件。
这样的处理方式存在两个不足,一是速度慢,二是对于复杂的情况只靠人脑难以处理。于是有了两个技术方向:
- 消息队列(MQ)
对于速度慢的解决办法是用机器代替人工,为了在多个系统之间传递消息,发展出了消息队列(MQ)的技术 - 商业智能(BI)
为了应对复杂性,通过数据仓库将数据整合到一起,并用专门的工具在数据模型的基础上进行分析
但是上述两个方向是正交的:MQ不适合处理复杂性,而BI主要适应于对结构化的历史数据的分析,无法处理“现在”的情况。
CEP:鱼与熊掌可以兼得
CEP(Complex Event
Processing)的出现解决了上述两个方面的问题,在实时性和复杂性方面都得到了很好的解决。
处理数据流
不管是单独的应用系统,还是数据仓库,都是先将数据存储到数据库/数据仓库,然后再处理或查询。
而CEP与MQ类似的将数据看作是 数据流
。在连续数据的快速移动过程中进行分析处理。
这样的方式不需要很大的数据加载,完全可以在内存中进行,从而能够快速产生结果。
处理复杂性
业务事件可能很复杂,在各种不同的数据流中源源不断产生各种类型的事件。需要对这些业务事件进行复杂的计算,如过滤、关联、聚合等,同时还需要考虑这些也是事件出现的时间序列。
最终才能产生有意义的事件,或触发业务流程。同时,这些计算的规则可能还会经常变化。
这一类的问题通常通过基于规则的推理机(即规则引擎)来实现。
CEP的架构
综上所述,CEP在逻辑上应该包括:
事件发生器
通过应用系统、文件系统、数据库、互联网、人工、以及传感器产生事件事件处理器 模式的匹配、验证和改进,路由,转换以及编排
事件消费者
与事件发生器类似,也可以是应用系统、文件系统、数据库、互联网、人工界面等小结
CEP是一种比较新的企业架构(EA,Enterprise
Architure)组件。CEP将数据看做一种数据流,基于规则引擎对业务过程中持续产生的各种事件进行复杂的处理,能够实现对连续数据的快速分析处理。可以应用在多种业务场景,如风险分析、程序化交易等。
如果说BI实现了商业智能,那么CEP则实现了“持续智能(Continuous
Intelligence)“。