分析:SOA在当今中国企业的发展现状

相信今天已经没有人对SOA的概念感到陌生,或者说没有听到过这个名字。但,你眼中的SOA是什么?1000个人可能会有1000种理解。我认为造成这种理解上的差异,原因有两点。其一,给SOA下定义的组织机构太多,没有统一的标准。若干标准化组织、大厂商等都给出了自己对SOA的理解,但这些理解并不统一。其二,人们对SOA的理解曾一度被解决方案厂商所误导。或者由于短视,或者迫于抢占市场的压力,SOA解决方案供应商们关心的是打着SOA的旗号卖产品。但凡能沾点边儿的,都贴上了SOA的标签。

然而,值得庆幸的是,不论人们是否深入理解SOA,似乎都接受了它,也能大致说出它的几大特点和优势——应用程序服务化、松耦合、灵活的架构、支持敏捷等。

SOA是什么?如何实施SOA?解决这一类问题的文章在出版物和网络上可以搜索到一堆,我就不再重复这些工作了。本文的重点是介绍SOA在当今中国企业中的发展现状。但为了全文结构的完整性,将使用一小节简述我对SOA的理解。

SOA简述

SOA的全称是Service Oriented Architecture,即面向服务的架构。从其名字上看,它有两个核心:一是服务,二是架构。在此基础上,我对SOA是这样理解的。

它以服务为核心。传统的整合架构都是以应用为核心,而SOA里谈的一切都是从服务展开的。

它不是某种特定技术,而是一种架构风格、架构思想或一组指导架构设计原则。在特定风格、思想和原则的指导下设计出来的企业应用架构就是具有SOA的特性和优势的架构。

SOA的目标是实现IT和业务对齐(如图1所示)。这一目标可作为衡量SOA实施成败与否的重要尺度之一。

图1 SOA的目标:IT与业务对齐

图1 SOA的目标:IT与业务对齐

众所周知,业务是不断发展、变化的,业务创新越来越成为企业核心竞争力的一部分。传统IT支撑业务发展的方式是为新业务构建新的业务系统,设计新的数据库,系统多是“竖井状”的孤岛形式,系统间连接常见的是点对点的缺乏规划的连接方式。久而久之,这样的方式已经无法满足业务发展对IT带来的要求,IT成为企业的严重短板。SOA出现的主要目的就是彻底改变这种局面,使IT变得灵活,与业务对齐,不再成为企业的后腿。甚至能够促进业务的发展,并创造新的业务价值。

为什么SOA能够实现IT和业务对齐呢?这得归功于SOA架构中的若干实施原则。

应用功能的服务化

将应用程序打散成服务是SOA实施的关键之一。一方面,遗留系统的功能和数据不能丢弃,只有重用才能利用其价值。另一方面,将应用作为整体,是从技术和实施上都非常难于复用的。所以,SOA的实施原则要求将应用中的功能模块抽象成开放、标准、粒度适中的服务,进而促进现有功能重用、避免重复投资、加速新业务开发的速度。

架构的松耦合原则

SOA的另一重要原则是松耦合,松耦合不仅表现在服务本身,还表现在架构层面。服务的松耦合表现在服务的描述与其底层实现技术是分离的。换言之,一个服务,其底层实现可能是Java,也可能是.NET;架构的松耦合表现在服务消费者与服务提供者的分离,在服务消费者及提供者之间置入仲裁(Mediation)模块。这样,服务提供者对服务的修改对服务消费者产生的影响可降至最低。

面向服务的整合

面向服务的整合是SOA的核心之一,主要由企业服务总线(ESB)提供这一部分的能力。服务消费者之间既有面向服务的调用,也有面向消息的处理。企业服务总线提供的协议转换、数据格式转化、多种消息处理机制、审计、日志等功能能够最大限度地提高SOA架构的灵活性和扩展性。

服务的组合及编排

服务梳理出来之后,基于服务的组合和编排就成为可能。服务的组合和编排能够最大限度地重用现有功能,支持业务的创新。偏重于技术层面的服务/消息组合可由ESB提供,而偏业务层面的服务组合和编排可通过BPM组件实现。当然,SOA实施原则还有许多,如服务治理、安全访问、信息服务、门户服务的实施原则,本文不再赘述。

