SOA(落地为SCA和SDO)
本文发表于2007年12月。
引言
几十年来,企业的信息化建设犹如用积木搭房子一样,存在着诸多的挑战:
多年前,我们用的积木一般数量较少,而且都是大块头的,这样,在搭房子的时候,我们先用一块积木搭了东墙(ERP系统),再用一块积木搭了南墙(CRM系统),当东墙和南墙要接在一起时,却发现东墙所用积木的边缘是方形的,而南墙所用积木的边缘是圆形的,这两座墙根本就接不上,要解决问题就必须自己再做一个一边方一边圆的积木把这两座墙接起来(编程方法实现信息系统集成)。
另外,这面东墙(ERP系统)由于是一个整体,又是定型品,我们无法对其的形状、大小、外观等因素,来根据我们的喜好而变化;另外当我们的喜好发生变化时(业务变化),想对东墙进行改变时,如开一个小门,我们面临的是必须把东墙撤出来,重新换一面东墙,而这无疑是对以前投资的浪费,同时很有可能带来的结果就是整栋房子的倒塌(企业倒闭)。
现在,随着玩具的不断改进,我们已经完全可以根据自己的喜好来搭建真正属于自己的房子了,因为组合的积木已经由原来的一大块变成了一个个的小块,并且每个小块的对接处尽量标准化。这样,我们就可以不必担心东墙和南墙的对接,对东墙的改造也变得轻而易举。
SOA的出现正是为了让这些原来是一个个大块头的积木(ERP、CRM等),变成一个个标准化的小块,让企业的信息系统不再繁杂、僵化。
早在1996年Gartner首次提出的SOA(Service-Oriented Architecture,面向服务架构)的概念。但当时由于软件技术的限制,无法真正实现,而现在随着软件技术的不断发展,SOA的实现成了可能,所以SOA被再一次的提出,并受到了热捧。
简单理解,SOA就是希望把软件变成像现在的积木玩具一样,变成一个个的小块,可以反复拼接,但是他们之间要有一系列共同遵循的标准,并且有一定的灵活性,可以让应用企业根据自己的想象创造他们想要的东西。SOA把企业基本应用封装成一个个的服务(积木小块),服务之间的接口遵循一系列统一的标准。企业可以根据自己的需求购买一个个的服务,而不是一个模块或者一个系统的来购买应用系统。当企业有新的业务需求时只需再购买所对应的服务即可。
SOA的概念与背景
一个技术理论的产生从来都不是从天而降的,在它的背后定有某种催化剂起着推进作用。SOA的催化剂,笔者认为就是广大应用企业的业务需求和由业务需求衍生出的IT需求。
- 业务需求
企业的业务环境正在面临巨大的变化,经济全球化要求企业的业务具备更大的灵活性,面对市场的快速变化和激烈竞争能主动响应;
敏捷制造的思想伴随着企业关注的核心竞争力也越来越受重视;
企业的规模变大,经营风险逐渐变高,企业的IT应用逐渐由部门级应用走向企业级应用,企业的经营者希望能时时地侦测到企业的综合信息,把原有的部门级应用的信息抽取出来,进行综合提取有用的信息。
- IT需求
为了跟上企业发展的步伐,企业内部的应用软件也逐渐增多,于是出现了种类繁多的ERP、PLM、BPM、CRM、SCM……因此信息孤岛林立,系统集成成了CIO的噩梦;在众多的企业应用系统之间又有很多共性,存在着严重得重复建设,重复投资的现象,如何把原来的IT资产整合起来,提高资源的重用性,成为摆在CIO面前的一道难题。
同时不断出现的新业务使得老系统已经无法适应,跟不上市场和客户的需求,企业需要把这些新业务需求快速建设到应用系统中去。
此时SOA理念的出现正好迎合了企业对于业务和IT上的需求。
SOA最初的定义是由Gartner公司给出的,但到目前为止,由于各厂商、个人和专家对SOA的理解不同,所以出现了很多关于SOA的定义:
Gartner则将SOA描述为:“客户端/服务器的软件设计方法,一项应用由软件服务和软件服务使用者组成……SOA与大多数通用的客户端/服务器模型的不同之处,在于它着重强调软件组件的松散耦合,并使用独立的标准接口。”
Service-architecture.com将SOA定义为:“本质上是服务的集合。服务间彼此通信,这种通信可能是简单的数据传送,也可能是两个或更多的服务协调进行某些活动。服务间需要某些方法进行连接。所谓服务就是精确定义、封装完善、独立于其他服务所处环境和状态的函数。”
Looselycoupled.com将SOA定义为:“按需连接资源的系统。在SOA中,资源被作为可通过标准方式访问的独立服务,提供给网络中的其他成员。与传统的系统结构相比,SOA规定了资源间更为灵活的松散耦合关系。”
到目前为止,关于SOA还没有一个统一的、被广泛认可的定义,e-works在总结以上定义的基础上,给出了自己的理解:
SOA是一种软件架构思想,通过使企业中一个个细化的服务标准化、独立化,来达到企业的IT系统跟随企业的动态变化的目的。
其核心为:
1) SOA是一种软件架构思想,并不是一种产品。
2) SOA的重点是面向服务,此服务包括企业的内部与外部的每一个业务细节,比如企业中财务应收发票的处理就是一个服务。SOA的思想是把这些服务从复杂的环境中独立出来——组件化封装,然后通过标准的接口使不同的服务之间相互调用。
在此过程中需注意:每个服务有一个明确的界限,其他服务只能通过接口来调用服务;每个服务是独立自主的,每个服务不必依赖于其他的系统而存在。
1) 实现企业IT闲置资产的重用
实施SOA,企业必然需要对自身所用的信息系统进行重新的分类,这势必会使企业全面的了解自身的信息系统,然后针对企业的服务寻找适合的IT支持。以前由于种种原因被闲置的企业IT资产,企业必然会重新考虑,挖掘到闲置资产的价值,从而使闲置的IT资产得以重用。另外,SOA可以将旧的系统封装起来,成为Web Services得以重新利用。
2) 降低企业的IT投资成本
以往多数企业在建设企业的IT系统时是从项目的角度出发的,比如ERP项目、CRM项目等,事后等企业的IT系统越来越多的时候,才会考虑系统的集成问题,但这时候往往集成的难度就很大了。而SOA要求企业在建设IT系统之初就要考虑这些问题,也就是要考虑服务之间的接口问题。这样就会使企业的IT的成本大大缩减。
同时,SOA将改变以往的软件购买模式,目前的多数企业在购买软件时往往是是成熟性软件,需一个模块或一个系统的购买,企业在购买时往往无法将那些企业不需要的功能剔除出去,这样,企业就不得不为此多付出资金成本、培训成本等许多不必要的成本,而SOA则可以帮助企业实现真正的按需购买,企业需要什么功能就购买相应的服务,帮助企业避免不必要的支出。
3) 实现企业的动态变革
SOA使企业的IT人员不必太多的关心企业IT系统的底层技术,而更多的去考虑企业的业务以及业务与IT的接合。同时,以往企业在开发系统时,在重复功能上浪费了大量的人力与财力,同时系统在开发完成后,如果企业业务变化,系统将很难更改或者更改的成本很高。而SOA面对的是一个个独立的服务,服务之间可以通过标准接口来相互调用,这样企业在重复功能上就可以直接通过接口调用,而不必去重新开发。企业的业务发生变化时,只需要修改相对应的服务即可,降低了修改的难度与复杂度,保证了企业的IT系统的动态变化。
SOA相关技术
目前,实现SOA的技术很多,比如Web Services、CORBA等,这些技术一个很重要的共同点就是支持在不同的不同平台上、以不同语言编写的各种程序以基于标准的方式相互通信。Web Service在其中受到最多的追捧,下面我们主要介绍Web Service:
Web Service微软提出的基于互联网的开发模型。
概念一:
Web Services是自包含的、模块化的应用程序,它可以在网络(通常为Web)中被描述、发布、查找以及调用。
概念二:
所谓Web服务,它是指由企业发布的完成其特别商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项应用服务。(UDDI规范2.0)
简单的讲,Web Services就是我们把处理业务过程的一个个程序封装起来(小积木),成为一个组件,然后把它放到Web网上去,企业可以通过Internet来调用这个封装起来的组件,而多个组件的不同组合就可以构成企业的软件应用。
下面是与Web Service有关的软件技术:
1) XML
XML是Extensible Markup Language的简写,一种扩展性标识语言。
XML语言有很多的优势主要表现在:
·XML可以广泛的运用于web的任何地方;
·XML可以满足网络应用的需求;
·使用XML将使编程更加简单;
·XML便于学习和创建;
·XML代码将清晰和便于阅读理解;
其中,XML语言在对SOA的支持优势上主要体现为:
不同的平台,同一种语言
可移植性在于企业可以定义标签和属性。“读取”XML文档无需特殊的库或应用程序服务器(但需要将开发环境配置为支持 XML)。XML文档是纯文本文件,因此不需要专用的软件对其进行解释,这一点与大多数二进制文件不同。这意味着企业可以使用记事本程序打开和编辑XML文件。
接口标准、简单
程序员在对接口进行编程时经常将它称之为协议。从编程的角度出发,接口在没有暴露实现的情况下提供了编程结构。如果使用DTD(文件类型定义)和大纲(schema),那么XML就有类似的特性。DTD和大纲都用来描述XML文档的结构以及XML文档的建立规则。可以用一个(或者多个)相关DTD(或者大纲)组织这样的规则集合,我们称之为XML文法。
XML文法不仅可以用于应用程序之间通信的标准化,还可以为开发者提供一个接口协议。换句话说,开发者在创建一个需要使用XML文档结构的应用程序时,他不需要知道文档是如何实现的(即实际的XML文档)。DTD以及大纲描述了文档的结构,它们可以作为开发的接口协议。对DTD的任何改动同时也改变了协议。
封装
封装是XML重要特性之一。从本质上来说,封装指的是获得一个或者多个数据块(chunks of data)并把它们集合成一个简单对象(而不是几个独立对象)的概念。封装与集合(aggregation)类似,但是它们之间有一个重要的差别,即封装一般意味着它没有外部依赖性。这样,企业就可以把每一个服务独立出来,单独封装,达到SOA的目的。
XML语言就犹如我们往一个箱子里装苹果,以前我们必须按照一定的规则,一层层、一列列的装,否则就不被认可,而现在,通过XML我们可以随意的往箱子里装苹果,只要箱子上说明是苹果就可以了。
2) SOAP
简单对象访问协议 (Simple Object Access Protocol) 是一个基于XML的,它用于在分布式环境中发送消息,并执行远程过程调用。简单地讲,就是允许Java对象和COM对象在分布式、分散的、 基于Web的环境中彼此通话。更一般地讲,SOAP允许任何类型的对象(或代码)在任何平台上,以任何一种语言相互通信。
举一个简单的例子,就如我们打越洋电话时,对面是一个不同语种的人,想要进行沟通与交流,就必须使双方都明白各自的意思,而中间如果没有一个语言转换器,就会使这两个人无法沟通与交流。而SOAP就好比这个语言转换器,使得不同对象可以畅通的沟通与交流。
3) WSDL
WSDL用来服务描述。它也是XML格式的,主要描述了服务的位置,接口和操作方法。WSDL描述包含必要的细节,以便服务请求者能够使用特定服务:请求消息格式,响应消息格式,向何处发送消息。
你会怎样向别人介绍你的Web Service有什么功能,以及每个函数调用时的参数呢?你可能会自己写一套文档,你甚至可能会口头上告诉需要使用你的Web Service的人。这些非正式的方法至少都有一个严重的问题:当别人想要使用你的Web Service的时候,他们的工具(如Visual Studio)无法给他们提供任何帮助,因为这些工具根本就不了解你的Web Service。解决方法是:用机器能阅读的方式提供一个正式的描述文档。
WSDL就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。WSDL就如同一个产品的说明书一样,说明产品的功能、产地、如何操作等信息。
4) UDDI
UDDI 是一套基于Web 的、分布式的、为Web 服务提供的信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web 服务注册以使得别的企业能够发现的访问协议的实现标准。
举例来说,就如沃尔玛卖场一样,企业将自己的产品放到卖场中,然后由沃尔玛提供产品的目录清单,购物者可以根据目录清单,快速的找到想要的产品。UDDI就如虚拟的沃尔玛卖场一样。
简单的来讲,一个想使用Web Service的用户可以在UDDI注册表查找服务,取得服务的WSDL描述,然后通过SOAP来调用服务。
5) BPEL
如果仅仅是开发Web服务并把这些功能发布出来还不够。我们也需要一种把这些功能按正确的顺序组合起来的方法-定义使用这些Web服务的业务过程。我们显然需要一个简单直接的方式来定义这些业务过程,尤其是我们都知道业务过程通常易于变化,因此我们需要很容易地修改这些业务过程。
使用BPEL,可以表达条件行为,例如,是否执行一个Web服务取决于前一个执行结果;也可以创建循环,声明变量,复制和为变量赋值,定义错误处理Handler等。
举例来说,我们用积木搭房子,除了要有一块块的小积木外,我们还需要知道这些积木摆放的顺序,而BPEL就是描述积木的摆放顺序的。BPEL是Web Service的一个有效补充。
在很多地方,我们常常看到把SOA和Web Service混用的情况。这里要说明:SOA不是Web Service,Web Service仅是实现SOA的一种软件技术,只不过,目前而言Web Service是最易于实现SOA的软件技术。但笔者认为随着软件技术的不断发展成熟,未来很有可能会出现更加完善、更加成熟的SOA软件技术。
解读SOA厂商
随着SOA迅速风靡,众多大大小小的国内外软件厂商均宣称自己提供SOA服务。SOA概念的提出者Gartner 于2007年5月在《2007年第二季度全球应用基础软件报告》中根据产品能力、执行力、资源投入、愿景等要素,首次列出了全球19家有能力提供下一代SOA服务的主要厂商(Magic Quadrant for Application Infrastructure for New Service-Oriented Business Application Projects)。IBM、BEA、Oracle、微软等世界软件巨头均入选,中国的金蝶中间件公司亦名列其中。
笔者将其分为三类厂商:第一类主要以中间件产品为主的SOA厂商,第二类是以系统集成为主的SOA厂商,第三类是以ERP、CRM等企业系统为主的SOA厂商。
第一类SOA厂商代表是IBM、BEA等。
由于中间件可以帮助企业更好的实现SOA:一是说采用中间件产品可以很好的构建SOA的应用;再就是采用中间件产品开发出来的应用,将很容易被整合进SOA架构。
传统的中间件只是将企业内部的各种应用系统统一在一个平台之上,使数据运行和管理的流程更加顺畅,而基于SOA的中间件所要实现的则更进了一步,即试图使整个IT架构更加灵活,可以根据用户需求的变动进行随时调整和增删。
IBM的SOA
IBM认为,SOA的实施是分阶段、循序渐进、逐步实现的。实施SOA,企业可以从某一关键业务流程着手,按照:建模(model)、装配(assemble)、部署(deploy)、管理(manage)四个阶段实施。之后再由小及大,逐渐在企业整体业务中扩散,逐步完善企业的SOA平台,最后形成整个企业的IT转型,最终实现随需应变的企业IT架构。
企业可以通过完整的步骤实施SOA计划。首先,收集业务需求,梳理业务流程,开始进入建模阶段。在优化业务流程之后,通过在将新的服务及现有服务进行组合和装配,实施业务流程,然后,将资产部署到一个安全集成的环境中,以整合人员、流程和信息。在部署之后,客户同时从IT和业务角度进行管理和监控。企业将在管理阶段收集的信息反馈到生命周期中,以便持续改进流程。支撑生命周期的所有这些阶段的是架构治理,为SOA计划提供引导和监督。
IBM把构建SOA系统分为四个层次:第一个层次是创建单独的服务,第二个层次是不仅可以创建服务,而且可以将业务功能集成到SOA系统中,第三个层次涉及将企业IT基础设施转换为SOA模型,SOA的第四个层次集中于转换业务模型,以使之成为按需就绪的模型。每个层次IBM都提供相应的工具来帮助企业实现。
IBM在参考实际的客户经验和多年的积累的情况下,认识到业务部门在设计和实现 SOA 解决方案的过程中经常会遵循多个常见的场景。通过定义这些场景,IBM提供了预定义的真实方法,帮助实现 SOA 解决方案。包括:服务创建;服务连接性;交互与协作服务;SOA 所支持的业务流程管理;作为服务的信息;SOA 设计;SOA 治理;SOA 安全性和管理。
BEA的SOA
在经过多年的研究以后,BEA发现企业需要一种新型的软件基础架构,以便快速构建、交付、配置和管理这些服务:当企业已经构建和部署超过 50 种服务(会造成“服务蔓延”)之后,将发现需要不断进行集成,而且难于扩展这些服务。另外,除了一直用来“构建汽车部件”的传统代码工具以外,他们还需要类似于汽车“装配线”的一套新的合成工具。
为满足这些需求,BEA 计划推出一种名为“服务基础架构”的新型软件,以便使流程、信息和服务能够在整个业务和业务之间自由流动。“服务基础架构”在 SOA 的基础上构建,将包含所有的产品和工具,以支持“一次构建,多次使用 (composed once and leveraged anywhere, COLA) ”的服务。
2006年,BEA推出了完整统一的BEA SOA 360°平台,借助SOA 360°平台,客户可以复合、调整、管理、开发、保护、可视化、统筹现有应用和新应用,并与其核心的业务流程集成,真正实现让“冻结”的资产流动起来。
BEA希望通过SOA 360°平台推动业务的变革,使企业IT能快速提供满足业务需求变化的解决方案。将应用打包成服务,每个服务可重用、可组装编排、可快速注册发布是SOA最基本的理念。BEA推出SOA 360°的目的就是将BEA的资源发挥到极致,BEA要在其自身产品上首先实现SOA的理念,将BEA的产品服务化和组件化,BEA通过SOA 360°将自己的平台产品打包成一个个服务。
BEA SOA360°平台汇聚了BEA的三大产品家族:Tuxedo、WebLogic和AquaLogic。其次,BEA SOA360°平台以最新的BEA微服务架构(MSA)为基础。MSA使得企业的SOA所有基础平台在一个MSA内得以实现,得到完全的支持,在MSA上,BEA的所有产品都将成为一个服务组件,可以随时被激活和调用。此外,BEA SOA 360°还提供了WorkSpace 360°协同工作平台。WorkSpace 360°使得业务分析师、架构师、开发人员和IT操作人员能够在一个共同的工作环境下通过企业资源库进行协作和交互并共享元数据。
第二类SOA厂商的代表是Software AG等。
系统集成主要解决的是企业多个应用系统之间不能进行信息共享,及时,有效沟通的问题。企业越来越多彼此独立的信息系统形成了越来越多的信息孤岛,形成了一个个的竖井。而系统集成所要解决的是通过编程的方法,在这些竖井之间建立一座桥梁,是竖井之内的信息可以互相联通,而SOA的一个核心就是要推倒这些竖井。
SOA的架构就好比“电脑主板”的架构,使“电脑”有一个基于标准的结构,总线结构,即插即用的契约标准,企业的多个系统可以方便的架构在这个“电脑主板”之上,并互联互通。
第三类SOA厂商的代表是SAP等。
这类厂商的SOA 与前两类厂商的有所不同,前两类厂商的SOA主要是面向软件开发的,企业可以很容易的开发SOA架构的软件应用,第三类厂商的SOA则是主要面向企业直接应用的。不过,由于SOA的应用积累还比较少,ERP、CRM等系统纷繁复杂,要将其完全改造成SOA架构的系统需要庞大的经费以及精力,目前多数ERP等企业系统厂商的SOA仅仅是为了解决集成问题,主要是帮助企业将内部以及外部的信息系统紧密集成,还无法真正做到松散耦合性的架构。
SAP的SOA
NetWeaver平台是SAP推出的第一款基于SOA 架构的产品,这个平台让企业体会到了部分SOA的好处:在NetWeave平台之上,企业可以实现系统的松耦合组合,而不需要像以前那样升级整个系统或者更换整个系统。在NetWeave平台发布后,SAP推出了一系列可选性的功能增强包,当企业在业务创新时,就不需要对整个系统进行全面升级,只需要增强包中挑选出最适合企业的软件包就可以了。
但目前而言,SAP还没有来得及把SAP Business Suite改造成完整的SOA架构,不过SAP已经有了这方面的动作,SAP的SOA远景是:把原来的ERP、SCM、CRM等企业应用全部打散,并对这些系统的核心内容进行研究,然后把原来的系统提炼成一个一个针对主要业务功能的模块,比如企业处理应收帐款的内容?处理销售订单的内容?等,把这些分解成一个个较小的应用之后做成企业服务,是基于网络服务(Web Service)但加上业务的内容,把这些企业服务存在企业服务库(Enterprise Service Repository)中,在这个服务基础上企业就可以根据自己的业务需求来选择不同的软件组合方案。
SAP把这套体系叫做Enterprise SOA (ESOA),并称ESOA是 SAP 的架构蓝图。在ESOA体系中,企业的基本业务被封装成一个个结构相似、功能不同的服务,搭建及改变业务流程的过程,随即变成了服务组合及配置的过程。
Oracle的SOA
Oracle的SOA技术产品叫SOA套件(Oracle SOA Suite),Oracle宣称,其SOA套件是一套用于创建、部署和管理SOA的全面的、热插拔式的软件组件,由其融合中间件的服务导向架构组件构成(Fusion Architecture)。
Oracle的SOA方案的一个现实驱动力来自于在收购了多家应用厂商后,Oracle需要使用一个先进的架构和平台灵活无缝地把这些应用集成起来。
Jdeveloper是和Oracle产品紧密联系的一个免费的开发工具,如果是要使用Oracle的平台进行开发,没有什么开发工具能够比Jdeveloper更加方便和高效了,Jdeveloper已经包含了大部分常见Oracle产品开发所需要类库,也有一个图形的,能够自动提示和完成语句的助手以及一个非常重要的能够跟踪到产品内部的调试环境等。无论是进行普通J2EE开发,还是BPEL/ESB开发任务,都能够使用Jdeveloper很好完成。
Oracle 的BPEL Process Manager是包含了常见的web服务流程化开发的所有通用组件,还包含了人机交互工作流的开发机制以及提供了大量的进行各种系统连接到Web服务环境的适配器(如数据库,FTP服务器,商业打包应用Oracle 11i,SAP等)。而ESB则是作为把各种应用包括传统应用暴露成web服务接入SOA环境以及虚拟化接入系统的一个平台,当一个系统接入ESB后,则可以在不改变BPEL流程的情况下把一个系统换成另一个系统。
Web Service Manager(WSM)是一个专门针对Web服务安全设计的产品,提供了一个企业Web服务的安全和认证的统一的接口和平台,所有的Web服务可以先注册到该平台,然后由WSM把该服务发布出去(可以换成另一个服务名),这样当无论什么用户需要访问该Web服务的时候,都需要经过WSM这种统一的认证和授权才能够访问到该服务,这就解决了各个厂商不同中间件平台上各自独立的Web服务的安全的管理模式。
另一个产品BAM则是一个实时监控业务的平台,提供实时的商业智能的功能和根据实时的业务情况(可以定义阈值)进行反应(调用一个Web服务)的功能。
总结
SOA的优势明显,它所解决的问题很多都是目前企业最头痛的问题,所以一些厂商就开始大肆宣传SOA,让企业以为SOA可以帮助企业解决其所有信息化问题。
目前而言,架构SOA确实可以帮助企业解决一些问题,但现在SOA的整个体系还很不成熟,市场上鱼龙混杂,就像Gartner在90年代初提出的ERP一样,Gartner希望ERP能够在2003年左右得以实现,同样,SOA也绝非一朝一夕就可以实现,需要不断的进步与完善。所以企业不要指望现在就通过实施SOA把目前信息化存在的所有问题全部解决,这是不现实,也是不可能实现的。
SOA暂时还不是信息化的救命稻草!