SOA一度被认为是游戏规则改变者,它可以变革软件开发和交付流程、统一业务和IT、显著降低软件维护成本。
\SOA曾经(并且依旧)是软件供应商的一座金矿。这些供应商们异常热衷于定义名目繁多却又常常矛盾的支持标准、热衷于交付所谓的能够简化SOA系统的设计和实现的软件产品,但实际上却常常因为把这些产品定义为SOA而带来更多困惑。
\很多公司提供软件服务,一些已经取得了巨大成绩,另一些却以失败告终。SOA曾经居于分析师报告的首位,然后又被宣布已死,后来又以不同的名字——如REST、云计算等——而重生。讨论SOA的各个方面的著作和专题文章也有上千本,涵盖内容从架构设计到具体实现细节。
\然而,除此之外,SOA从业者中也存在着很多分歧。从如何成功地创建SOA解决方案,到甚至连SOA到底是什么、必要的SOA组件有哪些,看法均有差异。
\在本次虚拟研讨会上,InfoQ与5位SOA专家就SOA的重大意义、它和其他架构风格的关系、成功实施SOA解决方案的最佳技术和方案以及SOA的未来等进行了深入探讨。
\回答我们问题的5位专家们分别是:
\- Jim Webber——首席科学家,《Developing Enterprise Web Services - An Architect's Guide》一书的作者\
- Claus T Jensen——IBM SOA-BPM-EA技术战略部的首席架构师\
- Stefan Tilkov——REST热衷者、InfoQ SOA社区的前首席编辑\
- Steve Jones——凯捷(Capgemini)基础数据管理的全球主管\
- Mike Rosen——Cutter Consortium的企业架构主管\
- 问题1:当今的SOA包含着很多的含义:请用一句话给SOA下个定义?可否比较一下SOA与“整合”、ROA以及EDA的区别?\
- 问题2:关于SOA和BPM之间的关系,有很多的讨论,有观点认为它们其实是同一种东西,也有人认为有必要区别对待。您的观点是什么?\
- 问题3:分析师们的新宠是云计算。它与SOA之间有什么关系?与之关联的是大数据,那么它又是怎样和SOA关联起来的呢?\
- 问题4:SOA光辉不再的一个原因是项目的失败。您认为SOA项目要想取得成功最需要做的事情是什么?\
- 问题5:可否预测一下SOA 2.0?它会是怎样的呢?\
问题1:当今的SOA包含着很多的含义:请用一句话给SOA下个定义?可否比较一下SOA与“整合”、ROA以及EDA的区别?
\Mike Rosen:SOA是一种用于寻找解决方案的架构性方法。其中,服务是分析、设计、实现、部署和运维的主要概念。要想从SOA中获得最大益处,最好是在跨组织的范围内完成。服务设计必须能体现业务和信息双方面的需求。
\虽然SOA是实现整合的一种方法,而且如果做得得当,通常还是一个更为灵活的方法,而整合则只是SOA的一个方面而已。在以前,只是在一个有限的、企业级一致性作为次要考虑因素的范围内做整合的。SOA方法通常使用整合技术对资源进行转换并使其成为企业范围内可用的服务。
\ROA和EDA是另一种架构风格,“资源”和“事件”分别是其主要的设计驱动力。这些架构风格在系统灵活性和优化上有各自不同的总体目标。它们既不是SOA的子集也不是SOA的超集,和SOA也并不兼容。可以通过混合使用它们,取各自的长处来构建有效的企业解决方案。当然,这超出了今天讨论的范围。
\Steve Jones:SOA依旧是过去的SOA所指的意思,也就是通过服务、功能及服务交互来思考架构问题。SOA用于架构就像OO用于开发,它是一种从业务角度来思考整个IT的新方法,也使得SOA强大,但这不是某种特定的交付方法。所以,在面向服务的方法中用架构的逻辑去思考,就可以选择部分内容是否用面向资源或者EDA来实现,这两种方法是有关“如何”交付的,而不是关于提供一种一致的各种不同的技术方法都可以混合起来的精神框架。
\在SOA中唯一改变了的事情是供应商把各种时髦词汇汇集到同一产品上,所以才会导致人们对于“到底什么是SOA”如此之困惑了。
\Stefan Tilkov:SOA指任何最符合使用这一术语的东西 。说真的,我已经彻底放弃了去定义它,因为无论你给它什么样的定义,都不会找到一个一致认可的定义,最终的结果无非是浪费时间。已经说过,我更愿意关注高层次的方面,至少,这些方面似乎还能被主要的少数人所认可:即,对企业IT的整体分析;无需了解服务的实现细节,即可通过网络消费服务;在总体系统蓝图中应用全面的架构原则;整合不是一场梦魇,也不是事后措施,相反它是关键,所以整合变成了默认的事情。我是一个REST热心追捧者,总是把它作为达成目标的最适用的架构风格来使用,但是我承认并不是每一个人都同意这一点——他们并不知道REST有哪些更好的地方:-)。
\我不喜欢“ROA”这个词;“REST”已经相当好而且足够抽象了,完全符合我的口味,没有必要再去添加什么东西了(我使用“RESTful HTTP”来指Web架构为这种风格的一个实例)。在我处理过的任意一个架构中,事件几乎都是其中一部分,但我也见过那种只使用事件,或事件扮演核心角色的架构。所以,我不确定作为以事件本身为核心概念的事件驱动的架构是否值得去研究。再提一下REST,我的确见过一些有趣的架构选择,它使用以Feed为中心的事件通知机制——轮询经常是一种完善的,最具扩展性的解决方案。
\Jim Webber: SOA是设计和交付那些模拟业务的系统的系统(Systems-of-Systems)的方法。整合是把所有的东西联合到一起,而SOA提供给它依存的环境。单独的整合任务价值很小——整合本身不是最终目的——尽管系统的系统经常需要使用整合。我得补充一点,单纯的“整合项目”等于臭屁。
\ROA就是胡扯,一个正常思维的人是不可能只用资源去做架构的(除非他们的确在使用RPC并使它听起来不那么可怕)。相反,SOA能给那些基于Web架构设计系统的人带来更广泛的指导。关键是SOA提供了模板——封装了业务需求的服务——而Web则提供了广泛而健壮的基础设施以支持这些服务之间的业务协议。
\EDA则被当作一种特殊的活动,它包括低延时总线,提供复杂的、近似实时事件处理能力。事实上,这样的设计原则同样适用于人为的延时——所有系统都是在响应事件,而EDA则是以低延时的方式去做。
\Claus T Jensen:我给SOA下的一句话整体定义是:SOA是一种架构风格、一种思考模式,它促使业务和IT事件的协作与对齐,以服务和流程的交互为中心。整合当然是面向服务的架构应当考虑的一部分,但它也不是唯一的。很多SOA项目都曾经是由IT驱动的,而且重点放在应用之间上;不过,这样做的价值不大,仅通过整合不实现业务对齐,也无法实现有效的企业应用集。面向服务的架构可以是事件驱动的,也可以不是——我个人并不认为EDA是不同的架构风格,而把它看做面向服务的一个方面。
\ \问题2:关于SOA和BPM之间的关系,有很多的讨论,有观点认为它们其实是同一种东西,也有人认为有必要区别对待。您的观点是什么?
\Mike Rosen:BPM是编排模块化业务功能和信息以支持业务流程的一种方法。其中的“M”表示管理。所以,编排只是BPM诸多方面中的一个。SOA是以业务服务的形式提供模块化功能的一种技术。业务服务必须通过编排更小的域和效用服务来实现,但是在SOA中重点通常是封装编排,而在BPM中,重点是暴露、管理、监控和优化流程。没有SOA的BPM容易产生竖井式的解决方案。而没有BPM的SOA则会创建没有业务消费者的服务。二者结合起来才提供完整的解决方案。
\Steve Jones:我之前说过BPM搞砸了SOA(查看此链接),而我现在依旧这么认为。实际上,SOA成就了优秀的BPM,而BPM是实现业务服务能力的一个很好的方法。我的意思是,如果你从服务开始思考,然后选择在其合适的地方使用BPM,并且用一致的方式将它和非BPM方法(如ROA、EDA、包开发等)结合起来。若以BPM开始的话,则容易导致许多粒度过细的只包含单一操作的服务,从架构健壮性的角度来说,这并不是一件好事。因此,关键要首先理解你的服务和能力,然后选择使用BPM实现能力,这将带给你好的SOA和好的BPM。
\Stefan Tilkov:我认为BPM是一个独立的概念。你可以只做SOA,也可以只做BPM,或者两个都做。我在SOA核心中没有看到什么流程,即使我明白BPM供应商也许希望看到不同的一面。有时候,硬编码过程是相当不错的,有时候则不然;即使这样,典型的BPM解决方案从来也不是唯一的选择。
\Jim Webber:服务应当实现业务协议,否则就不算好服务。编排各服务之间的交互可看作BPM,但是这个词汇已经被烙上太多产品的印记了,所以我认为它已经名不符实了。作为一名Web粉丝,我希望看到在Web上(你的组织里是大Web还是小Web不重要)应用超媒体传输业务协议。所以,我认为服务编排是生机勃勃的,但我不想把它和BPM混在一起。
\Claus T Jensen:BPM是一门专注于运营优化的学问,而SOA是一种专注业务与IT结合的架构风格。SOA中蕴含的思想是人们应当关注服务和流程的交互,换句话说,SOA是关心BPM的组织所采用的一种非常自然的架构风格。前面已经说过,即便没有SOA,BPM一样有价值,只不过你将面临一种“服务无序蔓延”的境况。但是,老实说,BPM是SOA战略中非常天然的组件之一,因为它为架构自身提供了内建的业务环境以及立竿见影的业务运营的益处。
\ \问题3:分析师们的新宠是云计算。它与SOA之间有什么关系吗?与之关联的是大数据,那么它又是怎样和SOA关联起来的呢?
\Mike Rosen:云是关于提供服务的,不管它是基础设施及服务、平台即服务还是软件即服务。所以,SOA和云共享通用的基础。云隐含意味着能够用于构建好SOA服务的设计原则也应该应用到云服务上,比如:良好定义的接口、松散耦合、适当的分解、通用语义等。不幸的是,和很多SOA设计师一样,很多的云服务设计师也没有理解这一点。所以,买家要注意了,你要确保你得到的服务是很好地设计、实现和运营的。
\一个SOA解决方案应当能整合基于云端服务和本地服务,而且在云架构上提供自己的服务也应当很容易。和其他事情一样,实现这一点,有好的方法也有不好的方法,有些实现会带来安全、性能、可靠性和责任性等方面的问题。这是实现的失败,而不是云或SOA的失败。可以预见的是,云服务将增加定制整合的需求,加剧应用间通用语义缺失的后果。作为一名架构师,现在就应当准备一份云使用指南,防患于未然,在灾难发生前把问题降到最低点。
\Steve Jones:我在这本书中 谈到过理解服务的业务价值,云真的做到了,因为它有助于让服务的交付成本更好地与其业务价值对齐。业务价值可能是关于降低成本或者转至使用计费,它也可能是创新及大规模扩容上的投资等。
\因此,SOA为理解业务价值提供了方法,从而进一步理解云和大数据如何产生价值。如果你所在的领域,处处都得考虑服务成本、如何降低成本,那么将应用转至云上以降低成本或许是值得的,但可能在大数据上投资就不值得了,因为它在这里没有价值。
\Stefan Tilkov:显然是有关联的。无论你消费什么样的服务(在最抽象意义的假定下),你都很有可能通过网络来做,而且不必关心详细的实现细节。对多数IaaS解决方案,如Amazon的,这么理解都没有问题。但是,我还是发现很难把一些东西如Google的App Engine和SOA概念对应起来,而且常常感觉这种联系是由那些希望把过去的SOA思想和今天成功的云计算模型关联起来的人刻意创造的。
\Jim Webber:一点也没有关系,除非你在别人的基础架构上运行你的服务,或者租用或绑定他们的(更高层次的)封装成服务的业务流程。这种云中的SOA概念、或者云将成为下一代的SOA的说法非常白痴。我承认,运行如此规模的系统是非常兴奋和有趣的,但云不是SOA的救世主,而是能够吸引思想领袖、分析师们的下一个耀眼的事物。如果你的服务要处理大数据,那正是它们相关的东西。否则,它们就不是——数据就是数据,而服务是业务数据之上的行为。
\Claus T Jensen:云是SOA和动态基础设施相结合的产物。云基础架构是:
\- 完全虚拟化的\
- 持续优化的\
- 动态响应的\
- 不均等地支持不同工作量\
但是更重要的是云业务模型是基于可按需消费(支付)的预定义效用服务的效用模型。我经常被问到“如何算别人使用我的云服务的费用呢”——事实上,一些问该问题的人并没有真正实施云,而只是在传统IT业务模型内使用了动态的基础设施而已。
\ \问题4:SOA光辉不再的一个原因是项目的失败。您认为SOA项目要想取得成功最需要做的事情是什么?
\Mike Rosen:我并不认为SOA已不再流行,只能说市场不再过度炒作它而已。每一个应用的基础架构和主要应用提供商都是基于或者逐渐基于SOA的。如今,如果你创建的解决方案不是面向服务的那将是一件很傻的做法。我相信SOA项目在规模上不输给任何其他的软件项目,当然,我并没有具体去查这个数字。当组织试图一口吃成个大胖子而其自身又没有一个全局架构的视野的话,SOA项目就容易失败。所以,最主要的事情是要有一个能融合SOA编目和企业语义的SOA架构视野。对于一个好的架构师来说,形成这种视野应当用不了几周的时间。其次重要的事情是做一些小的增量项目,一次实施一些服务,为项目带来一些立竿见影的效果。并在下一个项目中借鉴获得的经验教训,逐步累加架构和服务。
\Steve Jones:我认为另一个主要原因是很多项目并没有真正地实施SOA,他们只是在做基于Web Service的整合。我时不时就会听到某组织在做SOA,但当我问及他们的解决方案服务架构时,单说其业务服务架构吧,根本就看不到,能看到的依然是旧风格的架构配上Web Service加以整合而已。当这些人于是转移到下一个闪光的技术方法上之后,同样会失败,IT的失败率牢牢地维持在高位。为什么?主要因为多数IT认为,尽管有很多反面的教材,新技术可以成为银弹,但银弹是不存在的。
\一个很好的失败的例子是很多SOA程序中没有MDM(Master Data Management)。如果多个不同的业务领域间需要通信,那你就需要明确相互通信的关键实体是什么。然而,几乎每一个SOA项目在获取这种信息的工作上都做得不够好,这就意味着实施变得异常复杂,业务价值也不再清晰。
\因此,要想使SOA成功,首要的事情就是真正地去做SOA,即,首先思考你的服务和能力,然后,考虑如何去交付服务。在项目的全过程中,你都应当能看见这些服务,在开发团队中,在代码仓库中,在部署指南中以及在管理报表中。这能提高项目的成功率,它把项目细分成更加独立的领域,这样能帮助敏捷等方法的应用,也可以在项目集中分散风险。这需要在纪律上有所提升,也要意识到,同样的人、流程和精神状态,即便使用新技术,也无法产生新的结果,必须要去改变人的思维方式、工作方式外加一些新技术,才能交付不同的结果。
\Stefan Tilkov:用REST怎么样?玩笑而已。对我来说,主要因素是实实在在地从小项目开始,交付一些有价值的东西,实实在在的服务,人们真正想要的、而且会开始使用的服务。除非你做到这一点,否则就不该把公司的每一分钱浪费在ESB、注册表、存储库以及其他的任何花哨的基础设施上,说到底,它们只是方法,本身并不创造价值。
\Jim Webber:增量交付。别做那种为期三年的“转型项目”,因为你会失败。别把SOA当作一个长期的工作,把它当作由市场或组织内部驱动的变更所带来的一场场短小精悍的小战役吧。我之前说过很多次:这种经验叫做游击SOA。这么做吧,你就会有取胜的机会。
\Claus T Jensen:他们应该理解SOA不是关于技术的,不能在项目级别采用SOA,而应该是在组织级(最起码也应该在项目集级别)。Steve Mills,IBM软件集团的高级副总裁、集团执行官,2007年曾说过“面向服务不是从技术开始;而应当从在功能组件方面对身边的世界和业务的一系列的思考开始”。我完全同意这一点,面向服务始于思考模型。
\ \问题5:可否预测一下SOA 2.0?它会是怎样的呢?
\Mike Rosen:目前,多数SOA都是在企业级(Enterprise Tier)应用实施,以提供业务服务和支持业务流程。企业2.0(Enterprise 2.0)解决方案要求在企业层需要更多不同类型的服务。当需要在应用层构建丰富的交互式用户体验,并通过它访问灵活的企业级业务流程时,SOA依然是合适类型的架构。因此,我认为SOA 2.0是跨端到端的解决方案栈的SOA的扩展。这意味着,解决方案架构师应理解如何使用它,而且通过良好设计的服务接口提供基础设施能力(如位置、存在和协作等)。
\Steve Jones:不,我看没有SOA 2.0,因为我从来也没见到过OO 2.0。它是思考IT及其与业务关系的一种方法,或许,2.0就是人们真正去做SOA而不仅仅是关注下一个闪光的技术而已。关键问题是人们应该看看IT和业务是否在为SOA的成功添砖加瓦。因此,看看业务价值,看看如何使用MDM作为关键IT或业务的驱动者来构建简易的IT。
\没有SOA 2.0,只有合理地实施SOA。
\Stefan Tilkov:我并不认为叫做“SOA 2.0”的东西会有什么成功的机会——这个词已经被滥用得够多了。我非常认同SOA背后的核心价值有好处,但是应该给它贴上新的标签。慢慢思考这个问题后,如果业界完全停止使用什么标签,尝试着去做一些有意义的事情,也许事态会更好。可以梦想一下,对吗?
\Jim Webber:我认为转向网络是不可避免的。我猜想Web API终将更加REST化,而我们也会习惯用负责任的方式打开我们的数据。万事已具备——我们能更好地理解如何在网络上分享业务协议;鉴权和授权也算是有用的(即便还不够完美)。因此,SOA 2.0将利用这个无处不在的、安全的、健壮的平台进行大范围数据分享——它将真正成为一切事物的网络。
\Claus T Jensen:就架构思想来说,另一个方法会在将来某个时间点上出现。准确地设想,即使并非不可能,也是很困难的——这就是范型变化的自然特性,它们无法被预测。在可预见的未来,我看不到这种变化,尽管作为通向敏捷和有效的主要架构方法,潜在的SOA应用还是很多的。
\结论
\总之,就连专家对SOA的确切含义、它的发展方向和它的未来也不能达成一致意见。这正是让我们的工作——软件架构——如此富有挑战、如此有趣的原因。似乎并不存在什么银弹,我们需要继续求索构建新的更好的SOA实现的方法。
\关于座谈会专家
\Mike Rosen,Wilton咨询集团的首席科学家,该咨询集团专注于架构咨询。此外,他还是提供IT研究和分析的Cutter Consortium公司的企业架构主管,SOA Institute的总编辑。他是一位经验丰富的架构师和技术领袖,在企业架构(EA)、面向服务的架构(SOA)、软件架构、分布式技术和业界标准等方面都有丰富的经验。Rosen先生30年的职业生涯经历着从新人、CTO、首席架构师、到业界领先的中间件产品的产品架构师等不同角色。在他的职业生涯中,他积极参与了十多个国家举办的各种会议的技术演讲和创作。他还与他人合著了很多著作,包括:《Applied SOA: Service-Oriented Architecture and Design Strategies》、《Developing E-Business Systems and Architectures: A Manager’s Guide》以及《Integrating CORBA and COM Applications》等。
Stefan Tilkov是科技咨询公司InnoQ的联合创始人、资深顾问,该公司在德国和瑞士均有办公室。他参与一个大型分布式系统的设计已十多年了,该系统用到了各种各样的技术和工具,从C++、CORBA到J2EE/Java EE以及Web Service,到REST以及Ruby on Rails等。他领导InfoQ的SOA社区多年,发表了很多专题文章,且出版了一本图书(《REST und HTTP》,德文),他积极参与各种全球的技术大会并发表技术演讲。
Jim Webber博士是 Neo Technology公司首席科学家,该公司开发了著名的开源图形数据库Neo4j,他主要负责图形数据库服务器技术,同时也编写开源软件。Jim热衷于使用大型网络如Web来构建分布式系统,这也促成他与人合著了《REST in Practice》一书,之前还写过《Developing Enterprise Web Services - An Architect's Guide》一书。Jim是活跃的演讲者,定期出席全球各种会议。他的博客在这儿,Twitter是 @jimwebber。
Steve Jones是凯捷公司基础数据管理的全球主管,他负责凯捷全球MDM销售的协调和建立,包括卓越离岸中心的发展、以及以业务为中心的MDM咨询和交付的方法的出版和产业化。Steve帮助客户交付那些看上去像业务、像业务一样发展,成本符合价值的IT资产。他和业务及IT领导们一起工作,帮助组织控制基础数据将其控制在符合业务价值的范围内。
Claus Torp Jensen是业务流程优化(BPO)基础团队的高级技术成员,及SOA-BPM-EA技术战略部的首席架构师,在概念上和实践中推动(译注:业务和IT)的对齐及整合。BPO基础团队负责IBM软件产品的架构,确保从客户的立场支持SOA、业务流程管理(BPM)和业务敏捷的核心原则。Claus于2008年3月加入IBM,在此之前,他是一家地区Danske银行的集团首席架构师、架构和业务发展部的副总裁。
从1999年开始,他负责驱动Danske银行的SOA项目及卓越中心,并被认为是SOA的专家和布道者。Claus拥有丹麦奥尔胡斯大学的计算机科学博士学位。
\查看英文原文:SOA in 2011 Panel
\感谢马国耀对本文的审校。
\给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家加入到InfoQ中文站用户讨论组中与我们的编辑和其他读者朋友交流。