-
SOA中的Profile与基于SCA、SDO的实现部署(一)
2006-07-14
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://nksoateam.blogbus.com/logs/2832310.html
务虚的东西谈的太多了难免使人感觉身在浮云,业务和服务模型完整的分析之后带来的就是如何定义与部署服务的问题。这篇Blog要解决的就是这样一个问题。
首先来了解一下什么是Profile,说白了,它就是用来规约服务的,它至少包括了所有服务之间默守的一种契约;又或者比作文档模版,具体的内容(服务本身)规约并不关心,它所关心的是使服务的表现形式是否能体现同一标准性,但Profile本身决不仅仅限于规约每个服务本身,它还有更大的用处,在了解它之前,既然是定义服务的,那么不妨拿它和WSDL作比较,应该会更加清楚它的产生的渊源、作用和意义之区别所在。
先来看WSDL中的元素定义和关系图

- Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。
- Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。
- Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。
- PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。
- Binding - 特定端口类型的具体协议和数据格式规范的绑定。
- Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
- Service- 相关服务访问点的集合。
稍微了解WSDL的人都应该知道它是用来定义某一个具体服务的,包括它的位置、提供了哪些服务访问点、每个服务访问点的所绑定的通讯协议和数据格式规范、传递消息的组成形式及使用的数据类型等信息,仔细想来这些内容是定义在每个服务的设计层次上的,它关心的每个服务本身而不是服务之间的相互协作形成的软件系统架构,况且WSDL协议是针对Web Service这种服务实现形式定义的,这在SOA中并不具有通用性。也就是说WSDL所关注的粒度相对于SOA中的Profile是太细节了,WSDL关心的是Web Service的规范定义,Profile则更多的关心多个服务的划分、协作、连接等问题。可以说两者并不矛盾,因为它们各自定义粒度不同,所关心的内容也不同,那么这样一个Profile到底是什么样的呢?来看下图

这里先把关注点放在图的左下方的Specification部分,它应该就是我们所熟知的WSDL协议所规定内容(但不限于它,因为WSDL是针对Web Service而SOA并不规定具体的服务形式),注意这里Specification具有一个属性是published,这相似于制定说这个服务是否被发布到一个制定的服务库中,如果针对Web Service就是指是否发布到UDDI中了。Specification指明了包含哪些Operation,这与WSDL中每个PortType下可以包含多个Operation相类似,但应该注意在Profile并没有如WSDL中Binding的内容,因为它已经属于每个Service的设计细节与SOA架构无关。同时也应该注意的是在Profile中虽然也指定了Message,但并没有如WSDL中详细规定每个Message中包含哪些数据以及数据的格式,这个原因同样也是因为SOA并不关心这样的Service设计细节,Message与Attachment都只具有一个属性就是编码方式,一般来讲Attachment很少用到,只有在需要至少两种编码方式的时候才会被使用。在Profile中左下这些内容就已经涵盖了WSDL的定义范围,当然并没有WSDL规定的那么细节,那么右上方的内容是什么呢?
右上方的Profile内容才是真正体现SOA的地方,它关心的是系统架构而不是每个服务的接口设计细节。对他们的理解要借助于SCA才能更好的将如此抽象的内容理解清楚,这里先简要介绍一下:Service以端口的形式制定了服务本身,至于如何调用Service是Specification指定的;Provider是服务提供者,它作为类实体提供一个或多个服务,它具有属性指定允许的平台绑定机制和服务提供者自身位置,我们可以把它想象成为提供某种服务的集合(例如在服务模型中定义的信息服务、事件服务、传输服务、外部服务、系统管理服务等);Partition是服务划分,它用来代表系统的逻辑/物理边界,一个Partition中可以包含多个Provider,当然站在更高的层次上来看这个问题,其实每个Partition都可以成为更高层的独立服务;Gateway是服务网关,它用来表示每个Partition中哪些服务是可以对外的,还是站在更高的层次上讲服务网关不仅屏蔽了底层不需要了解的细节,同时如果Partition被提升为独立服务,那么一个Gateway看起来就像一个Service了,而恰巧Service和Gateway的元类型都是Port,且Sepcification这个接口是可以通用与Service和Gateway的;Consumer是服务消费者,它可以是一个服务也可是其他的,一般来讲Consumer是高层次的概念,很少在这个层面给出很好的比喻;Connector是连接器,它用来指定服务之间的通讯绑定或服务与客户之间的服务绑定,属性binding指定服务产生时的平台绑定机制;Collaboration是协作,它指定一个服务的实现作为另一个服务的协作方式,换句话说就是使用了一种服务协作作为服务的行为,注意Collaboration仅仅限于Providers之间。
解释了这么多,相信大家已经有些概念了,不过这组概念还是相当难以理解,它们都属于原类型(stereotype),通用地合理解决关注点是是它们的意义,如果更加细节的了解,马上要介绍SCA和SDO。现在的理解程度应该是这样的:
1、Profile关心的是服务之间的关系,即系统架构,而不是每个服务的设计和实现机制;
2、Profile涵盖了以前WSDL中的内容,但由于其所关心的粒度不同,所以两者并不存在冲突反而是相辅相成的;
3、把Profile简单的看成服务规约是错误的,它所处的角度是系统架构师而不是设计实现人员;
未完待续……
随机文章:
SOA中的Profile与基于SCA、SDO的实现部署(二) 2006-07-14工作计划_SeraphZhang 2006-07-14SOA会议记录--6月13日 2006-06-13SOA会议记录--6月3日 2006-06-03会议记录——5月20日 2006-05-23
收藏到:Del.icio.us