中国式SOA在企业中的发展现状

前几年,硝烟弥漫、战火纷飞,各路厂商奋力拼杀在SOA市场上。大厂商拼的是在市场上的统治地位,小厂商若能分得一杯羹也满意了。喧嚣之后总要归于沉静。转眼间,云计算铺天盖地席卷而来,绚丽的云彩抓住了大众的眼球。SOA像是退居幕后的明星、落幕的英雄,很少再被人提起,甚至有人宣布“SOA已死”。那么,SOA真的销声匿迹了吗?中国式SOA的当前状态是怎样的呢?

图2 Gartner技术成速度模型

图2 Gartner技术成速度模型

SOA呼声渐弱,实际上它越来越火

的确,现在大厂商们都已经不再把SOA作为市场宣传的重点了。但是,SOA却走到了应用最广泛的时期。若对应到Gartner技术成熟度曲线模型,中国当前SOA所处的阶段是图2中的第4个阶段——复苏期。

我们大致可以如此推算SOA在中国的几个阶段,2006年之前是技术萌芽;2006-2008年是过热期;2009年度过了幻灭期;从2010年开始进入复苏期,当前正由复苏期迈向成熟期。

经过几年的历练,中国的SOA不论理论、实践,还是产品都得到了长足的发展。一方面,中国培养了一大批掌握SOA精髓的系统集成商和独立软件提供商,如华为、东软、用友、金蝶、中软……他们或将SOA的理念植入到其解决方案中,或将SOA理念融合进其产品之中。SOA架构师、整合架构师的队伍也不断壮大。另一方面,中国也拥有了自主研发的SOA中间件产品,如普元、炎黄盈动的流程引擎;锐易特、东方通、金蝶的ESB都是市场上的佼佼者。伴随着国人对SOA的理解越来越深入,越来越成熟和专业的SOA产品及解决方案将会随之而来。

SOA已经深入人心。现在,几乎所有待建的系统和平台都要求基于SOA架构。SOA已经成为基本的架构原则,不论是系统间的整合,还是平台的建设,人们会不约而同地采用SOA原则来架构灵活、易于扩展的系统。

中国式SOA的几点不足

尽管SOA已经深入人心,但并非所有的人都能将SOA原则使用得很好。若不能很好运用SOA,就无法收获相应的价值。下面给出几点常见的不足之处,我无法在这篇文章中展开讨论这些问题,但还是期待从业人员正视这些不足之处,找到正确的实施方法。

对SOA的理解参差不齐。若不能充分理解SOA,未能理解SOA的目标和架构原则,就无法正确实施SOA。在一些项目实施过程中,旧系统被直接推翻,而不是先将遗留系统服务化,然后再循序渐进式地改进。若所有旧系统全部推翻后重建,势必会耗费大量时间和人物力才能完成,不符合SOA多次少量投入的特点。此外,许多人理解的服务就是Web Service规范的服务。而事实上,SOA不限定采用何种技术,只要是开放、标准的技术即可,比如JMS、RESTful Service等。

忽略服务梳理和服务描述的重要性。我清楚地记得一个项目,用户通过这样的方式生产Web服务:将系统里的某个通用Java接口中的所有方法全部暴露出来,使用某个WSDL自动生产工具生成一个超级大的WSDL文件以及许多关联的数据描述(XSD)文件。WSDL中暴露了大量原有程序中的Java包结构和数据结构信息。这个例子是一个糟糕的实践。

哪些功能应该封装成服务、服务该如何描述,这些工作是需要规划的。我们需要根据业务、现有系统等方面,全方位(或局部)梳理业务,才能找到那些适合于暴露成服务的功能。确定好应该暴露的服务之后,进一步确定服务规约,描述其输入和输出、与其他系统的依赖关系、服务非功能性需求等。

重视工作流(Workflow),忽视服务自动编排(Service Choreography)。我见到的大多数BPM项目都是关于工作流的,工作流是以审批为主的业务流程,在中国尤为突出。这种流程在某种程度上比此前从一个办公室走到另一办公室、然后再到下一个办公室的场景已经先进许多了。但我们知道除了工作流之外,BPM还有其他形式,比如服务自动编排,这样的场景却在很大程度上被忽视了。

