SOA与Web服务(二)

虽然Web服务不是实现SOA的惟一形式,但是毫无疑问,它是最成功、最流行的形式。它们是体系结构与实现的关系,好比HTTP是一种标准,而IIS或者Apache是实现了这个协议的软件一样。

从面向对象、面向组件到SOA

历史总是呈螺旋状前进,在开发领域也不例外:从最开始的面向机器的开发,到面向过程的开发,到面向对象的开发,到面向组件的开发,再到现在要谈的SOA。这些技术之间是继承并发展的关系。

是什么促使它们按照这种方向发展呢?其一是更加面向人,而不是机器,采用更加类似人处理事物时所采用的方式,简单地说是友好性;其次是更加开放,而不是专用;第三是在软件系统中各个模块耦合度更加松散,而不是更紧密。

从面向机器到面向过程与面向对象,最大程度地体现了面向人的思维方式的特点。程序员得以在问题域求解问题本身,而不是在机器域求解这个问题。这使得开发人员可以在更高的抽象级别上考虑问题,从而解决复杂的问题。面向组件本身并不是新技术,只不过其发展受到影响的一个重要原因是对象的粒度太细,不能提供其最初承诺的重用性,所以开发人员在内部内聚一些更细粒度的对象来提供定义良好的功能,以此来提高可重用性。

在组件技术都没有被广大的程序员吸收消化的情况下,为什么还要转到面向服务呢?这就涉及到后面的两个因素。各种现存组件系统并不是开放的,互相之间不能无缝地调用,而且这种转换效率低下,各种转换方式也是专用的,各个组织有自己不同的方案。从本质上讲,SOA的一个重要方面是要解决异构性,然后是更松散的耦合度。这将带来更大的灵活性和适应性,适应动态变化的应用场景。

“服务是将组件描述成提供相关服务的物理黑盒封装的可执行代码单元。它的服务只能通过一致的已发布接口(包括交互标准)进行访问。组件必须能够连接到其他组件(通过通信接口)以构成一个更大的组件。服务通常实现为粗粒度的可发现的软件实体,它作为单个实例存在,并且通过松散耦合的基于消息通信模型来与应用程序和其他服务交互。

开发者眼中的SOA

要了解一种新的技术,人们总会问两个问题:“组成这些模型的各个部分是什么?这些部分之间是怎样交互的?”。我们可以用分层模型来帮助读者理解。在分层模型中,模型的各部分以层来表述,而各部分的关系则以下层为上层提供的接口来表述,层层抽象。

图1是一种被广泛认可的体系结构。

左边各层代表功能结构。其中:

● 传输(Transport)是一种机制,用于将来自服务使用者的服务请求传送给服务提供者,并且将来自服务提供者的响应传送给服务使用者。它只是传输消息的机制。

● 服务通信协议(Service Communication Protocol)是一种协商的机制,通过这种机制,服务提供者和服务使用者可以就将要请求的内容和将要返回的内容进行沟通。

● 服务描述(Service Description)是一种标准的模式,用于描述服务是什么、应该如何调用服务以及成功地调用服务需要什么数据。

● 服务(Service)当然是指实际可供使用的服务实体。

● 业务流程(Business Process)是一个服务的集合,可以按照特定的顺序并使用一组特定的规则进行调用,以满足业务要求。可以将业务流程本身看做是服务,这样就产生了业务流程可以由不同粒度的服务组成的观念。

● 服务注册中心(Service Registry)是一个服务和数据描述的存储库,服务提供者可以通过服务注册中心发布它们的服务,而服务使用者可以通过服务注册中心发现或查找可用的服务。服务注册中心可以给需要集中式存储库的服务提供其他的功能。

图中右边部分代表服务质量部分。这些是贯穿每一层的。

● 策略(Policy)是一组条件和规则,在这些条件和规则之下,服务提供者可以使服务对于使用者可用。策略是功能与服务质量之间的纽带,因此功能和服务质量两个区都涉及策略。

● 安全性(Security)是规则集,可以应用于调用服务的服务使用者的身份验证、授权和访问控制。

