构造SOA 实现架构变迁

时间:2022-06-13 05:58:51

软件体系结构是软件工程领域中一个重要的研究内容,倍受人们的关注。许多学者对此做了大量研究,并取得丰硕的成果。

近两年,SOA(Service Oriented Architecture,面向服务体系架构)的出现,是软件开发新的里程碑。从面向对象体系结构到SOA,软件体系结构实现了一次跨越。

面向对象体系:软件工程化基础

软件体系结构经历了数次变革,目的都是为了解决应用领域不断增加的复杂程度。面向对象体系结构就是在面向过程的基础上发展为目前普遍应用的体系结构,它使软件工程化成为可能。

OOA横空出世

面向对象技术产生于上世纪80年代,为人们提供了一种新的认知和表示世界的思想和方法。在此基础上,面向对象的计算机程序设计语言、面向对象的软件设计方法、面向对象的数据库等新的方法也应运而生。

面向对象技术为软件工业实现工程化提供了强有力的支持。正是面向对象技术造就了组件、构件、中间件等概念,解决了软件系统的可操作性、可扩展性、语言独立性和跨平台的操作能力,形成了OOA(Object Oriented Architecture,面向对象的体系结构)。OOA模型如图1所示。

在模型图中,系统内核对象中封装的是能为用户界面对象和所有应用对象所共享的数据及相应的操作;用户界面对象中封装的是用户界面数据及相应的操作;应用对象中封装的是应用数据及相应的操作。所有这些对象通过相互间的通讯协调来完成指定功能。

从系统构成的角度来看,这种模型的结构是无中心的。应用系统由各对象实体构成,各对象实体具有平等的地位。

OOA的出现,大大推动了软件系统的开发,并产生了一些新技术。如微软公司引入了容器和服务器的概念,产生了OLE(Object Linking and Embedding,对象链接和嵌入)技术,并发展为ActiveX技术。

面向对象体系结构虽然提供了封装性、多态性和继承性,但还存在一些不足:

・需要依赖具体的编程语言;

・封装粒度小,耦合度高;

・需要用户对类的结构和宿主语言有较深入的了解;

・未形成统一的模型和概念。

・基于以上因素,面向对象体系结构就难以形成标准和开发规范,不能完全达到软件重用的可移植性和互操作性的要求,结果产生大量的“对象孤岛”。

基于对象的组件体系结构

一个组件由一组对象构成,它们共同工作来提供一种系统功能。目前,基于对象的组件软件体系结构中的组件是指可插入到语言、工具、操作系统、网络系统中的二进制代码和数据。

在组件(包括后面介绍的服务)开发中,都需要进行接口设计,这样软件实体就可以实现和公开其定义的关键部分。因此,在基于组件和面向服务的系统中,“接口”的概念对于成功的设计非常关键。接口可分为已接口、公共接口和双接口等三种类型。

基于对象组件的软件体系结构为设计大型应用软件系统给予了强有力的支持,它是大型系统中比对象的结构粒度更高的封装体,其声明和对象对系统的其他部分是不透明的。

这意味着对象组件不可能和系统的其他的部分有相互依赖的关系,它封装的所有对象都被隐藏起来了。这样的组件作用就好像是一个软件意义上的集成电路,可以通过一些组件按照一定的逻辑关系构建而成软件系统,比过去的更复杂,质量更高,性能更卓越。

SOA:整合旧有资产

随着应用技术的不断发展,人们已经开发出针对每一种系统的异质组件,但是在企业分布式系统中需要将这些组件统一在一起的时候就出现了问题。这些异质组件有的是用EJB开发的,而有的用的是CORBA。这两种技术根本就不相容,往往当位于防火墙后的组件被定位后,消息却无法通过防火墙。尽管双方都在努力的改进以便能够互相兼容,但程序员们不得不花费大量的精力和时间来处理它们的不兼容性。

即使没有异质组件的兼容问题存在,组件之间仍然需要深度的互相了解。比如要想使用一个声明组件(claim component),除了知道数据传输协议和数据报文格式以外,还必须知道它的准确位置,并且还要很清楚地了解有关其接口的一切,以便应对接口变化。

服务的概念

服务概念在过去四十多年被人们经常使用。在上世纪九十年代早期,处于主导地位的事务处理系统就采用了“服务”这一概念。很多C/S系统也努力用这个词来显示其具有远程访问的能力。后来在互联网的应用中,Web服务又赋予“服务”新的含义。

SOA中的服务代表的是一个由服务提供者向服务的请求者的处理过程,这个过程在被请求之后,服务请求者就会获得所需要的一个结果。在获得服务的过程中服务请求者可以向任何能够提供此项服务的服务提供者来请求服务,服务实现的过程是透明的。

SOA中的服务有如下特征:

・可在网际间请求调用;

