【IT168 技术】 SOA是一种架构和组织IT基础结构及业务功能的方法,是一种在计算环境中设计、开发、部署和管理离散逻辑单元(服务)模型的方法。作为信息化发展和改革的前沿,制造行业的SOA应用,应当首先被提上研究同程。笔者希望通过本文能够给中国制造企业的信息化提供一点参考,也能够给一些为制造企业提供信息咨询服务的提供商们提供一些指导性的参考依据。第三部分是分析业务流程,并给出完整的面向服务的信息化构建方案;该方案的设计与实现是本文的重点。
Web Services简介
Web服务是一段位于Internet上的业务逻辑。可以通过基于标准的Internet协议(如HTTP或SMTP)访问蹲1。Web服务技术已经掀起了IT业的浪潮,无论是平台供应商、解决方案供应商,还是服务提供商都纷纷在自己的平台、解决方案以及服务中加入了Web Services。以Microsoft,IBM,Oracle,HP,BEA,SAP等为首的计算机业巨头们无一例外地将自己的软件产品/解决方案全面支持WebServices。他们共同成立了WS-I(Web Services Interoperability Organization),致力于推广Web services的全面应用㈨。Web服务技术的目标是实现一种更高层次的分布式计算环境,在这个环境中,业务逻辑能够以与平台和语言无关的方式进行无缝交互。
Web服务的出现为实现这种以人为本的业务端编程思想提供了更便利的条件。Web服务作为一种基于开放标准的新型分布式应用构件,一方面为构造松耦合应用提供了支持,另一方面由于服务在满足用户需求的能力方面具有优势,使得用户直接参与软件构造只需组合服务而不必重写代码。
Web服务通常应用于下列场合:
1)跨越防火墙的通信
客户端和服务器端之间通信都会有防火墙或者代理服务器。传统的实现互相通信的方法是在分布式对象,如DCOM、CORBA之间进行相互的远程过程调用,但在这种场合下HTTP协议的特性没有得到应用,因此在Internet环境下的远程过程调用不是一件容易的事情,同时在Internet上使用远程过程调用还存在安全问题,防火墙和代理服务器还有可能阻挡这种类型的数据传输。HTTP是在Internet上发送消息的标准协议。Web服务使用基于XML消息处理作为基本的数据通信方式,应用程序可以使用HTTP和XML消息等标准在基于Web的应用程序之间交换信息,从而跨越防火墙。
2)应用程序集成
企业里经常要把不同语言写成的在不同平台上运行的各种程序集成起来。大型公司常常有很多部门,每个部门都使用最适合自己特定需要的应用程序和平台。为了能够让公司各部门之间进行通信,首先应该将公司内部的应用程序和商业过程集成在一起。Web服务的丌放标准使组织创建可重用的应用程序接口。当被包装成一个或一组Web服务之后,任何应用程序理论上都可以通过SOAP消息与任何其他应用程序进行通信。
3)B2B的集成
跨公司的商务交易集成通常叫做B2B集成。各企业可以采用Web服务与其他企业进行通信。通过Web服务能够将数据及应用程序的集成扩展到公司的防火墙之外,使公司能够与其伙伴、供应商、发行商和客户共享数据和商业过程,从而加强企业之间的合作关系。
4)软件复用
软件复用是在软件开发中避免重复劳动的解决方案。Web服务实现了业务级别的软件复用,例如在B2B的集成中,各企业之间通过互相调用Web服务,实现了Web服务的共享,Web服务的使用企业不需要再重新开发其他企业中已经存在的服务。
Web Services和SOA之问的关系
Web Services和Service—Oriented Architecture作为实现分布式系统和履行公司内部、公司之间的应用整合的技术和架构出现。SOA和Web服务的体系结构是两个不同层面的问题,前者是概念模式,面向商业应用;后者则是实现模式,面向技术框架。
面向服务的体系结构所表示的是一个概念上的模型,在这个模型中,松散耦合的应用在网络上被描述、发布和调用。而Web服务则是一组由协议构成的协议栈所定义的框架结构,它定义了在不同的系统之间通信松散耦合的编程框架。也可以认为,Web服务体系结构实际上是面向服务的体系结构的一个特定实现;面向服务的体系结构作为一个概念上的模型,将网络、传输协议以及安全等具体的细节都遗留给特定的实现。Web服务中的SOAP,WSDL等都是具体实现细节的标准。
Web Services与传统的分布式计算技术
为了使分布式系统正确地工作,运行于网络中各台计算机上的应用程序组件必须能够互相通信。20世纪90年代初,包括OMG(对象管理组织)、Microsoft、Sun和IBM在内的许多公司和组织都意识到了这一点,并开始发展它们自己的技术以实现分布式组件之间的通信。OMG的公共对象请求代理体系结构(CORBA),Microsoft的分布式组件对象模型(DSOM),Sun公司的远程方法调用(RMD)以及IBM的分布式系统对象模型(DSOM)都能允许运行于不同地点的程序之间进行通信,就像在同一台计算机上一样。这是一项重大进步,因为企业可以使用这些技术把应用程序与其商业伙伴的计算机系统集成起来。
但是,这些技术之间的可互操作性(与不同供应商、不同平台的软件之间通信和共享数据的能力)是非常有限的。例如:DCOM和CORBA这两个最通用的技术之间却不能简单地通信。DCOM和CORBA组件之间通常要通过COM/CORBA桥来通信。如果DCOM和CORBA的底层协议发生改变的话,程序员就必须修改桥以反映这种变化。这些问题削弱了分布式计算对于促进商业过程集成和自动化的能力。
Web服务通过扩展了有限的客户操作性而改进了分布式计算的能力。与DCOM和CORBA不同,Web服务使用了开放的(即非专有的)标准。这意味着Web服务理论上可以是任何两个软件组件进行通信(即使创建组件的技术或组件所基于的平台有所不同)。
而且,基于Web服务的应用程序比较容易调试,因为Web服务使用的是基于文本的通信协议,而不是DCOM和CORBA采用的二进制通信协议。目前,很多组织已丌始实施Web服务以改进DCOM组件和CORBA组件之问的通信,并创建基于标准的分布式计算系统。
Web Services与电子数据交换
由于计算机成为了企业不可缺少的助手,因此各组织都希望能使用电子功能更快更有效地占领市场。通过缩短交付周期(订货至交货的时间),企业能够降低库存成本、获得竞争优势。为了联系商业伙伴、管理供应链,很多组织在电子数据交换(Electronic Data Interchange,EDI)技术上进行投资。
传统的EDI系统将计算机与通信设备连接起来,使企业能够进行安全可靠的电子交易。在供应链中的每一个供应商、制造商和发行商都通过增值网(Value-Added Network,VAN)连接到EDI系统中,这样就形成了一个闭合的网络,它包括了生产过程中的所有成员。EDI系统跟踪并记录下企业的日常账目和库存数据,包括订单、发票和其他交易信息。例如,制造厂的操作人员可能会使用EDI系统来购买物料、跟踪发货和维持准确的存货清单。EDI系统还传送对交易各方进行核对的电子文档,记录交易的期限和条件并执行订货的每一个步骤。
虽然EDI系统能够提高工作效率、促进财会业务,但代价非常高昂。许多供应商和发行商都是小型制造公司和销售公司,他们没有技术接入到传统的EDI系统中。发送和接收EDI消息的系统也没有经过标准化,因此与多个顾客和伙伴进行交易的供应商或发行商们可能需要不同的EDI连接器分别与各个顾客或伙伴进行连接。而且,EDI系统很难维护,因为它们是紧耦合的。如果开发人员对一个紧密耦合的系统中的一个组件进行了改动,那么他就必须重新编写系统中依赖此组件的所有其他组件。如今EDI能够在因特网上的运行,降低了成本,使更多的组织能够使用EDI。但对不少公司来说EDI仍然太昂贵。
Web服务提供了与EDI相似的功能,但实现起来更容易更便宜。由于Web服务是基于开放标准的,因此减少出现不兼容的问题。另外,Web服务更有助于构造松耦合的系统。Web服务可以与EDI系统一起工作,这就使各组织能够同时使用这两种技术或者在采用Web服务的过程中逐步淘汰EDI。一些公司正在使用Web服务和EDI来实现更加实惠的商业过程管理系统。
Web Services协议栈
根据前面介绍,我们知道要实现一个完整的Web服务体系需要有一系列的协议来规范和支撑,表3-1展示了当前投入使用的Web服务协议栈。
网络传输层是Web服务协议栈的基础;数据表现层描述了整个Web服务中,用于交换的数据或信息;数据模型层定义了Web服务中数据结构的元数据。在数据模型层上是基于XML的消息层,使用的是消息协议SOAP。服务描述层为调用Web服务提供了具体的方法,采用的规范是WSDL,它包括服务实现和服务接口两个方面的描述。服务的发柿层和服务发现层定义了如何通过UDDI发靠和发现服务的过程。服务工作流层针对的是商务流程建模和工作流,采用的标准是WSFL。尽管不同的标准化组织、厂商由于对Web服务的认识略有不同,所给出的web服务的协议栈也不尽相同,但在一些基本的方面还是共同的。比如以XML作为数据的格式,采用SOAP作为传输协议,采用UDDI作为服务注册者的实现规范,采用WSDL描述Web服务等。关于Web Service的核心技术将在下文中做详细的介绍。
SOA的实现基础——-XML
XML(eXtensible Markup Language,可扩充标记语言)标准是一个基于文本的World Wide Web组织(W3C)规范的标记语言。与HTML使用标签来描述外观和数据不同,XML严格地定义可移植的结构化数据。它可以作为定义数据描述语言的语言,例如:标记语法或词汇、交换格式、通讯协议和契约等。XML作为一种标记语言,有以下特点:
1)可扩展性:标记是面向内容的,用户可以自定义所需要且有实际意义的标记。
2)具有结构化特性:XML文档的实现是一种树形的结构,通过标签的嵌套,XML可以描述任意层次的文档结构。
3)内容与表示的分离性:XML文档只是对内容的描述,它的外观则需要通过XSL(eXtensible Stylesheet Language可扩展样式表语言)来描述。
4)平台无关性:XML是一种自描述的语言,数据本身就己经包含了元数据。另外,XML是基于纯文本的语言,能够被各种平台支持。
在面向服务的体系架构中的关键问题就是服务如何描述,服务描述的重点是要让服务请求者能够更好的理解服务。在服务描述中,XML模式是基本数据类型的机制,所有服务描述技术都使用XML来表示。SOA中服务的许多强大的功能均来自XMI。的强大能力。
SOA的实现协议——SOAP
SOAP(Simple Object Access Protoc01)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它,以及如何处理它们的框架;SOAP编码规则(encodingrules),用于表示应用程序需要使用的数据类型的实例;SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。
虽然这四个部分都作为SOAP的一部分,是作为一个整体定义的,但他们在功能上是相交的、彼此独立的。特别的,封装和编码规则是被定义在不同的XML命名空间(name space)中,这样使得定义更加简单。
SOAP的两个主要设计目标是简单性和可扩展性。这就意味着有一些传统消息系统或分布式对象系统中的某些性质将不是SOAP规范的一部分。
SOAP定义了一种在HTTP客户端和服务器端传输命令和参数的机制。SOAP不关心什么操作系统、编程语言或在服务器端或客户端使用的对象模型:除了需要使用HTTP传输外,与其他无关。
SOAP是简单的。客户端发送一个请求给服务器,调用相应的对象,然后服务器返回结果。这些消息是XML格式的,并且封装成符合HTTP协议的消息。SOAP通过已有的Internet下层结构来工作。你不需要作任何工作,它符合任何路由器、防火墙或代理服务器。
SOAP客户请求封装在一个HTTP-POST包中。下面的例子摘自Internet-draft规范说明中:
第一个例子阐明了SOAP中一个简单的通信信息,包括了两个不是SOAP定义而是应用程序定义的元素:头块元素alert control和体块元素alert。头块元素包括两个参数:priority和expires。体块元素包括的是实际传送的信息。
SOAP通信与底层的不同协议和不同的交换格式有关,在下面的例子中,SOAP使用HTTP作为底层通信协议,从而可以很好的使用request/response机制来传送信息。
SOAP/HTTP请求包括一个GetLastTradePri ce的块元素,该请求携带一个字符串参数和ticker符号,在SOAP应答中返回一个浮点数。XML名域用来区分SOAP标志符和应用程序特定的标志符。
其中,POST是HTTP的动词,所有的HTTP消息都需要主机。Content—Type和Content—Length部分是所有包含有效载荷(payload)的HTTP消息所需要的。Content—Type“text/xml”表示payload是一个发送给服务器的XML消息(或者是发送一个具有扫描应用程序头功能的防火墙的消息)。XML代码是易懂的,比如:Envelope和Body部分规定了普通payload打包机制;
部分包括一个被称为<符号>的部分,其中包含了股票交易的符号。这个请求的目的是非常明显的:得到某个特定股票的最后一次交易价格——本例子中是DIS(Disney)。
发送这个消息的程序仅仅需要知道如何格式化一个SOAP请求:构成一个请求所需要的HTTP头格式和XML格式。本例子中,程序知道需要形成的是一个股票价格的请求。接受这个消息的HTTP服务器通过这个HTTP头SOAPMethodName知道这是一个SOAP请求;然后服务器发送或处理消息的相应部分。
SOAP定义了两种类型的消息,请求和响应,从而允许客户端能够递交一个远端请求,允许服务器端能够响应这些请求。上面所举的是一个请求的例子;下面列举了对该请求的响应:
这个例子的前面三行仍然是标准的HTTP:第一行表明这是对前面的POST请求的一个响应,第二行和第三行指出了内容类型和长度。
XML头封装了一个SOAP的payload。XML的部分包含了对一次交易价格请求的响应;它的子部分(Price)表明了返回这个请求的值。
SOA的服务契约——WSD
WSDL(Web Services Description Language),是一个用来描述Web服务和说明如何与Web服务通信的XML语言。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web services生成WSDL文档,又能导入WSDL文档,生成调用相应Webservices的代码。
WSDL文件包含以下元素:
Type:提供用于描述所交换消息的数据类型定义(string、int);
Message:代表所传输数据的抽象定义。消息由一些逻辑片断构成,每个逻辑片断分别与某个类型系统中的定义相关联。
PortType:一个或多个端点支持的操作的抽象集合。每个操作一般会引用一条输入消息和一条输出消息。
Binding:为特定PortType(端口类型)定义的操作和消息指派具体的传输协议和数据格式规范。
Port:为Binding(绑定)制定一个地址,从而定义一个服务访问点。Service:用于聚合一组服务访问点构成一个Web Services的定义。