● 事务(Transaction)是属性集,可以应用于一组服务,以提供一致的结果。例如,如果要使用一组服务来完成一项业务功能,则所有的服务都必须完成,或者没有一个完成。

● 管理(Management)是属性集,可以应用于管理提供的服务或使用的服务。

如何实现Web服务?

那么Web服务是如何实现这个架构的?

传输,往往采用HTTP、SMTP或者其他更优化的协议。用得广泛的是HTTP,现实的情况是大多数组织的安全策略都只开放80端口。

通信协议,往往采用SOAP(Simple Object Access Protocol),即简单对象访问协议,它用XML的形式规定了消息该如何编码。顶层元素是envelope,其他包括可选的header,必需的body,还定义了一些属性。

服务描述,采用WSDL(Web Services Description Language)。它是一个开放的标准,由W3C制定,主要规定扩展的数据类型、消息、端口、绑定、实现等,它规定了一个服务可以如何被调用。另一个正在制订的标准是 Web 服务寻址(WS-Addressing),它定义了如何在分布式体系结构中惟一地进行 Web 服务寻址和标识 Web 服务,最终通过WSDL起作用(即向服务描述文件中增加了几个元素)。另一个流行的规范是 Web服务调用框架(Web Services Invocation Framework),在这种框架中,可以定义任何类型组件的WSDL接口,即使它们没有使用相同的消息传递协议。

服务,可以用任何语言开发,是实现具体接口的软件实体。

业务流程依不同的场合而不同,说明了组合服务的顺序。

服务的注册与发现用UDDI(Universal Description, Discovery and Integration) 实现。它用于规定Web服务的注册与发布机制。Web 服务检查语言(Web Services Inspection Language)是 UDDI 在不使用注册中心的情况下采用的一种可选机制。

用于 Web 服务的安全性协议是从 Web 服务安全性(WS-Security)规范开始的,该规范为安全通信定义了基于令牌的体系结构。

在安全性模型之外的是特定于应用程序的规范,其中包括 Web 服务的业务流程执行语言(Business Process Execution Language for Web Services,BPEL4WS),它定义了进行协同分布式事务处理的工作流操作、Web服务事务(WS-Transaction)以及Web 服务协调(WS-Coordination)等。

用于 Web 服务的规范正处在不断制订的过程中,很多相关规范正在由各种标准组织(如W3C、IETFASIS)以及行业联盟(如Web服务互操作性组,Web Services Interoperability Group,WS-I)制定。笔者的建议是经常关注这些组织的主页,以获得最新的信息。

未来的趋势与展望

Web服务提供了简单优美的通信与整合方案,它应该可以成为分布式计算的基础平台。我们主要介绍它在最近流行的网格计算中的基础作用。

看完上文的介绍后,读者或许已经形成了一个基本的印象,即在SOA架构下,一切都是服务。Web服务以其松耦合、平台无关、现有的众多工具、大型企业的支持等优势,成为网格计算首选的基础平台。当今,网格计算与Web服务间的界限已经越来越模糊。

不久前,Globus Alliance新提出了WSRF(Web Services Resource Framework)规范,以增强以前广泛使用的OGSA(Open Grid Services Architecture)。这个规范将Web服务进行了扩展。在Web服务领域(以及社区),无状态被认为是一个好的工程实践,所以Web服务被设计成没有状态的、而网格要处理的是广泛分布的,异构的各种资源,资源却是有状态的。好比一个人造卫星,它时刻都有其空间位置和方向等。 WSRF因此而定义了“状态”,称一个可以通过某个Web服务访问的资源为WS-Resource。这意味着网格计算与Web服务的绑定将更加紧密,最终有可能使得Web服务成为分布式计算的基础平台标准。

总之,种种迹象表明,SOA会成为下一个主要的编程模型。在这个模型中,占中心地位的将是Web服务,各种资源将通过它来整合与集成,为用户和企业带来更多的回报。  

■ 清华大学操作系统与中间件技术研究中心 王彪(计算机世界报 2005年06月20日 第23期 B12)

引用: http://www2.ccw.com.cn/05/0523/b/0523b14_9.asp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值