`

<转>SOA在当今中国企业的发展现状

    博客分类:
  • SOA
阅读更多

文 / 马国耀

SOA虽然不再是Buzz Word,但这也从侧面表明,对它的理解正在深入,使用正在趋于冷静而理性,在历练中得到了长足的发展。但由于SOA自身的局限性和对其使用的质量参差不齐,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》。

分享到:
评论

相关推荐

    SOA中国路线图

    SOA中国路线图&lt;br&gt;SOA中国路线图&lt;br&gt;SOA中国路线图

    soa专业人员指南(全)

    如果没有&lt;br&gt;基于共同经历的通用语言和行业词汇, SOA技术很可能最终只会为IT基础架构带来更多自定义逻辑并&lt;br&gt;提高其复杂度,而无法实现其提供企业内和企业间服务重用和流程互操作性的承诺目标。为了帮助&lt;br&gt;开发...

    软件架构设计相关资料

    “软件架构实践之软件架构设计”聊天实录.pdf&lt;br&gt;中国优秀软件架构师感悟录.pdf&lt;br&gt;伟大架构师的秘密.pdf&lt;br&gt;公开讲座—软件架构师研修讲座讲稿(大连 2005) .pdf&lt;br&gt;开发架构大总结.mht&lt;br&gt;敏捷思维-架构设计中的...

    bpmn图元到bpel的影射说明

    - **Multiple**: 影响到&lt;invoke&gt;、&lt;throw&gt;、&lt;fault&gt;和&lt;compensate&gt;的组合,处理多种结束方式。 **4.3 中间事件(Intermediate Event)** - **Message**: - 紧跟Decision: 映射到&lt;pick&gt;&lt;onMessage&gt;。 - 序列流中:...

    关于CXF的用例

    【关于CXF的用例】 CXF(CXF: Apache CXF - The Open Source SOA Framework)是一款开源的Java框架,主要用于构建和服务导向架构(SOA)...在实际项目中,CXF的强大功能和灵活性使其成为构建企业级Web服务的理想选择。

    cxf soap header 用法

    &lt;authentication&gt;&lt;/authentication&gt; &lt;userorgid&gt;&lt;/userorgid&gt;UserOrgID &lt;userid&gt;&lt;/userid&gt;Hubs1 &lt;userpsw&gt;&lt;/userpsw&gt;password &lt;/soap:header&gt; ``` 在这个例子中,`Header` 包含了 `authentication`、`userorgid`...

    SOA介绍.ppt

    1.什么是面向服务的体系架构&lt;br&gt;2.SOA的价值&lt;br&gt;3.构成SOA的技术&lt;br&gt;4/如何构建SOA系统&lt;br&gt;5.IBM的SOA工具与产品&lt;br&gt;6.网格计算与SOA&lt;br&gt;

    MSDN Webcast - ASP.NET AJAX深入浅出系列课程(14):Profile Service的实现方式与扩展(Level 300) (ID:1032351378)

    讲座内容:&lt;br&gt;Profie 是ASP.NET 2.0的重要特性之一,而ASP.NET AJAX提出了Profile Service,使开发人员能够方便地在客户端以AJAX的方式来处理Profile信息。这节课我们将来了解这个ProfileService简单的功能细节以及...

    面向服务的体系结构(SOA)综述和企业服务总线(ESB).part1

    面向服务的体系结构(SOA)综述和企业服务总线(ESB)&lt;br&gt;&lt;br&gt;希赛网上需要10个积分才能下载

    基于maven的cxf+spring简单demo

    在实际开发中,这种组合广泛应用于构建企业级的SOA(面向服务架构)系统,提供灵活且可扩展的服务接口。 【压缩包子文件的文件名称列表】中的"cxf.train"可能包含了整个项目的源代码、配置文件以及Maven构建相关的...

    商城项目soa拆分完成

    &lt;parent&gt; &lt;groupId&gt;cn.e3mall&lt;/groupId&gt; &lt;artifactId&gt;e3-parent&lt;/artifactId&gt; &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt; &lt;/parent&gt;

    SOA发展历史介绍SOA的发展

    自20世纪90年代末被提出以来,SOA经历了漫长的发展历程,逐渐成为现代企业信息化建设的重要组成部分。 ### SOA的起源 SOA的概念起源于1990年代,当时企业面临日益复杂的信息系统环境,需要一种更加灵活和可扩展的...

    CXF实例一 Maven构建

    &lt;artifactId&gt;cxf-rt-frontend-jaxws&lt;/artifactId&gt; &lt;version&gt;3.4.4&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.cxf&lt;/groupId&gt; &lt;artifactId&gt;cxf-rt-transports-http&lt;/artifactId&gt; &lt;version&gt;...

    WSDL 入门 教程

    【WSDL 入门教程】 WSDL,全称为Web Services Description Language,是一种基于XML的语言,其...在实际应用中,WSDL通常与其他技术,如SOAP和UDDI(统一描述、发现和集成)一起使用,构建完整的服务导向架构(SOA)。

    2010年SOA现状调查

    综上所述,“2010年SOA现状调查”揭示了SOA在企业IT架构中的核心地位,以及它在应对挑战、促进业务发展方面的实际作用。随着SOA在组织内的深入应用和不断成熟,其作为连接企业内外部服务的桥梁的作用日益凸显,为...

    2021-2027全球与中国SOA应用程序网关市场现状及未来发展趋势.docx

    本报告对2021年至2027年全球及中国SOA应用程序网关市场的现状和未来发展趋势进行了深入研究。根据报告,2020年全球SOA应用程序网关市场规模达到一定亿元,并预计在2027年将增长至更高的亿元,年复合增长率(CAGR)预计...

    论SOA在企业集成架构设计中的应用.docx

    论 SOA 在企业集成架构设计中的应用 从胶凝砂砾石坝施工质量监控系统的开发经验出发,探讨了 SOA 在企业集成架构设计中的应用实践。SOA 作为一种粗粒度、松耦合的架构,具有松散耦合、粗粒度服务、标准化的接口、...

Global site tag (gtag.js) - Google Analytics