服务治理未得到充分重视。服务治理或管理对于长期SOA实施的成败至关重要。随着SOA的持续发展,企业中的服务会越来越多,服务的变更、服务位置的变化和服务的版本升级相关工作越来越频繁,如何把这些变化造成的影响控制到最小?再者,当服务多了之后,如何快速便捷地找到所需的服务也是极为重要的工作。所以,服务管理和治理越发显得重要。

企业级应用,SOA还是ROA?

随着Web2.0和云计算的兴起,REST应用再次变得火热起来。与REST的相关的词汇也出现了好几个,RESTful Service和ROA (Resources Oriented Architecture)就是典型的代表。甚至有许多人认为ROA会替代SOA。事实上是这样的吗?

认为ROA胜过SOA的人一般指的是RESTful Service胜过SOAP,这种观点产生的原因是RESTful Service简单、扩展性高、高性能(缓存机制);而大多数SOAP缺省基于RPC方式【注:SOAP并不限制一定使用RPC】, 这种机制需要在客户端建立一个代理才模拟服务短的接口,进而调用服务端的服务。相对而言,SOAP的客户端和服务端的耦合要紧密一些,这限制了分布式应用的扩展。另外,RESTFul Service推荐的消息传输格式是JSON,它比SOAP要求的数据格式SOAP信封要简单许多,这也是RESTful Service胜出的另一方面。

我认为要回答这个问题,首先需要看看企业级应用的特点以及两种架构风格的适用性。由于遗留原因,目前企业内的大多数应用并非基于Web,应用系统间的交互大多基于RPC方式,ROA很难在这种环境下开枝散叶。

此外,企业应用间互相访问的功能多数是基于过程而非基于资源交互,例如“核准保单”,虽然可以通过REST实现这种场景,但毕竟没有RPC使用起来那么直观。可喜的是,近年来Web应用越来越多地在企业内使用,这为ROA提供了有利的土壤,使得ROA在企业架构中的应用变得多起来。从两种架构风格的适用性角度看,一方面,SOA适合于企业级应用自不必说,这么多年来SOA一直在企业范围内应用;另一方面,到目前为止,ROA则更多地应用于基于Web的前端应用的数据聚合,所以ROA在企业内的适用性要窄一些。

基于以上考虑,我认为ROA可适用于企业内的Web应用之间的整合和协作。ROA通过RESTful Service的形式暴露服务,这些服务可通过SOA架构进一步与企业的其他非Web应用进行整合;SOA则是更高层次的企业级架构风格,RESTful Service可作为描述服务的开放、标准的形式之一,但不是唯一形式。随着企业级应用越来越Web化,遗留系统正逐步淘汰,ROA可能会成为未来企业级解决方案的重要组成部分。

简言之,SOA不会被替代,ROA的地位会越来越高;二者并非排他关系,而是相辅相成,共荣共赢的关系。

云计算冲击下的SOA

云计算是新宠,就像当年的SOA一样。当市场在大肆宣传云计算时,SOA在一旁淡然地笑了。喜欢挑起争端的人会说:“云计算来了,SOA该靠边站。”这种说法只能当作不负责任的市场噱头,不能当真。然而,二者并非同一层面的事物,不具有可比性,所以也就不存在谁替代谁的问题。相反,云计算和SOA还能彼此促进对方的发展。表现在以下几个方面。

一方面,如果一个企业成功地实施了SOA,当云中某个服务能够为企业带来更大价值时,其架构就能很方便地扩展,将云中服务接入现有架构之中。另一方面,由于业务扩展造成现有服务无法支撑剧增的业务量时,在良好架构的技术上,就能充分利用云计算带来的弹性伸缩和按需功能等方面的优势。

云计算供应商需要以SOA为基础。云计算的核心也是服务,计算、存储、网络、软件等,一切皆服务。那么,如何将这些能力封装成服务,以良定义的接口为外界提供服务呢?这就需要SOA的支撑。所以,云计算的兴起更加促进了SOA的应用,我看到过某些企业使用SOA架构构建SaaS、PaaS应用并对外提供服务。

作者马国耀,现就职于IBM北亚太战略合作部,为合作伙伴提供产品培训、技术支持和架构咨询等服务。他曾获得吉林大学学士学位和北京大学硕士学位。译著有《云计算与SOA》。