论文部分内容阅读
【分类号】:TP316
摘要
事件驱动架构(Event Driven Architecture,EDA)是一种用于进行设计和实现应用和系统的方法。在这些应用和系统里, 事件所触发的消息可以在独立的、非耦合的组件和服务之间传递,这些模块彼此并不知晓对方。通过提供瞬时过滤、聚合和关联事件的能力,事件驱动架构可以快速地检测出事件并判断它的类型,从而帮助系统快速、恰当地响应和处理这些事件。
关键词:事件驱动;组件;服务;关联事件
引言
传统系统架构中的交互通常是以类似调用的命令方式存在,这种交互方式使得系统运转依赖于各部分不同的结构,系统耦合性太强。如果要改变这种方式,首先不妨认为系统中的每个部分都是独立的,而不同部分间的联系和交互则可以通过间接的方式来进行:即在这些部分之间加入通道的结构来联系他们;其次交互的信息载体不再是命令,因为这样的命令信息往往是要预先知道下一步所执行的动作,并指明命令的执行者。相反的,交互方仅仅需要将交互的信息以一种事件的形式发布出来,并存放在之前的通道中,而由真正需要进行交互的另一方从通道中去获取这些事件,并进行交互行为的后续动作,而这些后续动作对于交互信息的发布方来说是透明的。这便是事件驱动架构最初的构想。
本文通过对事件驱动架构的研究应用,分析其在软件设计过程中的优良特性,并在此基础上提出了运用本体的观念对软件组件交互过程中的事件进行分类建模。
1.事件驱动架构的特点
现代的大多数系统程序设计都是事件驱动,但大多数事件源仅限于设备、组件等的特定行为动作。而本文所提及的事件驱动架构是指以事件为核心的一套需求分析,设计,和实施的方法论,在这个系统里事件可以传递于松散耦合的组件和服务之间。事件驱动架构架构将传统的轮询模式转化为了事件驱动的实时推动模式,加快了业务响应的敏捷性,减少了由于跨组件或业务系统消息传递而带来的时间延长,真正实现系统间的彻底解耦。
事件驱动架构在具体实现中是指由一系列相关组件构成的应用,而组件之间通过事件机制完成一定的业务功能。由于在一个事件驱动架构系统中各个组件都只专注于处理输入的消息与发布输出的消息,因而系统能够更有加效地对管道化(pipelined)的、由多软件模块链接而成的并发事件流(concurrent processing of events)进行处理。
2.事件驱动架构的工作原理
事件处理流程分为四个逻辑层:事件生产者、事件传送通道、事件处理引擎和事件驱动的下级行为。通常事件可以采用发布/订阅机制。事件处理机制的流程可以描述为:事件生产者作为事件源(Event Source)发布事件,事件容器(Event Channel)作为事件传送的通道,事件处理引擎接受事件并将其交付事件订阅者(Listener),事件订阅者接受该事件并做出明确的响应。整个流程中将事件作为信息的载体,穿过模块、组件的边界进行交互,实现各项业务处理。具体的工作模式如下图1所示,事件监听时序图如图2所示。
图1
关键组成部分:
a. 事件类。运用本体的观念对事件进行分类建模,让事件作为消息,在系统各个组件对象之间传递。事件分类原则:并行处理的事件必须分属不同的聚合根,单个聚合根产生的事件必须按照顺序被持久化。
b. 事件通道(事件管理器)。抽象化的通道,不存在单独的线程支持,寄宿于已存在的线程中,注册事件类,支持事件的发布订阅。例如,事件发布存在于UI线程,而事件的消费者可存在于Background线程中,其通信方式即是传统的线程间Event通信。
c. 事件源和事件消费者。事件消费者对于事件源来讲是透明的,即事件发布并不关心谁订阅了该事件,事件消费者在接受到该事件时,可能需要进行一定筛选,确定符合条件才会执行相应的函数方法。
图2 事件监听时序图
3.事件驱动架构的扩展
3.1工作流
很多情况下,多个事件组合可以完成一项业务操作,即一个在不同时间、不同上下文条件下的一个复杂组合事件——工作流(Work Flow)。单一事件有其自身价值,但是仍然是解决点到点的事件发送和消费问题,而工作流能够真正完成端到端业务流程的实时异步驱动和信息传递。事件驱动架构与工作流的结合能够将业务流程以事件作为线索进行串联,从而达到系统内功能模块甚至是系统间功能模块的通信或者协同工作。两者结合的关键在于事件的组合和执行顺序,设计某些对象状态的改变可能还需要考虑事务性操作,即错误响应机制及业务逻辑回滚。
3.2事件本体
事件驱动架构中事件作为设计核心,地位举足轻重。但系统中如果出现海量的事件就会成为另一种灾难,因此合理划分事件类别、实现事件聚合就是事件驱动架构设计的关键。构建组件交互中的事件本体,结合事件本质明确事件这一更高层次和更复杂的语义信息,为事件驱动架构中事件模型探索标准化的渠道。
在领域本体构建领域,本体的可重用性和面向特定领域一直是两难的问题。因为本体的根本目的就是知识的重用和共享,所以最理想的目标就是建立一个任务独立的可重用模型。但是作为面向特定领域的领域本体,其又是必须依赖领域的,只有这样才能使得领域本体具有良好的领域知识表达能力。英国伦敦大学针对各类乐器构建了乐器发声的事件本体下图所示。但缺乏事件本体普遍性,软件开发过程中组件、服务交互中的事件本体研究还属于空白。
图4 事件本体模型图
参考文献:
【1】 Brenda M. Michelson. Event-Driven Architecture Overview. Sr.VP and Sr.Consultant, Patricia Seybold Group,2006.2
【2】 Bertrand Meyer, The Power of Abstraction, Reuser, and Simplicity :An Object-Oriented Library for Event –Driven Design.
【3】 Carl Sliwa. Event –Driven Architecture poised for wide adoption. Computerworld, 2003,5
【4】 Opher Etzion. Towards an Event-Driven Architecture :An Infrastructure for Event Processing Position Paper.ISBN 978-3-540-29922-6
【5】 王园,吉国力,苏秦.事件驱动体系结构在GIS中的设计实现.厦门大学学报,2005,7(4):34-36
【6】 Boby Woolf .Event-Driven Architecture and Service-Oriented Architecture. IBM Corporation,2006
【7】 David C.Luckham. The Power of Events, Introduction to Complex Event Processing. Addisionwesley
【8】 Developer’s Guide to Microsoft Prism patterns &practices
【9】 劉家红,吴泉源,一个机遇事件驱动的面向服务计算平台[J]. 计算机学报,2008,31(4):588-599
【10】 George Hohpe. Programming Without a Call Stack Event-Driven Architectures ,http://www.eaipattrens.com
【11】 高波涌,朱宇宁.基于SOA的事件驱动金融型金融业EAI技术研究.计算机工程与设计,2006(7):83-85
摘要
事件驱动架构(Event Driven Architecture,EDA)是一种用于进行设计和实现应用和系统的方法。在这些应用和系统里, 事件所触发的消息可以在独立的、非耦合的组件和服务之间传递,这些模块彼此并不知晓对方。通过提供瞬时过滤、聚合和关联事件的能力,事件驱动架构可以快速地检测出事件并判断它的类型,从而帮助系统快速、恰当地响应和处理这些事件。
关键词:事件驱动;组件;服务;关联事件
引言
传统系统架构中的交互通常是以类似调用的命令方式存在,这种交互方式使得系统运转依赖于各部分不同的结构,系统耦合性太强。如果要改变这种方式,首先不妨认为系统中的每个部分都是独立的,而不同部分间的联系和交互则可以通过间接的方式来进行:即在这些部分之间加入通道的结构来联系他们;其次交互的信息载体不再是命令,因为这样的命令信息往往是要预先知道下一步所执行的动作,并指明命令的执行者。相反的,交互方仅仅需要将交互的信息以一种事件的形式发布出来,并存放在之前的通道中,而由真正需要进行交互的另一方从通道中去获取这些事件,并进行交互行为的后续动作,而这些后续动作对于交互信息的发布方来说是透明的。这便是事件驱动架构最初的构想。
本文通过对事件驱动架构的研究应用,分析其在软件设计过程中的优良特性,并在此基础上提出了运用本体的观念对软件组件交互过程中的事件进行分类建模。
1.事件驱动架构的特点
现代的大多数系统程序设计都是事件驱动,但大多数事件源仅限于设备、组件等的特定行为动作。而本文所提及的事件驱动架构是指以事件为核心的一套需求分析,设计,和实施的方法论,在这个系统里事件可以传递于松散耦合的组件和服务之间。事件驱动架构架构将传统的轮询模式转化为了事件驱动的实时推动模式,加快了业务响应的敏捷性,减少了由于跨组件或业务系统消息传递而带来的时间延长,真正实现系统间的彻底解耦。
事件驱动架构在具体实现中是指由一系列相关组件构成的应用,而组件之间通过事件机制完成一定的业务功能。由于在一个事件驱动架构系统中各个组件都只专注于处理输入的消息与发布输出的消息,因而系统能够更有加效地对管道化(pipelined)的、由多软件模块链接而成的并发事件流(concurrent processing of events)进行处理。
2.事件驱动架构的工作原理
事件处理流程分为四个逻辑层:事件生产者、事件传送通道、事件处理引擎和事件驱动的下级行为。通常事件可以采用发布/订阅机制。事件处理机制的流程可以描述为:事件生产者作为事件源(Event Source)发布事件,事件容器(Event Channel)作为事件传送的通道,事件处理引擎接受事件并将其交付事件订阅者(Listener),事件订阅者接受该事件并做出明确的响应。整个流程中将事件作为信息的载体,穿过模块、组件的边界进行交互,实现各项业务处理。具体的工作模式如下图1所示,事件监听时序图如图2所示。
图1
关键组成部分:
a. 事件类。运用本体的观念对事件进行分类建模,让事件作为消息,在系统各个组件对象之间传递。事件分类原则:并行处理的事件必须分属不同的聚合根,单个聚合根产生的事件必须按照顺序被持久化。
b. 事件通道(事件管理器)。抽象化的通道,不存在单独的线程支持,寄宿于已存在的线程中,注册事件类,支持事件的发布订阅。例如,事件发布存在于UI线程,而事件的消费者可存在于Background线程中,其通信方式即是传统的线程间Event通信。
c. 事件源和事件消费者。事件消费者对于事件源来讲是透明的,即事件发布并不关心谁订阅了该事件,事件消费者在接受到该事件时,可能需要进行一定筛选,确定符合条件才会执行相应的函数方法。
图2 事件监听时序图
3.事件驱动架构的扩展
3.1工作流
很多情况下,多个事件组合可以完成一项业务操作,即一个在不同时间、不同上下文条件下的一个复杂组合事件——工作流(Work Flow)。单一事件有其自身价值,但是仍然是解决点到点的事件发送和消费问题,而工作流能够真正完成端到端业务流程的实时异步驱动和信息传递。事件驱动架构与工作流的结合能够将业务流程以事件作为线索进行串联,从而达到系统内功能模块甚至是系统间功能模块的通信或者协同工作。两者结合的关键在于事件的组合和执行顺序,设计某些对象状态的改变可能还需要考虑事务性操作,即错误响应机制及业务逻辑回滚。
3.2事件本体
事件驱动架构中事件作为设计核心,地位举足轻重。但系统中如果出现海量的事件就会成为另一种灾难,因此合理划分事件类别、实现事件聚合就是事件驱动架构设计的关键。构建组件交互中的事件本体,结合事件本质明确事件这一更高层次和更复杂的语义信息,为事件驱动架构中事件模型探索标准化的渠道。
在领域本体构建领域,本体的可重用性和面向特定领域一直是两难的问题。因为本体的根本目的就是知识的重用和共享,所以最理想的目标就是建立一个任务独立的可重用模型。但是作为面向特定领域的领域本体,其又是必须依赖领域的,只有这样才能使得领域本体具有良好的领域知识表达能力。英国伦敦大学针对各类乐器构建了乐器发声的事件本体下图所示。但缺乏事件本体普遍性,软件开发过程中组件、服务交互中的事件本体研究还属于空白。
图4 事件本体模型图
参考文献:
【1】 Brenda M. Michelson. Event-Driven Architecture Overview. Sr.VP and Sr.Consultant, Patricia Seybold Group,2006.2
【2】 Bertrand Meyer, The Power of Abstraction, Reuser, and Simplicity :An Object-Oriented Library for Event –Driven Design.
【3】 Carl Sliwa. Event –Driven Architecture poised for wide adoption. Computerworld, 2003,5
【4】 Opher Etzion. Towards an Event-Driven Architecture :An Infrastructure for Event Processing Position Paper.ISBN 978-3-540-29922-6
【5】 王园,吉国力,苏秦.事件驱动体系结构在GIS中的设计实现.厦门大学学报,2005,7(4):34-36
【6】 Boby Woolf .Event-Driven Architecture and Service-Oriented Architecture. IBM Corporation,2006
【7】 David C.Luckham. The Power of Events, Introduction to Complex Event Processing. Addisionwesley
【8】 Developer’s Guide to Microsoft Prism patterns &practices
【9】 劉家红,吴泉源,一个机遇事件驱动的面向服务计算平台[J]. 计算机学报,2008,31(4):588-599
【10】 George Hohpe. Programming Without a Call Stack Event-Driven Architectures ,http://www.eaipattrens.com
【11】 高波涌,朱宇宁.基于SOA的事件驱动金融型金融业EAI技术研究.计算机工程与设计,2006(7):83-85