消息拓扑
消息拓扑描述的是在一个或多个发送者和接受者之间消息如何发送的。消息拓扑可以描述简单的应用-应用的连接关系,但是它同样可以描述复杂的应用-企业的连接。在后续文章里,面向服务的应用的作用会显现出来。概括地说,这些可能存在的拓扑结构比面向组件的应用系统能够涉及到的情况会更加多、更加复杂。
某种层次上,一个消息拓扑是一个或者多个消息交换模式(MEP)的组合。实际上可能存在有无数种拓扑结构,但是通常接受的分类有4个:点对点、数据报点对点、中转和对等网络(P2P)。重要的是要注意,与MEP不同,这些不同的消息拓扑名称还没有被广泛接受,所以我这里有点冒昧。同样,我们也可以增加或者减少消息拓扑的数量,但是这4个已经足够我们本次讨论的了。
点对点
最简单和被广泛使用的消息拓扑,点对点方式是消息拓扑的一个基本组成部分。简单来说,点对点拓扑指的是一个发送者和一个接受者交换消息。如你在前面文章里看到的一样,这个消息交换可以使用数据报、请求/应答或者双工MEP实现。
只进点对点
我个人认为,数据报点对点是最有趣的拓扑,但是它也是最难实现的。本质上,只进点对点拓扑是一个发送给不同参与者的数据报链。重要的是要指导这个拓扑有且仅有数据报MEP组成。有可能消息要返回给参与者,但是在消息里明确标记返回地址比含蓄描述更好,就想请求/应答方式一样。通常,这个拓扑要依赖<From>、<ReplyTo>、 <FaultTo>、<RelatesTo>、 <MessageID>和<To> WS-Addressing消息头块来实现。
图3-4:只进点对点消息拓扑
消息转发
随着开发社区对消息应用系统的接受,在这些消息应用系统之间转发消息也会变的越来越重要。一个相似的需求在Internet和电子商务逐渐流行的时候出现了。这个时期典型的例子是服务集群里的负载均衡器。除了别的以外,负载均衡器转发请求道可用的资源上。随着时代进步,负载均衡器变的也更加智能,这个趋势没有任何减缓的迹象。我希望在面向服务的应用系统领域有同样的变化。
通常来说,一个消息转发代理(broker,经纪人,这里译为代理)是一个转发消息到其它终结点的消息参与者。消息转发代理能够根据处理规则决定消息何时、何地并且如何发送给其它消息参与者。一个消息转发代理拓扑可以细分为分布式消息转发代理、集中式消息转发代理和混合消息转发代理。这个消息转发代理拓扑很像现在使用的不同邮件服务拓扑。
此外,著名的发布-订阅拓扑符合消息转发拓扑的定义。在发布-订阅架构中,参与者通过注册自己的感兴趣的发布者订阅特定的消息。当一个订阅者感兴趣的消息发送给发布者,发布者就会转发消息给所有的订阅者。换句话说,发布者是消息中转代理。在SOAP里,消息中转代理是一个中介者,但它可以直接标记地址。图3-5说明了一个基本的消息转发拓扑。
图3-5:消息转发拓扑
对等网络
对等网络(P2P)应用系统,像Groove【老徐备注2】 和Microsoft Windows Live messenger,已经变得非常流行。本质上,一个真正的P2P应用是可以直接与其它P2P应用通信的。P2P应用可以与其它P2P应用通过一对一、一对多和多对多方式通信。P2P应用不需要依赖服务器,因为它们可以通过网络(Mesh)直接通信。网络(Mesh)是一个指定的、可发现的和自维护的网络节点集合。在参与进P2P消息交换以前,一个参与者比如先加入网络(Mesh)。通常,虽然P2P消息拓扑在参与者之间提供了丰富的交互能力,但是它仍然有很强的可伸缩性和弹性的。图3-6展示了一个P2P拓扑结构。正如你将在本书后面看到的,WCF为P2P拓扑提供了强大的支持。
图3-6:对等网络(P2P)拓扑
消息编排
消息编排是有组织的代表一组逻辑操作的消息交换集合。当我们使用信用卡给爱人或者其他重要的人买礼物的时候,就参与进了一个消息编排。这个买卖的逻辑操作由几个消息交换组成“
1. 商店发送信息给商业服务。
2. 商业服务发送数据给银行。
3. 银行发送一个批准代码。
每个数据交换单独来看都没什么意思,但是总体来看,他们表示了一个逻辑操作。
消息编排在面向服务的应用系统里起着关键作用,特别是在安全性、可靠性和事务性方面。就像你在第一章:蓝月亮里看到的,这些不依赖于特定传输的特性要求我们在消息里放置更多的信息。这里着重指出,我们必须定义参与者之间的消息流。当提供以消息为中心的安全时,我们比如考虑发送者和接收者如何签名和加密消息。当提供可靠性时,我们比如考虑收到消息时接收者如何和发送通信。同样,在事务处理中,我们必须考虑事务里的参与者如何提示操作已经成功提交。所有的这些考虑需要一个定义良好的消息编排集合。
除了别的以外 ,许多WS-*规范定义了用于提供安全性、可靠性和事务性的编排。WCF包含理解WS-*规范的类型,于是在WCF应用系统中就可以不依赖特定的传输来提供安全性、可靠性和事务性。
我们也可以*定义我们自己的消息编排。这些编排在消息交换中,可以描述业务过程、规则为一个策略或者特定的功能。技术上创建我们自定义的WCF组件是可行的,但是却很无聊,尤其是复杂的编排。像BizTalk Server和WF都能更适合这个任务。
本章小结
像我们在第2章里看到的,一个消息应用可以发送和/或接受消息。本章,我介绍了描述消息参与者之间的消息交换的基本原理。使用的术语取决于你要描述的粒度级别。MEP是最常见的描述2个消息参与者之间消息交换粒度的一种方式。三种总所周知的MEP是数据报、请求/应答和双工。在消息参与在之中,MEP可以被划入消息拓扑里。此外,一个消息交换集合可以符合一个预定义的消息编排。下一章里,我们会看到WCF应用系统中主要的架构组件如何组织在一起的。
【老徐备注】
1. 拓扑学Topology:是近代发展起来的一个研究连续性现象的数学分支。中文名称起源于希腊语Τοπολογία的音译。Topology原意为地貌,于19世纪中期由科学家引入,当时主要研究的是出于数学分析的需要而产生的一些几何问题。发展至今,拓扑学主要研究拓扑空间在拓扑变换下的不变性质和不变量。http://baike.baidu.com/view/41881.htm
2. Groove 是OFFICE 2007中新的组件。它是一个协同办公软件,允许工作组共享信息并协作处理项目活动——可以是单个文档协作,也可以是与业务流程相集成的自定义解决方案。
本文转自 frankxulei 51CTO博客,原文链接:http://blog.51cto.com/frankxulei/318608,如需转载请自行联系原作者