・具有良好的兼容性;

・粗粒度的操作;

・松散耦合的关联;

・基于接口的设计;

・具有透明的搜索和查询。

面向服务体系结构模型

在发现新的商机或危机的预期下,SOA体系结构形式旨在提供企业业务解决方案,这些业务解决方案可以按需扩展或改变。SOA解决方案由可重用的服务组成,带有定义良好且符合标准的已接口。

SOA中的服务通过服务描述和传输实现了相互之间的交互,如图2所示。其中,服务描述是一种经过协商的模式,用于描述服务是什么、应该如何调用服务以及成功地调用服务需要什么数据等。传输是一种机制,用于将来自服务使用者的服务请求传送给服务提供者,并且将来自服务提供者的响应传送给服务使用者。

SOA中的工作角色

SOA中有两个关键角色:服务请求者和服务提供者。服务使用者是一个应用程序、一个软件模块或需要一个服务的另一个服务。它通过传输向提供者发出请求消息,执行服务功能。服务提供者是一个可通过网络寻址的实体,它接受和执行来自使用者的请求。

目前,大部分厂商和产品都支持WSDL,它规范定义了一个XML词汇表。该词汇表依照请求和响应消息,在服务请求者和服务提供者之间建立了一种契约,并使用标准的传输方式来进行传递。WSDL描述内容包含:请求消息格式、响应消息格式。服务请求者和服务提供者之间的简单结构如图3所示。

一些服务提供者同时也是服务请求者,它们聚集其他服务提供者的功能来构造复合的更高级别的服务。soa中的业务流程就是为实现特定业务目标而执行的一组长期运行的动作或活动,它是一个服务的集合,可以按照特定的顺序并使用一组特定的规则进行调用,满足业务要求。可以将业务流程本身看作是服务,它是相对于服务的更粗粒度的操作,这样就产生了分布式系统可以由不同粒度的服务组成的观念。聚集服务的结构如图4所示。

当在开发的分布式系统中引用第三方提供的服务软件产品时,可以在服务处查找能够满足自己需求的服务。服务是一个服务和数据描述的存储库,服务提供者可以通过服务它们的服务,而服务使用者可以通过服务发现或查找可用的服务,其结构如图5所示。其中,绑定是在检索完服务描述之后,服务使用者继续根据服务描述中的信息来调用服务。

从面向对象到SOA

面向对象的技术的抽象粒度级别集中在类级,其基本思想是对问题域中客观存在的各项事物建立相应的对象,它的属性和方法分别描述事物的静态特征与动态行为,对象间的交互是通过对其方法的调用进行的。

对象封装了它的属性和行为,实现了信息隐蔽,同时对象内部行为的修改不影响外部对它的调用。

在面向对象技术中,当一个对象通过过程调用与其他对象交互时,必须知道其他对象的标志。当一个对象的标志改变时,需要对所有调用这一方法的对象进行修改,这种相关性是一种紧耦合的模式。

与面向过程相比,这种模式在一般的小型系统中充分体现了它的优越性,但是对于一个大系统来说,这样的抽象级别太低了。

此外,在对象基础上衍生的组件,是对象的封装体,其特点是通过接口技术将一些相关对象有机地组合在一起,提高了抽象粒度级别,但是由于各种组件技术互不兼容而直接影响了在大型分布式系统中的应用。

SOA是在面向对象体系结构基础上扩展的新体系结构,他们之间有一定的内在联系(如图6所示)。形成SOA的基本元素是服务,它是组件的封装体,相对于组件来说,服务是更高一级的抽象级别。

另外,服务是无状态的独立体,它在实现时不需要从一个请求到另一个请求的信息或状态,也不需要依赖于其他服务的上下文和状态,以一种松耦合的模式来促进系统的灵活性和敏捷性。

虽然组件是实现服务的最好方法,但好的基于组件的应用程序未必就构成好的面向服务的应用程序。理解了服务在应用程序体系结构中所起的作用,认识了面向服务的方法意味着增加应用程序体系结构层,开发人员也就明白自己的设计工作还是从最小的粒度(如:对象、组件)开始。

但是作为一个整体,它却不是面向对象的,其主要原因在于接口本身,在设计中采用了一些更新的技术。

虽然基于SOA的系统并不排除使用面向对象的设计来构建单个服务,但是其整体设计却是面向服务的。由于它考虑到了系统内的对象,所以虽然SOA是基于对象的,但是作为一个整体,它却不是面向对象的。

SOA搭建了现代化管理和信息化建设之间的桥梁,给企业的分布式管理系统带来的福音。

SOA为企业提供灵活性和响应能力,使企业迅速提高应变能力和降低成本,帮助企业在市场经济环境中取得成功。

上一篇:“智”行千里“路”无忧 下一篇:Web服务 标准化的青春期