浅析深究什么是SOA?金蝶中间件有限公司总经理奉继承博士阅读提示:本文探讨SOA概念背后的核心内涵,如何将SOA落地的实务方法。金蝶中间件作为全球领先的SOA解决方案供应商,拥有中国唯一全球第四通过JavaEE5.0认证的SOA基础平台;中国唯一完整实现TOG-SOA标准模型的中间件解决方案;与北京大学合作,国家“核高基”科技重大专项成果,承担振兴国家基础软件的责任和使命;中国唯一入选Gartner全球有能力提供SOA服务的十九家软件厂商。本文就是根据金蝶中间件readySOA解决方案整理而成的通俗科普文章。本文介绍的主要内容包括:为什么需要SOA;如何准确理解SOA;SOA如何落地;介绍金蝶中间件readySOA解决方案。1.背景IT行业就是术语和缩写流行的行业,各大厂商都喜欢隔三差五地推出一些新概念。为了不落人后,大家都喜欢争先恐后地跟进。有深入研究、务实研发的供应商,能够将概念落地,不断推出创新的产品和服务,赢得竞争优势。但“贴标签”的也大有人在,而且趋势是越贴越多,跟风炒作,“鱼目混珠,泥沙俱下”,以至于“混绕视听”了。SOA就是这俱多“三字母”缩写的概念之中的最流行和热门的一个。但目前,SOA概念和解决方案,话语权方面基本上被国外巨头所控制,特别是大的中间件厂商。但是真正能够完整实现SOA的落地解决方案和案例很少,刻意包装的成分比较多,特别是应用架构方面。重技术,轻方法论,造成企业实施SOA缺乏足够的架构方法、SOA治理、SOA实施运维方面的最佳实践,因此企业实施SOA缺乏系统的指导。另一方面,国内的不少软件企业,由于不能提供完整意义上的SOA解决方案,只能提供部分的组件,小部分特性符合SOA思想,所以就任意曲解SOA的含义,随意解析SOA的概念。以至于国内没有一家软件企业不宣传SOA,不宣称其产品符合SOA架构的。由此造成,许多企业和客户对SOA是非常茫然的,对SOA的价值也转向怀疑和抵触。这种厂商之间的无序竞争,不利于国内企业的自主创新,也不利于企业导入和实施有效的SOA,实现SOA的商业价值。本文试图就SOA的来龙去脉,外延内涵和前世今生,来一个全面的阐释。一家之言,权作业界参考,希望带动大家做一些更深入的思考。文章比较长,如果兴趣不够,也可以就此打住。2.为什么需要SOASOA的出现不仅仅是厂商炒作的结果,本质上是两种力量驱动的结果:需求拉动、技术推动。业务需求的拉动,希望解决业务应用的问题;技术发展的推动,使得SOA具备了技术上的可行性,软件技术的发展推动了IT创新的商业价值。2.1.需求拉动需求拉动方面,主要来自于两种信息化的困境。一个是“信息孤岛”造成基于系统之间互联互通的整合需求;另一个是业务的变化所导致对IT灵活性,以适应变化的需求。目前国内外基本情况类似,经过30年的信息化建设,许多企业和政府部门都在不同时期、应用不同技术、与不同的厂商合作,建设了不同规模的应用系统,造成了信息化不是没有系统,而是信息孤岛太多的问题,而且不是没有数据,而是信息不一致,难以整合。因此,互连互通是当前信息化中的核心问题和核心需求。顺便说一句,那些认为中国企业的信息化起步晚,历史负担少,可以快速部署全新SOA,可以运用推倒重来的策略是不了解中国企业信息化,自我想当然的结果。事实上,我国信息化无论是金融、电信、电力等大行业,还是中小工商企业,“孤岛现象”还是非常严重,遗留系统的整合不一定就少,而且我国软件供应商的系统普遍架构能力比较弱,整合难度一点也不低。这种互联互通需求,既包括企业内的各种应用系统之间的集成,也包括集团企业总部与下属企业、企业与上下游伙伴之间的业务协同。企业内互联互通的需求另一方面,激烈的竞争和产业变革,需要企业不断调整其组织、流程和商业模式,以获得竞争优势,造成业务的不断变化,而且随着经济全球化,这种变革的步伐在不断加快。但僵化的IT基础设施难以迅速响应这种变化,造成IT与业务的不平衡和不匹配。因此,IT的灵活性以适应业务变革的需求,也是当前信息化建设过程中所面临的最大挑战。而且这方面的变革速度和变革幅度比国外许多企业都要大得多,毕竟我们的企业还是在快速成长,快速成熟的过程之中。业务灵活性的需求需要一种新的架构技术来支撑企业实现其快速的灵活应变的业务战略。传统的信息化方法和软件研发方法是基于业务需求的直接映射。这种需求驱动的信息系统最大的缺陷就是对变化的适应性差,这也是传统软件工程造成的“软件危机”最直接的表现。如果要满足业务需求的柔性,就需要按照架构驱动,对业务进行适当的抽象,通过服务的表达和业务过程的原子化,来满足系统是按照企业架构来构造,这种架构是动态重构技术来支撑的,我们今天知道了,这种架构就是SOA。2.2.技术推动软件出现最早是用于科学计算,然后是计算机辅助设计、辅助制造等等工业应用。在企业管理领域大规模应用后,业务需求不断的变化、系统不断增加、流程更复杂、系统越来越不堪重负,出现了需求交付方面的重大挑战,以至于人们用“软件危机”来描述软件工业所面临的困境。软件技术发展过程中,一直在寻求解决四个基本问题的方法:质量问题、效率问题、互操作问题、柔性构造问题。这些问题今天依然困扰着软件行业。造成这个局面的原因是异构性和标准规范的滞后。屏蔽异构性异构性表现在计算机的软硬件之间的异构性,包括硬件(CPU和指令集、硬件结构、驱动程序等),操作系统(不同操作系统的API和开发环境)、数据库(不同的存储和访问格式)等等。长期以来,高级语言依赖于特定的编译器和操作系统API来编程,而他们是不兼容的,因此软件必须依赖于开发和运行的环境。造成异构的原因源自市场竞争、技术升级以及保护投资等因素。希望屏蔽异构平台的差异性问题是促成中间件发展的驱动力之一。而支持SOA架构的中间件平台,已经在很大程度上屏蔽了系统环境的差异性,提供了一致的计算环境。实现互操作因为异构性,产生的结果是软件依赖于计算环境,使得各种不同软件之间在不同平台之间不能移植,或者移植非常困难。而且,因为网络协议和通信机制的不同,这些系统之间还不能有效地相互集成。造成互操作性不好的原因,主要是标准的滞后。解决软件之间的互操作性问题也是促成中间件发展的驱动力之一。而SOA技术从一开始就强调了标准的重要性,包括中间件平台的实现上都是基于全球共同的标准来实现。共性凝练和复用软件应用领域越来越多,相同领域的应用系统之间许多基础功能和结构是有相似性的,每次开发系统都从零开始绝对不是一种好的方法,也是对质量和效率的很大的伤害。尽可能多地凝练共性并复用以提高软件开发效率和质量,通过中间件通过提供简单、一致、集成的开发和运行环境,简化分布式系统的设计、编程和管理,这也是SOA发展的重要推动力。软件技术发展内容,包括更好的程序设计语言、更好的平台和软件开发技术,如面向对象、组件开发、面向服务等等。而这方面,在技术上逐渐发展的成果大部分都凝聚在今天的SOA解决方案之中。程序设计语言的发展而这些技术推动因素,从本质上是通过复用、松耦合、互操作(标准)等机制来提高软件质量、加快软件研发效率、使研发出来的产品能够相互集成并灵活适应变化。这些技术因素逐渐推动了SOA架构的形成和发展。SOA架构的发展3.如何准确理解SOA我并不打算介绍SOA的定义,事实上到现在为止,还没有一个权威的SOA标准定义,因为从不同角度,不同厂商和学术团队会有不同的答案。争论定义本身,不是目的。OASIS(一个SOA标准组织)给予出的SOA定义“SOA是一个范式,用于组织和利用可能处于不同所有权范围控制下的分布式系统。”维基百科给出的SOA定义“面向服务的体系结构(Service-orientedarchitecture)是构造分布式系统的应用程序的方法。它将应用程序功能作为服务发送给最终用户或者其他服务。它采用开放标准、与软件资源进行交互并采用表示的标准方式。”。这些定义本身,一般人员要准确理解是非常困难的,既便是专业人士,未必能够深刻理解其内涵。如何更加形象理解SOA?怎么通俗化解析SOA的核心含义?3.1.如何形象理解SOA事实上,SOA的思想我国很早就有了,印刷术的发展过程其思想就完整体现了SOA的核心含义。印刷的内容――文字,在秦始皇统一六国之前,各国的文字是不统一的,据说许多常用的文字有十几种写法和读音,妨碍了各国之间的文化交流,就象SOA之前,各种软件平台、各种开发工具和各种接口的组件之间,没有统一的标准,对软件系统之间的整合造成巨大的困难。因此,伟大的始皇帝统一了六国文字,“书同文、车同轨”就是通过标准解决“复用”和“互操作”等问题。这也为大规模的印刷和文明发展提供了一个良好的基础,这种“统一封装”的文字,对文化交流起到了一个“互操作”的标准作用。SOA的形象解析在没有印刷术之前,书籍要依赖于手工抄写,这样效率当然是非常低下,而且质量也不能获得一致性的保证,也就是书籍还无法“复用”。中国人首先发明了刻版印刷术,就是将书籍刻成一块一块的凸字版,然后就可以大规模进行印刷了,当印刷出来的书籍脱销时,下次还可以继续使用,大大提高了效率,这就是“复用”,软件通过组件的封装,也可以达到重复和在不同场合多次使用的“复用”效果。刻版印刷术有个很大的问题就是文字之间是紧耦合的,同样一个字,在另一部书之中是不能“复用”的,必须重新雕刻,也就是说刻版印刷是没有“编排”特性的。就如软件技术中微软VB开发的Com+组件就只能在Windows环境之中使用,它不能与Java开发的EJB组件进行复用和编排,因为他们与开发环境和运行环境是紧耦合的,要在UNIX环境下使用,必须重新开发(相当于重新“刻版”)。活字印刷就是通过文字与版面之间的松耦合,通过“排版”来实现一部书的印刷版面的,这种松耦合就大大提高了文字的字模之间的复用和编排效率。我们标准封装的“服务”就类似一个一个的字模,通过服务编排(“排版”)来实现业务流程。统一文字和活字印刷促进了人类文明进步,而SOA促进全球IT架构和应用的革命。3.2.SOA的核心要素要准确全面理解SOA,首先必须理解SOA的核心要素:SOA的核心要素SOA的目标就是实现灵活可变的IT系统。要达到灵活性,通过三个途径来解决:标准化封装、复用、松耦合可编排。互操作(标准化封装)、复用、松耦合等SOA技术的内在机制,也是中间件技术和产品的本质特征。标准化封装(互操作性)传统软件架构,因为封装的技术和平台依赖性,一直没有彻底解决互操作问题。互联网前所未有的开放性意味着各节点可能采用不同的组件、平台技术,对技术细节进行了私有化的约束,构件模型和架构没有统一标准,从而导致架构平台自身在组件描述、发布、发现、调用、互操作协议及数据传输等方面呈现出巨大的异构性。各种不良技术约束的结果是软件系统跨互联网进行交互变得困难重重,最终导致了跨企业/部门的业务集成和重组难以灵活快速的进行。在软件的互操作方面,传统中间件只是实现了访问互操作,即通过标准化的API实现了同类系统之间的调用互操作,而连接互操作还是依赖于特定的访问协议,如JAVA使用RMI,CORBA使用IIOP等。而SOA通过标准的、支持Internet、与操作系统无关的SOAP协议实现了连接互操作。而且,服务的封装是采用XML协议,具有自解析和自定义的特性,这样,基于SOA的中间件还可以实现语义互操作。SOA要实现互操作,就是通过一系列的标准族,来实现访问、连接和语义等各种层面的互操作。软件复用软件复用,即软件的重用,也叫再用,是指同一事物不作修改或稍加改动就多次重复使用。从软件复用技术的发展来看,就是不断提升抽象级别,扩大复用范围。最早的复用技术是子程序,人们发明子程序,就可以在不同系统之间进行复用了。但是,子程序是最原始的复用,因为这种复用范围是一个可执行程序内复用,静态开发期复用,如果子程序修改,意味着所有调用这个子程序的系统必须重新编译、测试和发布。SOA的复用为了解决这个问题,人们发明了组件(或者叫控件),如MS操作系统下的DLL组件。组件将复用提升了一个层次,因为组件可以在一个系统内复用(同一种操作系统),而且是