版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向服务的计算和web数据管理第1章分布式面向服务计算导引
软件体系结构和分布式软件开发与执行软件的计算机系统的体系结构是相关的。本节介绍计算机系统结构以及各种计算范型。1.1计算机体系结构和计算范型1.1.1计算机体系结构
对于单处理器计算机,计算机体系结构通常指的是处理器的体系结构,它是软件和硬件之间的接口或者处理器的指令体系结构[Patterson2004]。对于多处理器计算机,体系结构通常指的是指令和数据流。FlynnsTaxonomy[Flynn1972]将计算机体系结构分为四种类型:
·单指令单数据流(SISD),即简单的处理器系统;
·单指令多数据流(SIMD),例如向量或阵列式计算机;
·多指令单数据流(MISD),例如对同一数据流执行冗余计算并对结果进行表决的容错计算机系统;
·多指令多数据流(MIMD),由拥有自己的内存和控制器、算术逻辑运算部件以及输入输出部件的独立计算机系统组成的计算机系统。
MIMD被看做是分布式系统,不同的分布式系统有不同的关注点,如图1.1所示。分布式计算关注用并行或(和)分布方式表达计算时涉及的原理、方法以及技术。分布式软件体系结构关注的是软构件间的组织和接口。网络体系结构研究的是网络节点的拓扑结构以及连接。网络通信研究协议层,协议层允许节点之间相互通信并理解彼此之间的数据格式。有些研究者用操作系统区分分布式系统和网络。当一组网络节点有独立的操作系统时,分布式系统是内聚性的操作系统。图1.1分布式系统和网络1.1.2软件体系结构
一个程序或计算机系统的软件体系结构是指系统的一个或多个结构,结构中包括软件的构件、构件的外部可见属性以及它们之间的相互关系[Bass2003]。软件体系结构的设计并不意味着开发可执行的软件。相反,它被看成软件的概念模型,是软件开发中的一个步骤。通过体系结构的设计,软件工程师能够做到:
(1) 分析设计满足需求的有效性;
(2) 考虑体系结构的各种方案,使设计容易变更;
(3) 定义构件间的接口;
(4) 降低建立软件的风险。在设计算法和实现软件之前设计软件体系结构是很重要的,因为软件体系结构可以使对系统开发感兴趣的各方(项目相关者)进行通信。面向服务体系结构(SOA)是本书中的一个重要主题,在面向服务的体系结构中,明确地包括了三方:服务提供者、服务中介和服务请求者,每一部分独立进行算法设计和代码编写。
软件体系结构强调早期的设计决策,这些决策对后续的软件工程工作以及系统的最终成功产生深刻的影响。1.1.3计算范型
历史上,已开发出的编程语言很多,但只有数千种在实际中被应用。相对于独立发展和演变的自然语言,计算机编程语言之间有很大的相似性。它们彼此相似是因为如下原因:享有共同的数学基础(例如:布尔代数、逻辑);提供类似的功能(例如:算术、逻辑运算和文字处理);基于相同的指令集和硬件;有共同的设计目标——寻找一种人类使用简单并且硬件执行效率高的语言。编程语言的设计者分享他们的设计经验。
但是有些编程语言彼此之间更相似,而另一些语言之间大不相同。基于它们之间的相似性或者范型,编程语言被分为不同的类。在编程语言的定义中,范型是表达计算或算法的基本规则、概念、方法的集合。主要的范型包括命令式、面向对象、函数式、逻辑、分布式以及SOC。
命令式计算范型,也叫做过程式计算范型,通过全部说明和全部控制被命名数据的操作并以步的方式表达计算。换句话说,数据或值最初被存储在变量中(存储单元),从内存读取,在ALU(算术逻辑单元)中操作,然后再存到相同或者不同的变量中(存储单元)。最后,变量的值作为输出发送到输入/输出设备中。命令式语言的基础是基于存储程序概念的计算机硬件组织和体系结构(冯·诺依曼机)(参见/wiki/Von_Neumann_machine的例子)。命令式编程语言包括所有的汇编语言和早期的高级语言,例如FORTRAN、Algol、Ada、Pascal以及C。面向对象计算范型和命令式计算范型基本类似,除了相关变量以及对变量的操作被封装在对象中。为了减少(简化)对象之间的交互,对象中的变量和方法(操作)的访问权限允许被定义为私有的。对象被看做程序的主要构造块,它支持继承、类层次结构以及多态。典型的面向对象程序语言包括Smalltalk、C++、Java和C#。
函数式计算范型,也叫做应用型计算范型,以数学函数表达计算。因为我们在很多数学课程中用数学函数来表达计算,所以函数式编程可能被认为容易理解和使用。但实际上,由于函数式编程和面向对象以及命令式编程大不相同,而大多数程序员习惯于用命令式编程和面向对象编程编写代码,所以转化到函数式编程就变得很困难。其主要区别是在函数式编程语言中没有存储单元的概念,每个函数用多个值作为输入(参数)并且返回单一的值(函数输出);返回值不能被存储供日后使用,它必须作为最终输出或者是作为另一个函数的参数值立即使用。函数式编程就是定义函数并组织一个或者多个函数的返回值作为另一个函数的参数。函数式编程语言主要基于将在第4章讨论的λ-演算。典型的函数式编程语言包括ML、SML和Lisp/Scheme。逻辑计算范型,也叫做声明计算范型,用逻辑谓词表达计算。一个逻辑程序是事实、规则和问题的集合。一个逻辑程序的执行过程是把问题和给定的事实与规则库中的每一个事实和规则进行比较。如果问题找到了一个匹配,则我们得到这个问题的肯定答案。否则,得到否定答案。逻辑编程包含发现事实、基于事实定义规则编写想解决的问题等内容。Prolog是唯一一个比较有意义的逻辑编程语言。
所有编程范型都支持“小型程序”和“大型程序”。前者强调使用基本的编程结构,例如,顺序、条件分支和循环结构开发程序组件或模块;后者强调开发大型应用。大型应用通常要求更多的人力和工作量,而且它们也被用在关键领域,比如,银行、电子商务、嵌入式系统和电子政务。另外一个重要的计算范型是基于构件的计算。这一范型强调的是用预先编写好的构件或模块构成大型应用。构件或模块往往是预先编译的程序单元,并在运行之前连接到应用程序。从概念上讲,基于构件的计算并不是新的范型。面向对象计算被广泛认为是基于构件的计算,它的一个类或一个对象就是一个构件。一个名字空间(一组类)也可以被视为是一个构件。然而上述观点紧紧围绕着类的定义。基于构件的计算有更为广泛的含义,它允许任何组件或模块被看成是一个构件,因此,基于构件的计算可看做一个不同于面向对象的计算范型。一个构件可以和一个对象一样小,也可以和一个应用程序一样大,而且构件的封装性很好。因此,在有些人看来,SOC是真正的基于构件的计算,服务被看做是构件。在他们的认识中,SOC基本上是基于构件的计算,但每个构件用开放标准说明。分布式计算包括在多个逻辑和物理的处理器或者计算机上执行的计算。这些单元相互协作沟通,完成一个完整的应用。计算单元可以是构件中的函数(方法)、构件或应用程序。在分布式计算范型中首先需要解决的问题是分布式单元间的并发性、并行计算、资源共享、同步、消息和通信。不同级别的分布式会导致不同的变化。多线程是一种常见的分布式计算技术,它允许同一软件中不同函数并发执行。如果分布式单元在对象级别,则分布式计算就是分布式面向对象计算。主要的分布式面向对象计算框架是由OMG(对象管理组织)开发的CORBA(公共对象请求代理体系结构)以及由微软开发的分布式构件对象模型(DCOM)。面向服务计算(SOC)也是一个分布式计算范型,SOC在以下几个方面和分布式面向对象计算不同:
(1)SOC强调的是分布式服务(包括可能的服务数据)而不是分布式对象;
(2)SOC明确区分开发责任、软件提供服务、服务中介,通过服务消费构建应用;
(3)SOC支持库(公共或私有)中重用服务的匹配、发现和调用(远程或本地);
(4)在SOC中,服务通过独立于平台和供应商的开放标准和协议进行通信。
图1.2不同计算范型的特征值得一提的是,许多编程语言属于多种计算范型。例如,C++是一个面向对象的编程语言。然而C++几乎包括C的所有特征,因此C++也是一种命令式的编程语言,我们可以用C++去写C程序。
Java是一个纯粹的面向对象的编程语言,也就是,语言的设计重点强调了面向对象,但是它仍然包含许多命令式特征。例如:Java的基本类型变量使用值语义并且不从堆中分配存储单元。Lisp包含了许多非函数特性,Lisp和Scheme是函数式编程语言,但是它们也包含了许多非函数式特征,例如当涉及到输入输出时进行顺序处理。
Prologs是一个逻辑编程语言,但是它的算术操作用的是命令方式。
总而言之,这些计算范型往往互相重叠。例如,面向对象程序设计语言通常也被看做命令式程序设计语言、SOC语言,例如,Java和C#也是面向对象程序设计语言。因此,一个编程语言可以用不同的计算范型编写程序。C、C++、Scheme和Prolog用于这些计算范型的介绍参见(Chen,2006)。
在分布式计算中,计算分布在多个计算单元(处理器或计算机)中,而不是局限在单一的计算单元中。实际上,当多核处理器的设计出现后,现在所有的大型计算系统都是分布式的。1.2分布式计算和分布式软件体系结构1.2.1分布式计算
软件体系结构描述了系统结构和功能在若干逻辑和物理计算单元上的分配。为一个应用选择合适的体系结构对于达到预期的服务质量是必不可少的。
分布式计算经常要处理多层面的挑战,包括复杂性、通信和连接、安全性和可靠性、可管理性、不可预测性以及非确定性行为。Sun公司研究员提出的分布式计算的八个谬论(/wiki/Fallacies_of_Distributed_Computing)很好地表达了这些挑战:①网络是可靠的;②延迟是零;③带宽是无限的;④网络是安全的;⑤拓扑结构不发生变化;⑥有一个管理员;⑦传输成本是零;⑧网络是同质的。
前四个谬论就是所谓的网络计算的谬论,是BillJoy和TomLyon在1991年提出来的。PeterDeutsch增加了后面的三个,这经常被称做是Deutsch的七个谬论。JamesGosline在1997年增加了第八个谬论。1.2.2N层体系结构
类似于OSI的七层网络体系结构,分布式软件体系结构通常是层次结构,其中的组件是用层来组织的,也称为N层体架构。例如,复杂的商业软件可以组成一个五层模型:
(1)表示层:图形用户界面的风格(GUI);
(2)表示层的实现:用特定的编程语言编写GUI;
(3)业务逻辑层:业务对象、规则和策略的实现;
(4)数据访问层:业务逻辑和数据库的接口;
(5)数据层:数据库。
因为同一层或一些相邻层可以放在分布式系统的同一节点上,所以层次化设计非常适合于分布式计算,层次化设计的另一个优点是维护系统时的灵活性,每一层可以相对独立地进行修改。例如,当第二层,也就是表示层的实现发生变更时,从逻辑上看其他层不必作改变,用户仍然使用同样的接口,业务逻辑层也保持不变;从编程的角度来看,如果在修改层提供不同的用户接口,那么上面的层可能需要改变。
两层体系结构和三层体系结构是广泛使用的分布式体系结构。两层体系结构,也被称做是客户/服务器体系结构,应用程序分别被建模为服务器提供的一组服务以及使用这些服务的一组客户。客户知道服务器但是服务器不必知道客户。客户和服务都是逻辑处理,可以驻留在同一计算机或不同的计算机中。图1.3是一个客户/服务器体系结构的例子。为了对客户提供可靠的服务,服务器可以组成一个允许他们之间相互备份的联盟。该联盟对用户是透明的。数据库提供的数据服务对业务应用是非常重要的,数据库是这个体系结构中服务的一部分。
图1.3具有服务器联盟的客户/服务器体系结构
客户/服务器体系结构可以进一步被划分为瘦客户和胖客户的体系结构。在瘦客户体系结构中,所有应用处理以及数据管理都在服务器端执行。客户端只负责运行表示层的软件。
在胖客户体系结构中,客户端软件实现了应用逻辑以及和系统用户的交互。服务器端只负责数据(数据库)的管理。
客户/服务器体系结构联盟的进一步发展是虚拟化,它把多个服务看成是一个单一的虚拟服务,或者将一个服务看做多个虚拟的服务。每一个虚拟服务和实际的物理服务的使用方式是相同的。为了进一步提高资源的共享率,一个虚拟服务可以有多个租户,每一个租户共享这个环境以及环境中的资源。虚拟化和多租户是实现云计算的关键技术。
三层体系结构由三个层次组成,如图1.4所示。每一层在一个单独的处理器上运行。这是一个更加平衡的方法,它比瘦客户方法的性能好,比胖客户方法易于管理。三层体系结构也是一个伸缩性更好的体系结构,当需求增加时,可以添加额外的服务。
图1.4三层体系结构
图1.5是一个三层架构的网上银行系统的例子。图中的客户端包含ATM(自动提款机)的图形用户界面、POP(购买点)以及用户账户的Web访问。应用处理层安装在银行的IT中心,负责处理所有的请求。数据,例如账户信息和存款,存储在不同的服务器中进行管理。
图1.5三层架构的网上银行系统实例
面向服务的体系结构可以实现成四层次的体系结构,如图1.6(a)所示,它包含表示层、应用层、服务存储层以及数据管理层。然而,面向服务体系结构不被局限于这一架构,因为这种体系结构只有相邻层之间才可以通信。图1.6(b)以及(c)是实现SOA的两个可能的变种。
图1.6四层体系结构及其变种1.2.3分布式对象体系结构
不同于N层体系结构,在层次体系结构中服务器和客户端有明确的区别,而在分布式对象体系结构中客户端和服务器没有很明显的区别,每个分布实体都可以向其他对象提供服务或接收来自其他对象的服务。
分布式对象体系结构在实现不同应用时更为通用。但和分层结构相比,它的设计和管理更为复杂,因为它允许系统设计者延迟决定在何处以及怎样提供服务。换句话说,这是一个开放的体系结构,允许系统根据需求添加新的资源。用分布式对象体系结构构建的系统是灵活的和可扩展的。根据需要,通过对象在网络中的迁移重新动态配置系统成为可能(例如,使用同一种编程语言)。作为为一个逻辑模型,分布式对象体系结构允许开发人员组织和管理系统。在这种情况下,通过服务和服务组合,开发者更多地关注应用的功能。
两个主要的分布式对象体系结构是OMG(ObjectManagementGroup)开发的CORBA(CommonObjectRequestBrokerArchitecture)和微软开发的DCOM(DistributedComponentObjectModel)。
在CORBA中,对象通过一个称为对象请求代理(ORB)的中间件系统通信,它也被称为软件总线,如图1.7所示。
图1.7CORBA体系结构
原则上,CORBA对象和C++、C#以及Java中的对象类似。类似于C++,CORBA对象有一个用通用语言IDL(接口定义语言)描述的独立接口,对象的接口可以用任何编程语言描述。程序转换器可以用来转换接口代码,例如C++和Java可被转换成IDL代码,因此用不同编程语言所写的对象可以相互通信。
ORB通过用IDL语言写的存根程序处理对象之间的通信。服务提供者通过IDL存根程序使服务端口为大家所知。如果一个服务请求者调用服务存根程序,这个调用将转化为对服务提供者的函数的调用。
支持分布式对象体系结构的另一个平台是Java企业版(JavaEE)。Java消息服务(JMS)是连接Java对象的软件总线,位于因特网InterOrb协议(RMIIIOP)之上的Java远程方法调用(JavaRMI)提供了一个与CORBA通信的IDL接口。IIOP上的JavaRMI是由Sun和IBM联合开发的。JavaEE的对象也可以和微软平台通信。Java本地接口(JNI)可用来和C++以及C#程序通信。
DCOM(分布式对象构件模型)是微软在VisualStudio.Net之前开发的分布式软件开发框架。DCOM允许软件构件分布在多个互联的计算机上并相互通信。框架经过了几代演变。起初,分布式软件开发框架被称为OLE(对象连接与嵌入),OLE也是一个分布式对象系统,然后被扩展到网络OLE,再到1993年的COM(构件对象模型),COM提供了对象间的通信能力。在演化为DCOM之前,在Windows2000中,对COM作了有意义的扩展,并被命名为COM+。DCOM的所有技术由VisualStudio.Net集成或取代,VisualStudio.Net是一个集所有功能于一身的面向对象、分布式、面向服务的软件开发环境。
分布式对象体系结构是SOC的前身。它有许多SOC的特点。SOC明显的进步和成就包括:
(1)所有主要的计算机公司都认可SOC标准、协议以及建立可操作服务的接口,接口与平台和语言无关。在分布式对象体系结构中,CORBA和DCOM具有相似的功能和目标,然而,在这两种环境中开发的系统不具有互操作性,DCOM也是平台依赖的。
(2)SOC明确划分了开发的职责:服务提供者开发服务,服务请求者用现有的服务建立应用,服务中介发布服务,并进行服务的匹配和发现。在分布式对象体系结构中,没有明确的职责划分,而且服务的发布和发现也没有外部机制。
(3)用Web服务实现SOC能够利用互联网基础设施传输服务,采用相同的技术和标准,也可以用局域网建立私有的SOC应用。
多线程是一个基本的分布式计算模型,允许程序员在函数和类级别上指定并行计算单元,这些计算单元是在相同或不同处理器上运行的独立进程,并依赖于操作系统的分配和调度。线程之间的通信、资源共享以及同步由程序员管理。第2章将对多线程做详细介绍。
1.3.1基本概念和术语
服务是服务制造者(提供者)和消费者之间的一个接口,计算机服务的制造者(也称为提供者)是一个开发供他人使用的计算机程序的人(或者是一个运行或存储程序的计算机),而服务消费者是使用服务的人或计算机程序。从开发者角度看,服务是一个定义良好、自包含、不依赖其他功能的环境或状态的功能模块。这些服务可以是一个新开发的模块或是对已有的程序进行包装提供新的接口的模块。1.3面向服务的体系结构和计算
从应用构建者或服务消费者的角度看,服务是为获得预期结果而由服务提供者完成的一个工作单元。和应用不同的是,服务通常不包含用户界面,而提供的是应用编程接口(API),这样服务可以被一个应用或另一个服务调用(激活)。当人使用服务时,必须添加用户界面。一个带有用户界面的服务就是一个应用。
服务消费者所需的服务发现可以获得服务中介的支持。服务中介允许服务提供者发布服务定义和接口,同时允许服务消费者搜索数据库以发现所需的服务。
SOC的一个重要特点是把软件开发分为三方(项目相关者):服务请求者或消费者、提供者和中介。这种三方结构为软件系统结构增添了很大的灵活性,并支持软件开发的新方法——组合。
面向服务体系结构(SOA)是一个分布式软件体系结构,它考虑的是通过松散耦合的服务构建的软件系统。这些服务通过标准接口,例如WSDL(Web服务描述语言)接口,以及标准的消息交换协议,例如SOAP(简单对象访问协议)相互通信。这些服务是自治和独立于平台的。它们驻留在不同的计算机上并且为了实现期望的目标和最终结果使用彼此的服务。三个独立方:服务请求者、服务中介以及服务提供者开发和维护SOA中的软件。服务提供者开发服务并且在服务中介那里发布,而服务请求者通过服务中介发现服务并使用可用的服务组合成应用。许多服务提供者可以发布相同的服务,服务请求者可以动态发现服务并且当更好的服务被发现时,在运行时把服务绑定到应用中。
面向服务计算(SOC)指的是基于SOA概念模型的计算范型。SOC包括三个并发进程中表示的计算概念、原理以及方法。这三个并发进程是服务开发、服务发布以及使用开发出的服务进行应用组合。SOA和SOC之间最为本质的区别是SOA是一个概念模型,不涉及建立一个可操作的软件所需要的算法的设计及实现。而SOC包括了软件开发生命周期的大部分,从需求、问题定义、概念模型、规格说明、体系结构设计、组合、服务发现、服务实现、测试直到评估。因此,应用建造者(服务请求者)更多地关注SOA,而SOC软件开发的所有三方都关注SOC。
面向服务开发(SOD)指的是基于SOA概念和SOC范型的整个软件开发周期,包括需求、问题定义、概念模型、规格说明、体系结构设计、组合、服务发现、服务实现、测试、评估、部署和维护,这些活动将实现可运行的软件。
在文献中,SOA常被扩展至包括SOC的含义,因此SOA和SOC可以交替使用,特别是当SOA和SOC的具体差别不是关注的重点时。另一方面,SOC常被扩展至包含SOD的含义,特别是当SOC和SOD之间的具体差别不是关注的重点时。因此在本书中,如果它们之间的差别不是关注的焦点,为了简化术语的使用,我们用SOC替代SOA和SOD。
图1.8说明了SOA、SOC、SOD之间的联系。虚线圈表示了本书覆盖的内容。图1.8SOA、SOC和SOD之间的联系
我们用“分布式面向服务软件开发”作为题目,类似于广泛使用的分布式面向对象的软件开发方法,目的是强调面向服务的软件开发在本质上是分布式的。不仅开发的软件分布在不同地点不同计算机上,而且因为应用的构建者、服务中介、服务提供者在不同地点独立地进行开发工作,所以开发过程也是分布式的。但这些开发者必须遵循同样的接口和标准。第2章会进一步讨论一般意义上的分布式计算以及SOA、SOC、SOD如何适应一般的分布式计算框架。
WS(Web服务):WS是指通过Web访问的服务。基于Web服务的计算是SOC的一种实现。它也许是最广为人知的实现SOC的例子;然而,其他SOC实现也是可能的。Web服务支持SOC,并有一系列可用的技术,包括WSDL、SOAP和XML等。XML是一种数据表示标准。SOAP可以实现跨网络和平台的远程服务调用。WSDL用来描述服务接口。UDDI(通用描述、发现和集成)和ebXML(电子商务可扩展标记语言)用于发布Web服务,这使通过手动以及编程方式发布、搜索和发现服务成为可能。有关WS技术的标准和协议不断在增加。
Web服务技术的特点有以下几个方面:
(1)服务是功能构建块。多个服务可以形成一个组合服务,组合服务又成为一个新的构建块。但是,Web服务的代码并不需要被导入并集成到应用程序。相反,服务在服务提供者的站点运行并且使用消息机制和应用松耦合。因此,服务不必用同一语言编写,也不用在同一平台开发和运行。
(2)服务是可以通过URL(统一资源定位器)识别的软件模块,模块接口、绑定的定义、描述以及发现可以用一个XML文档来描述。
(3)Web服务通常用WSDL来描述,通过HTTP上的SOAP协议访问。当添加人机界面后,一个服务或组合服务可以形成一个Web应用。Web服务通常是通过计算机程序访问的,而Web应用则通过Web浏览器访问的。
组合是SOC中的一个重要概念,它使用现有的服务组合出一个组合服务或应用。目前有两种组合方法:编排(Orchestration)和共同设计(Choreography)。在编排中,有一个主要过程,它本身也可以是一个服务,这个主要过程控制参与的服务并协调不同操作的执行。参与的服务仅仅与主要过程通信。编排对私有业务流程很有用。BPEL(业务流程执行语言)是一种支持编排的语言。在共同设计中,没有中央协调者,参与的每个服务互相通信。共同设计对于公有的业务流程非常有用,而且它允许动态组合。WSCDL(Web服务共同设计描述语言)是一种支持共同设计的组合语言。
SOI(面向服务的基础设施):SOI有两种含义。由于SOC涉及到许多新的操作,如发布、发现、基于策略的管理、编排、共同设计,这些操作在传统的计算中不常使用,所以SOI的第一个含义是指支持SOC的硬件和软件。例如,如果服务的数量很大,搜索算法必须有效,而且还要有良好的缓冲机制。否则,大量时间将花费在发现上。另一个例子是策略管理机制。当在运行时需要强制执行策略时,强制机制必须是有效的并且能实时运行。当SOC的某些操作很昂贵时,这些操作应该由硬件执行或者由硬件支持以节省成本和时间。如果SOC系统被用在关键任务的实时系统中,这一点尤其重要。
SOI的另一个含义是一个硬件系统可以像软件系统那样按面向服务的方式组织起来。这类SOI的一个例子是由Intel公司的SOI小组开发的。主要思路是把计算部件、存储部件以及网络部件看做虚拟服务。本质上,他们把这些硬部件当作服务,就像软件服务一样,他们用面向服务的方式控制这些硬件服务。类比SaaS(软件即服务)的概念,英特尔称这种技术为PaaS(平台即服务)。通过这种方式,硬件系统可以像软件系统一样被组合以及再组合,并被当作一个SOC系统来管理。这种技术的另一个意义是一旦硬件系统用SOI方式组织,硬件被看做可以再组合的服务,这样就允许在没有停止软件系统运行的前提下升级更换硬件。这意味着,目前的容错计算技术可以无缝地集成到体系结构设计中。这将是未来的研究课题。
Web2.0:Web2.0被看做是下一代Web或因特网。核心概念包括用户作为主动参与者而不是被动的观察者、同行协作、集体智慧、计算平台从桌面移到Web、以用户为中心的计算以及面向服务。一个众所周知的例子就是维基百科——一个数百万用户参与编写的在线百科全书。当维基百科成为一种流行的学习方式时,这种方法就变得极其成功。需要说明的是维基公司只有七名员工,但是他们产生出数百万页的知识,几乎所有知识都是由用户贡献的。这是一个介绍如何大规模协作创造具有重要价值事物的很好的例子。本书有许多地方引用了维基百科,这也印证了维基百科的资料确实有用。使用Web2.0开展业务的方法被称作维基经济学(Wikinomics)(/wiki/Wikinomics)。许多组织正在试图复制这种方法以创造巨大的价值。
语义Web:语义Web是由W3C提出来的,它提供了Web发展的未来远景。语义Web提供了一个通用框架,这个框架允许跨应用、跨组织、跨社区的数据共享以及重用。这一思想让信息有明确含义,使Web服务的自动处理以及集成Web上的可用信息成为可能。因为Web2.0已被使用,所以语义Web也称为Web3.0(/wiki/Web_3)。
本体:本体这个词来源于哲学,它是存在论的系统解释。在计算机科学中,本体是一个形式化说明,这个形式化说明定义了某一领域中的术语和对象以及它们之间的关系。主要关系之一是分类。通常,一个本体系统定义了一组术语词汇(词)、它们的含义(语义)、它们之间的连接(例如,同义词和反义词)以及推理规则(推理),推理规则是实现语义Web项目的主要方式。
SODB(面向服务的数据库):随着SOC的流行,数据库技术也变得很重要。SOC应用使用基于XML的数据和消息,具有树型结构,而传统的数据库是由包括行和列的表组成的。下面几种方法解决数据结构之间的不匹配问题。
第一种方法是用传统的数据库和适配器把基于XML的数据及消息转换为传统数据库中表中的数据或反之。这是目前常用的方法。
第二种方法是编码XML格式数据并把XML文件存储为数据库。这一方法面临的主要挑战是设计和实现有效的基于XML的查询语言,通过这种语言在XML数据库中检索数据以及存储数据。W3C定义的XQuery语言就是为了满足这一目标而开发的。
第三种方法是封装现有的数据库管理系统,例如将关系数据库系统作为服务,并开发相关服务,使SOA应用能和数据库系统进行通信。这些相关的服务被称为信息服务。
本体也可以作为SOC应用的数据库。事实上,一个XML数据库可以被看做是一个简化的本体系统。1.3.2面向服务的计算
在传统的软件开发范型中,开发人员获取需求,将需求转化为规格说明,然后再把规格说明转换成满足需求的可执行程序。把规格说明转换为可操作的系统有几种方法,包括瀑布模型、增量开发、面向对象计算(OOC)、基于构件的计算。每一种方法都有它自己的工程过程和技术。
SOC是一种从OOC和基于构件的计算演化而来的新范型,这种范型把开发者分成独立但相互协作的三方:应用构建者(也称作服务请求者)、服务中介(或发布者)以及服务开发者(或提供者)。服务开发者的职责是开发具有标准接口的软件服务。服务中介发布或市场化可用服务。应用构建者通过服务中介发现可用的服务并使用服务开发新的应用,通过发现和组合而不是传统的设计和编码来开发应用。换言之,应用开发是三方协作的结果。
服务与平台无关并且松散耦合,因此在组合服务时,可以使用不同提供者开发的服务。为了确保服务之间的互操作性,已制定许多标准。然而,提供者之间的竞争也非常激烈。对于一个给定的服务需求,例如,加密和添加到购物车服务,许多提供者可以实现及发布同样的服务,让应用构建者在它们的应用中使用,因此只有最好的服务才能生存。
在SOC中,单个服务是基于标准接口独立开发的。它们被提交给服务中介。在应用运行时,应用构建者或服务请求者动态地搜索、查找、绑定、测试、验证并执行应用中的服务。这种面向服务的体系结构给应用构建者最大的灵活性去选择最好的服务中介以及服务。
图1.9是一个典型的面向服务的体系结构,图中给出了它的组成部分、服务的注册和请求过程,具体的部件和步骤解释如下:
(1)服务提供者使用编程语言如C++、C#和Java以及面向服务的软件开发环境(例如,.Net、J2EE和Eclipse)开发软构件以提供不同的服务,这些软构件类似于OOC中的类和对象。
图1.9一个典型的面向服务的体系结构
(2)服务提供者在服务中介注册服务并在注册中心发布服务。
(3)目前,服务中介使用UDDI或ebXML标准,这些标准为注册和发布Web服务提供标准服务接口。对UDDI来说,注册一个服务所需的信息包括:①白页信息:服务提供者的名称、身份证明,例如DUNS号码、联系信息。②黄页信息(商业类):行业类型、产品类型、服务类型、地理位置。③绿页信息:关于其他Web服务如何访问(调用)服务的技术细节,如API(应用编程接口)。UDDI的白页和黄页类似于电话的白页和黄页。UDDI标准只支持目录,而ebXML同时支持目录和库。
(4)应用构建者通过互联网查找中介服务注册中心,寻找需要的服务以及如何使用服务所需的说明。服务中介中的本体和分类法可以帮助在请求和注册的服务之间自动匹配。
(5)一旦服务中介在注册中心发现一个服务,它就为应用构建者返回服务的详细信息(服务提供者的绑定地址和调用该服务的参数)。
(6)应用构建者使用可获得的服务进行组合以生成所需的应用。这是使用服务模块构建大型应用程序的更高层次的编程。在这种方式下,应用构建者不必知道低级编程。在应用程序开发平台的帮助下,基于组合服务的应用程序代码可以自动生成。当前应用开发平台包括.Net、J2EE、SOA套件、ActiveBPEL以及IBM的WebSphere(它支持高层次的利用已有服务组合应用)。
(7)通过中介发现的服务代码驻留在远程站点,通常是在服务提供者站点,或者如果中介提供服务库则驻留在服务中介站点。SOAP调用可用于访问远程服务。
(8)服务提供者站点的服务直接与应用通信并传递服务结果。1.3.3面向对象计算与面向服务计算
虽然SOC是从面向对象计算OOC发展来的而且它们看起来也相似,但是SOC与OOC在许多方面有所不同。在过去,人们误以为OOC与过程计算没有太大的不同,因为传统的过程语言已经有数据抽象的概念,如结构,它类似于类,以及过程,它类似于方法。尽管OOC看起来与传统的计算相似,但是,设计者用类和对象思考从根本上改变了他们的思维方式。因此,在OOC中出现了许多新的概念和方法,例如设计模式、继承、动态绑定、多态、设计层次以及UML(统一建模语言)。
同样,SOC与OOC不同,因为现在的设计师会用服务、工作流、服务发布、发现、利用可重用服务的应用组合以及策略管理思考问题。这些概念确实不同于OOC。
进一步,服务可以在Web上或私人库获取,而且一个应用能够在运行时搜索发现新的服务并绑定服务到应用程序上。应用构建者不需要购买安装服务构件(提供服务的软件),相反,应用可以远程访问服务构件,并支付使用的服务,软件升级变得更加容易。一旦服务构件升级,新服务将立即提供给应用程序,节省了客户端计算机卸载并重新安装软件的大量成本。软件将根据使用程度收费。因此,用户将不必支付不必要的软件费用。换句话说,SOC提供了软件应用的新模式:当需要使用软件时,以SOC提供的支付模式取代以前的购买—安装—使用模式。
SOC也对系统结构、可信性以及系统的可靠性、安全性、系统重新配置和重新组合等机制产生重大影响。这些机制与OOC有很大的不同。例如,用对象的动态创建和动态绑定取代OOC中的静态组合,SOC允许实时动态组合并在运行时使用被发现的服务。由于新服务将在运行时发现,SOC也需要一个运行时优先级划分及选择机制,这种机制基于实时运行的互操作性评价、测试和其他标准。在系统故障或需求变化的情况下,SOC还需要一个分布式重新配置和重新组合的策略。这种策略完全不同于OOC。
在OOC中,尽管某些形式的动态绑定可以使用,但必须手动开发代码。目前的OOC动态绑定机制允许多态,也就是说,属于一个类家族的方法在运行时可以相互替代。然而,只要新的服务具有相同的WSDL规范,SOC就允许一个无关服务取代现有服务。
在SOC中,通过DCS(动态组合服务),一个错误的服务可以很容易地被另一个已准备好的服务取代。DCS也是一个被监控和可更换的服务。关键是每个服务独立于其他服务,因此,更换很自然,只有那些受影响的服务才被关闭。这种方法允许通过这种方法,处理重要任务的应用程序能在最短的时间内得以继续执行。
虽然SOC与OOC共享某些概念和技术,如构件设计和构件重用,但SOC的创新很明显。图1.10对比了这两种范型的主要技术和开发方法。
图1.10OOC和SOC的概念及技术
表1.1OOC与SOC的比较
1.3.4面向服务的企业
由英特尔的研究人员提出,并被OASIS作为标准的面向服务企业(SOE)是一个通过SOA系统实现的并能向外展示业务过程的一系列技术。SOE为管理采用SOA技术的业务过程提供了一个框架。其核心是,SOE是一个系统结构,支持核心企业计算。一个企业不是一个独立的系统,也不是一个包含所有系统的业务单元,确切地说,它包含了跨越多个公司的所有系统。例如,某州某部队的计算机系统不是一个企业系统,但用于控制和管理国防部主要功能的DoD(美国国防部)系统,却是一个企业系统。大型零售店(如沃尔玛或Target)的供应系统是企业系统的另外一个例子。因此,一个企业系统远远大于单个系统,它可能包括多个国家或州的上百个系统。SOE就是一个支持企业级运作的系统。
作为一个企业级系统,虽然SOA的传统元素,如查询、发现、接口以及服务调用是参与系统共享的共同元素,但不是SOE的重点。这些元素说明如何构建服务以及如何使用服务,但没有说明服务集如何支持企业的业务过程或一个原子服务在企业内部如何起作用。
SOE面临的主要挑战是设计企业内部的面向服务的业务过程,并使这一过程是端到端可见并可管理。随着企业内部提供的服务数量增加,定义并跟踪执行模式也变得越来越困难。SOE在SOC中还是一个很新的研究领域,而SOC本身在目前来说也是一门新发展的学科。
图1.11是一个层次化的SOE的例子,该SOE以组合电子商务应用和Web服务作为基础。SOE的最上层是可配置的业务逻辑。第二层是ebSOA(用于电子商务的SOA),一个服务中介标准,包含注册中心和存储库。接下来的一层是面向服务管理(SOM),它实现非功能特性,如容错计算、可靠性、安全性和策略。面向服务基础设施SOI层提供虚拟服务,用来表示那些可以由硬件组件提供的服务。例如,英特尔公司正在开发这一层,把它的硬件资源,包括计算资源、存储资源、网络资源、设备、传感器和执行器映射到面向服务的体系结构中。底层是执行所需任务的硬件设备。
图1.11SOE框架1.3.5面向服务的系统工程
面向服务的系统工程(SOSE)是系统工程、软件工程和面向服务计算的一个组合。它建议在系统工程原则下开发面向服务的软件和硬件,这些原则包括需求、建模、规格说明、验证(verification)、设计、实现、确认(validation)、运行以及维护。目前关于SOC的研究和实践主要集中在SOC软件的功能和协议上。当SOC用于处理重要任务的应用程序,并且整个计算和通信基础设施也使用SOC时,这时就必须解决有关SOSE的问题。
表1.2列出了每个开发阶段典型的SOSE技术。许多技术是相互协作的。例如,测试用例可能会由三方协作设计。服务提供者为服务中介和服务请求者提供单元测试用例样品以供复用。服务中介通过基于规格说明的测试用例生成工具提供它自己的测试用例,服务中介甚至可以提供这个工具供所有方使用。应用构建者通过服务中介检查测试用例样品,使用服务中介提供的测试用例生成工具,甚至提供自己的应用程序的测试用例。
表1.2SOSE技术
虽然基本的工程原则相同,但在SOC范型中应用这些原则的方式却不同。具体来说,大多数工程任务将在运行时以协作的方式完成。因为系统可以在运行时对已有的服务进行组合,许多工程任务是在信息不完整以及重要信息在应用前才取得的情况下执行。这样,在某种程度上,SOSE与传统工程有很大不同。对于传统工程,工程师有关于系统需求的完整信息而且在系统设计启动之前已进行了深入分析。
SOC是一种新的计算范型,因此需要发展新的工程技术使SOC软件和硬件可信、可靠、外部安全、内部安全。SOSE技术不同于传统系统工程技术,尽管基本工程原理仍然保持不变,但由于运行时组合以及再组合等动态特性,新应用可能无法由传统系统工程评估,因为许多构件可以动态发现和组合,而它们的源代码无法获得,因此,需要应用动态运行时系统工程技术。
1.4.1传统的软件开发过程
软件开发过程定义了开发步骤以生产高质量的软件。已经提出并使用的过程包括瀑布、增量、面向对象以及基于构件的开发过程。面向对象和基于构件的软件开发过程是类似的,图1.12是一个可能的过程。两者的开发过程都需要把被开发的系统分解成构件,首先开发构件的代码,然后使用构件建立应用。1.4面向服务的开发与应用和基于构件的方法相比,面向对象的开发过程更具体,它定义了一组具体特征如封装、继承、多态和动态绑定。一般来讲,面向对象的开发肯定是基于构件的,但基于构件的开发不一定是面向对象的。
图1.12面向对象和基于构件的软件开发过程1.4.2面向服务的软件开发
传统的计算范型主要影响软件开发过程中的设计(算法)以及实现(编码)阶段。SOC则影响整个软件开发过程以及软件生存周期。为了更好地理解这种影响,我们首先看看SOC软件的特点。
(1)自包含和自描述:服务通过服务中介发布,被发布的服务包含足够的信息,可令其他服务在运行时发现、匹配、绑定并远程调用它。
(2)再配置和再组合:新发现的服务以两种不同的方式——再配置和再组合组合到已有服务中。再配置:用满足同样规格说明的新服务替换现有的服务,当服务出现故障或不可用时执行再配置。再组合:从理论上讲,在SOC系统中,用户可以在运行时改变服务的规格说明,结果是再组合,在此期间,新的服务可以被包含进组合服务而现有服务可被取消。
(3)动态验证:动态修改的规格说明必须动态校验,以保证规格说明所要求的属性。
(4)动态确认:动态再配置或再组合的服务必须动态确认(测试),以确保它满足规格说明。
(5)动态评价:动态再配置和再组合可能导致服务结构变化,属性(可靠性、外部起安全性、内部安全性和性能)必须动态评价。
在传统的软件开发过程中,整个过程往往由开发者所在组织管理。新的面向服务软件的开发分为三个平行的过程:服务开发,服务发布到服务中介,应用构建(组合)。
服务有两类:原子服务和组合服务。原子服务是有标准接口的对象。因此,原子服务的开发与面向对象软件开发没有太大的不同。主要的区别是,对象通常需要被集成到同一种编程语言编写的应用中,而原子服务可以驻留在远程计算机,可以被不同编程语言编写的应用调用。因此,原子服务接口的设计必须遵循预先定义的标准。该接口必须包含服务的功能描述以及调用服务的技术细节,从而使服务可以被其他程序发现并正确调用。WSDL(Web服务描述语言)是一种主要的描述服务接口的语言,SOAP(简单对象访问协议)用于传输服务之间的消息。原子服务既可以从头开发也可以把现有的软构件包装成服务。
组合服务的开发与传统的软件开发过程不同。虽然传统的软件开发允许用较小的构件构造较大的构件,但这种构造是静态的和人工的。组合服务的构造也可以是静态的和人工的,但是,它也可以是动态的和自动的。也就是说,当需要的服务不存在而需要从现有的服务组合时,可以在运行时组合。现有的服务包括通过服务中介发布的服务。一旦服务被组合,组合服务可作为新服务发布,供将来的服务或应用组合。SOC应用和组合服务几乎相同。前者有一个供人类用户访问的GUI,而后者则有供计算机程序(应用或服务)访问的编程接口。
图1.13说明了OOC和SOC的开发过程。通常,一个OOC应用由同一个团队使用相同的语言开发(如图左部分所示),而一个SOC应用是通过已开发好的服务创建的(如图右部分所示),这些开发好的服务由独立的服务提供者开发。应用构建者通过服务目录和服务库,查询所需服务。如果服务无法找到,应用者可以发布需求或自己开发。服务提供者则根据自己的需求分析或查询目录中发布的需求来开发服务。
图1.13面向对象与面向服务的软件开发过程
与传统的软件开发一样,SOC软件开发过程开始于需求分析和定义。图1.14是一个典型的需求开发的步骤。在需求开发结束时,用正规的模型以及规格说明语言描述待开发的系统。图1.14需求定义过程
应用构建过程的其余部分和传统的软件开发很不一样。应用构建者用服务中介发布的现有服务建立应用。在这一过程中,应用构建者专注于业务逻辑,而不是编程任务。如果现有服务无法满足应用的功能要求,应用构建者可建立一个组合服务来满足要求。图1.15从应用构建者的角度说明了软件组合过程的步骤。
在图1.15中,我们把数据和本体说明从功能说明中分离出来。在SOC中,为方便动态组合和再组合,我们建议,把数据如策略、规则、配置参数从功能说明中分离出来。把这些数据存储在本体或配置文件中,允许对它们进行修改,并在不停止程序运行的情况下获得相应的运行效果。基于策略的计算是这种分离的一个很好的例子。
图1.15面向服务的应用开发过程
使用传统的验证技术,如模型检测技术验证功能说明以及数据/本体说明。从规格说明可以生成测试用例,这个规格说明可以是基于功能的,也可以是基于流程的。
一旦工作流经过校验,就需要发现远程服务,如果没有发现服务,则需要单独开发。当所有的服务绑定到工作流后,工作流在给定的环境下例如仿真环境就可执行。应用首先在仿真环境中测试,然后部署到真实环境中,在真实环境中收集执行数据用于各种分析。如果语义信息,例如策略,存储在本体中,可通过本体或策略确认执行。在确认和评价的基础上,通过运行时绑定不同服务,系统可以被再配置。需求也可以被修改。在这种情况下,需要停止系统,手动修改模型和规格说明。1.4.3面向服务计算的应用
作为一种通用的计算范型,OOC能应用的领域,SOC也可以应用。特别是,OOC可被视为SOC的一部分。每一个OOC应用在理论上可以看做是一个SOC应用。但是,在许多情况下,SOC具有独一无二的优势。
电子商务一直是SOC的据点,在电子商务中有许多服务都是动态的,而且可以通过因特网远程调用。例如,旅行社可以远程调用航空公司、酒店和汽车租赁公司提供的服务,但把服务代码导入到旅行社的本地服务是不可行的。同样,建立一个网上书店需要访问多个伙伴的服务,包括银行、出版商和运货商。其他新兴的应用领域包括银行、医疗保健、电子政务,在这些领域,来自不同部门的服务松耦合,给客户提供协作服务。
机器人和嵌入式计算是传统的应用领域,在这些领域,控制程序是设备的一个集成部分。把SOC引入这些领域之后,因为部分程序被实现为远程服务,而不是把整个程序预装到系统中,所以机器人或嵌入式系统在完成任务时变得更为灵活。在不中断执行的情况下修改远程服务,从而改变应用的行为和执行过程。这一特征特别有吸引力,因为机器人或嵌入式系统可能位于物理上无法到达的位置。
今天,许多制造过程都由计算机控制,在这些过程中引入SOC软件使过程修改变得更容易、更有效。
图1.16是亚利桑那州立大学SOC研究和应用项目的一部分。SOC软件和硬件的开发是研究和应用的核心。开发的概念、原理、模型、技术、方法、工具和框架支持多个领域的应用,包括电子商务、工业过程控制、指挥和控制、嵌入式系统、机器人、生物/医疗信息系统和基于本体的教育系统。大部分的研究和实践已融合到云计算环境。
图1.16亚利桑那州立大学的SOC研究和应用1.4.4Web应用组合
传统的桌面应用有一个唯一的切入点——main方法,它被编译成一个独立的可执行文件。虽然一个应用可以包含许多可执行文件和数据文件,但只有一个项目文件,该项目文件把执行文件和数据文件组织成一个定义良好的应用领域。
一个Web应用包含一系列的Web页面,其中每个都与可执行文件和数据文件相关。即使设计师从概念上设计了一个“进入”页面,我们依然可以从不同的页面中进入一个网站应用。Web应用通常按照事件驱动的计算模型来处理用户交互和数据通信。但是,如果一个Web应用是由Web环境下独立的任务以及公有资源组成的应用领域,则这个Web应用仍被认为是桌面应用。当把远程Web服务和数据作为功能和数据单元,Web应用领域就是分布式的。Web应用中的每一个页面是一个活动的对象。页面之间以松散耦合的方式互相通信,支持共享内存、同步以及异步调用。
面向服务计算以及相关的技术,如Web2.0、Web3.0、Mashup和云计算的发展,使Web应用迅速扩展。几乎每一个桌面应用都可以找到对应的Web版本,或者将会找到对应的Web版本。云计算,一种可以随时随地访问程序和数据的技术,是计算从桌面应用到基于Web应用的最新驱动力。
1.Mashup
在Web开发中,Mashup是把两个或多个资源中的数据或功能集成到一个单一的应用中的一种Web技术[Wikipedia]。Mashup作为一种面向服务的组合方法,能够把多种类型的资源,例如Web服务、服务、应用编程接口以及数据源组合成应用。例如,可以通过组合谷歌地图以及物业价格列表产生一个像/这样的房地产网站。/pipes/的Yahoo!Pipes是众多使用Mashup工具应用的一个例子。
Mashup的一个简单版本是Widget,它把一个Web应用的数据直接导入到另一个而不用编程。2.云计算
云计算具有瘦客户机和胖服务器的体系结构。客户端可以瘦到只运行一个Web浏览器。服务器通常是一个虚拟服务器,称为云,是由不同组织拥有的多个物理服务器组成的。计算由云端的服务来完成,数据也存储在云端的文件系统或数据库中。云计算强调以下关键概念:
(1)软件即服务(SaaS):执行各种任务的软件不在客户端安装,它们作为服务安装在云端。SaaS强调不仅把Web服务应用的构件,例如Web服务,而且也把整个Web应用都视为服务。
(2)平台即服务(PaaS):软件开发环境,例如基于Java进行软件开发的Eclipse以及基于C#进行软件开发的VisualStudio都不安装在客户机上。它们安装在云端供开发者远程使用。
(3)基础设施即服务(IaaS):支持计算和信息管理的基础设施不在客户端,这些基础设施包括计算资源、存储、通信带宽以及数据库。
对于所有的云资源,成本模型是随用随付的,无需购买或拥有基础设施、硬件、软件、编程环境以及数据。亚马逊的弹性计算云(AmazonEC2)、谷歌的App引擎和微软的Azure是目前可用的主要云计算环境。
云计算扩展到包括如下众多功能:例如设备即服务(DaaS)、机器人即服务(RaaS)、测试即服务(TaaS)和X即服务(XaaS),其中X可以代表不同资源。
虽然SOC/SOA在过去的十年间一直在发展,并且已被所有主要的计算机以及软件公司所采纳,如BEA、HP、IBM、Microsoft、Intel、Oracle、SunMicrosystems和SAP软件,也包括一些政府机构例如美国国防部、英国医疗保健系统、加拿大各省政府以及亚利桑那州。但许多人认为,SOA是一个新的领域,还有许多工作要做。特别需要指出的是,SOA的批评者指出了几个待改进的问题。例如,SOA缺乏一个统一的大家都同意的定义。有些人认为,SOA没有一个良好的定义,因此很难标识SOA的特征。1.5讨论
维基百科对SOA做了如下定义:面向服务的体系结构SOA是一种体系结构设计模式,定义了生产者与消费者之间的松散耦合关系。虽然与软件、编程或技术没有直接关系,但它往往和分布式计算和模块化编程的演化混淆。
这个定义并不是一个好的SOA定义,因为这种描述也符合面向对象的计算。一个面向对象程序也可以是松散耦合的。事实上,松散耦合是面向对象软件的主要特征之一。进一步讲,面向对象计算也是分布式计算,因此它也是常见的模块化编程技术之一。一些关键的SOA属性,如实现与定义分离,也被用于面向对象软件,因为类接口的定义与实现也是分离的。事实上,在计算历史上,定义与实现分离的概念,包括数据抽象和过程抽象都已经存在三十多年。因此,这个概念不是新的也不是SOA仅有的。难怪在维基关于SOA定义的同一页上,所有参与编辑的作者都一致声明:除了字面上的翻译,没有一个统一的大家都同意的SOA定义。它是以面向服务作为基本设计原则的体系结构。在SOA环境中,访问一个服务时,不用了解它底层平台的实现。这些概念可以用到商业、软件以及其他类型的生产/消费系统中。
换言之,即使维基是由活跃于世界各地的SOA领域的作者编辑和贡献的,但这些作者也不同意SOA的定义。
还有一些SOA的定义基于通用的SOA协议。例如,如果一个软件程序使用XML、WSDL、OWL、BPEL以及其他协议或标准,那么就是一个SOA软件。这个定义仍然不够好,因为SOA协议正在不断被更新和修订,有可能这些协议的新版本和以前的版本不同。SOA的发展历史证明,几个SOA协议已被一个全新的协议取代,具体来说,BPEL取代了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论