您的位置:首页 > 运维架构 > 网站架构

接口连接架构(Interface Connection Architecture)和事件驱动架构(Event Driven Architecture)

2008-10-21 17:24 567 查看
我在学Rapide事件处理语言的过程中,从David C. Luckham的一篇文章中看到接口连接架构(Interface Connection Architecture)这个概念,觉得这个架构正是事件驱动架构的一个抽象,同时和当下流行的SOA平台也有某些对应之处。
1. 接口连接架构的主要内容
软件系统架构可以抽象为两种,对象连接架构和接口连接架构。



对象连接架构示意图 [/b](引用1[/b])[/b]
对象连接架构可以对应面向对象语言的程序,对象提供接口,在一个对象内部可以直接调用其他对象的接口。



接口连接架构示意图 [/b](引用2[/b])[/b]
接口连接架构中的调用就类似组件技术(Web Service, EJB, CORBA)中的调用了,组件提供对外的接口,和访问这个接口的Stub。一个组件在内部通过调用另一个组件提供的接口的Stub来调用另一个组件提供的功能。接口和接口的Stub可以是不一样的语言实现,不一样的数据格式,由组件之间的连接来做这两部分的映射和转换。组件接口的互联互通就是SOA在技术层面要实现的一个主要目标。
一个接口连接架构的简单例子如下:(引用[/b]3[/b])[/b]
Example: An interface Connection Architecture with asynchronous connections
Type Producer(Max : Positive) is interface
Action out Send(N: Integer);
Action in Reply(N: Integer);
Behavior
Start => Send(0);
(?X in Integer) Reply(?X) where ?X < Max => Send(?X+1);
End Producer

Type Consumer is interface
Action in Receive(N: Integer);
Action out Ack(N: Integer);
Behavior
(?X in Integer) Receive(?X) => Ack(?X);
End Consumer

Architecture ProdCon() return SomeType is
Prod : Producer(100);
Cons: Consumer;
Connect
(?n in integer)
Prod.Send(?n) => Cons.Receive(?n);
Cons.Ack(?n) => Prod.Reply(?n);
End architecture ProdCon;
例子很简单,从中可以看到很多眼熟的东西。接口的定义和实现,连接Connect的定义和BPEL中的partnerLinkType如出一辙。
如果使用组件实现以上的接口定义,那么组件Consumer需要实现接口Receive(),组件Producer实现接口Reply()作为Receive接口调用的回调接口。调用过程如下:
(1) 组件Producer调用组件Consumer的Receive接口,参数为X。 该调用为异步调用,不等待返回值。
(2) 组件Consumer的Receive接口实现逻辑为,调用Producer的接口Reply,返回X值。
(3) 组件Producer的Reply接口的实现逻辑为,当X值小于最大值时,将X加1,继续调用Consumer的Receive接口。
使用组件技术来描述以上行为,组件接口定义和实现都是独立的,不容易直接得到组件之间的交互过程。而使用上述例子的描述方式,会更方便地推断出组件之间的交互过程。

2. 事件驱动架构的主要内容
还是以上面的例子来描述事件驱动架构的主要内容。
事件[/b]:在信息化系统中,事件是一些事物对象的状态属性,也可以是事物之间动作的记录。 例子中的Send(N: Integer), Ack(N: Integer)都是事件。
事件源[/b]:产生事件的模块。即接口定义中有Action out的模块产生事件。
事件监听者[/b]:接收并处理事件的模块。即接口定义中有Action in的模块接收事件,然后处理事件。
事件的处理[/b]:事件的处理通常使用声明型语言描述,即描述满足一定条件下,对操作对象执行什么处理的规则。多条规则组成一个规则集,在运行时由规则引擎来判定执行规则的顺序,执行相应的规则。
规则是描述对操作对象要做什么,而状态机模型是来描述操作对象在不同状态下,被执行操作后的状态变化。即一个是外因,一个是内因,共同决定对象的变化。[/b]
将上面的接口连接架构示意图中的模块细化为下图所示,即成为事件驱动架构的结构图。所谓事件驱动即是以事件为触发源, 驱动一系列的操作和处理。


事件驱动架构示意图[/b]
[/b]
3. 具备事件驱动功能的企业应用平台的概述
通常在企业应用系统中,区分业务数据流和事件流。业务数据流是企业应用真正要进行处理的业务数据,事件流一般用于处理策略控制和系统状态监测。
企业应用平台中的事件驱动和处理如下图所示:


企业应用平台中的事件处理示意图[/b]
说明
(1)使用消息中间件作为模块之间的连接工具。事件以消息的形式在消息总线上传输,事件源发送或者发布事件消息,事件监听者接收或者订阅事件消息。
(2)使用流程编排驱动工具来实现处理业务数据的流程,流程内部可以发送事件消息给事件处理引擎工具。
(3)事件引擎工具收到事件后,按既定的规则来处理事件,处理的结果同样以事件消息的方式返回给流程,来达到控制流程处理的作用。
在企业应用系统中,业务数据由业务流程处理,事件信息由事件规则引擎里处理,两者可以通过事件消息来交互。 分离两部分的原因在于事件处理规则很复杂且变化频繁,不适合使用过程式流程或者语言来描述实现。

附注:
(1) 引用1,引用2。 对象连接架构图和接口连接架构图引用自Architecture Description Language : An Overview , tw@mcc.com
(2) 引用3。 例子程序引用自Rapide: A Language and Toolset for Simulation of Distributed System by Partial Orderings of Events, David C.
(3) 图4中的流程,使用TIBCO Business Works 绘制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: