张思宇:SOA开创软件系统新结构

互联网 | 编辑: 江海明 2007-01-05 01:00:00转载

公司:中国外运股份有限公司

行业:物流运输业

访谈对象:信息管理部副总经理张思宇

笔者:我们最近在进行一项“中国SOA应用”的专项研究,希望了解SOA在国内企业的部署开展情况。请问中外运是否实施了SOA?

张思宇:是的,我们两年前就开始采用SOA技术作为我们一些应用系统的架构了。

笔者:业界对于SOA的理解并不一致。能介绍一下您对SOA的理解吗?

张思宇: 我从事软件开发20多年了,我认为SOA是一个不小的进步,开创了软件系统的新结构。

一个企业往往会有两个或多个系统,它们之间需要相互交换数据和调用对方的功能。传统的方法是在每个系统上留出对外开放的API接口,这些接口可能是基于一定标准的,但绝大多数是非标准的。

后来出现了多种支持分布式工作的软件结构、语言和编程方法等,使程序可以嵌入另一个系统中。再后来出现了EAI(企业应用集成)技术和产品等等,所有这些技术都试图解决相互调用的关系问题。

进入互联网时代后,出现了Web技术,出现了在应用服务器上,而不是在操作系统上开发应用系统的做法,出现了Web服务,使得客户端或不同应用之间,可以远程调用一个部署在应用服务器上的服务。SOA是在Web服务这一成熟技术上的一种扩展。我理解SOA架构的特点是,第一,参与SOA的不同应用系统或服务大多数是建立在应用服务器上的系统;第二,不同系统之间的对话主要使用标准的协议,比如HTTP、SOAP、XML协议等。

笔者:为什么说SOA是一种进步呢?

张思宇:SOA之前,API的调用方是主动者,它对被调用的系统的部分资源有控制权,会产生影响。这种方式我们叫做紧耦合。SOA则是调用方在提出请求后,等待对方的回应,而干涉不了对方系统的工作。这种方式我们叫松耦合。我们非常希望系统之间是松耦合的,因为如果是紧耦合的关系,A系统不断地通过API调用B系统的资源,B系统自己的工作就会受到影响。而在SOA这样松耦合的关系下,A系统向B系统提出服务请求后,可以继续其它的工作,B系统得到请求后返回给A系统一个结果。如果B系统忙的话,它也会通过一定的机制来处理这个请求。这样不同系统之间不会互相干涉。

第二点,API是非标准化的,SOA则是基于标准的。比如用XML语言描述一个请求,用HTTP等协议传递请求和结果,不同系统上的服务都可以理解,这样系统间对话才有共同语言。

第三,API依赖语言、系统环境、编程环境,但SOA不关心对方是用JAVA还是C语言,也不关心对方是什么Linux环境还是Windows环境,这和它调用服务的过程是没有关系的。所以我觉得SOA确实是一套很好的方法。

笔者:您觉得SOA是技术层面还是业务层面的问题?

张思宇:SOA主要是技术层面的问题,与它所实现的业务没有关系。打个比方吧,我认为SOA是一种文体。比如司马迁写史记,他按照本纪、书、表、世家、列传的架构组织他的材料。这和它里面的内容没有关系。

当然,现在的宣传中,强调了将业务梳理成一个个的小单元,用SOA的架构写成一个个的服务,部署在一套支持SOA的系统平台上,再串起来组合成适当的业务流程。这是关于如何利用SOA编写应用的方法问题,也是SOA应用平台的提供商们所强调的一面。

笔者:中外运两年前开始实施的SOA是一个什么样的项目?

张思宇:这是我们的一个核心业务系统,叫“海运船货代系统”的项目。事实上,我们开始采用SOA架构和编程是在2005年春节后,在2005年之前的将近一年时间,主要是做前期的咨询工作,这个阶段主要是梳理业务、分析需求,确定项目范围,由哪些模块组成等等?

笔者:这个阶段,是不是请了外部的咨询公司?

张思宇:是的,我们是和惠普合作的。

笔者:为什么决定实施SOA呢?

张思宇:海运船货代是我们很重要的业务,我们有将近200家子公司,上万名业务人员需要使用它,每年的营业额上百亿。这个系统也很庞大,包括了很多功能模块。我们觉得SOA的架构有助于我们更好地构建这样复杂的系统。

首先,利用SOA的架构,不同系统、不同模块之间的关系被统一为“请求和服务”。系统太复杂,通过SOA的思路。我们可以关注在每个功能点,以及所提供的服务,避免了系统由于复杂而出现的混乱。第二,这个系统的工程浩大,由不同的人开发不同的模块,如果没有一个统一的软件工程标准,他们之间的沟通将非常麻烦。应用SOA的架构,你只要用XML编写一段请求,我在我负责的模块中提供一个响应机制,注册一个服务就可以了。这样我们的开发工作比较容易组织。第三,我们各地的业务模式不完全相同,往往80%到90%的是相同的,还有10%-20%是不同的,甚至不兼容。应用SOA,我们就可以在已经开发的功能模块上作一些修改,可以减少很多重复的工作。

笔者:那之前是否需要一个流程梳理的工作,使得尽可能多的功能模块可以重用?

张思宇:业务需求不一样有三种情况,一种是流程不一样,比如做一件事情,上海需要经过三个环节,山东需要经过一个环节,我们会把其中相同的情况相同处理。另外一个情况是同一个环节,它所需要的参数不一样,那我们会在一个模块的基础上做些修改,生成两个服务。第三种情况是各地的同种业务的工作范围和服务内容不完全相同,也需要补充一些服务来兼顾。

我明白SOA厂商所说的先把业务需求和流程梳理出来,事先经过周密的考虑,然后做成一个个服务模块,可以像砖头一样搭建。这种情况能实现的话,当然是最好的。但是事实上企业做不到。要事先把系统功能完全抽象成SOA中的服务模块是不可能的。我们的做法是,最早做出来的程序,各个功能之间的耦合比较紧密,然后将程序程序切割成小块,每一块再做一些相应的修改,形成耦合比较松的关系。

笔者:您觉得企业按照这样的方法,可以自己实施SOA?

张思宇:是的。SOA本身并没有任何新的东西,采用的技术几乎都是现成的,只不过是技术经过多年的演进和积累后,忽然有一天完成了质变,某个人提出为什么不按照这样一种思路来编写软件呢?然后就自然而然地走到了SOA。我同意SOA是一个里程碑的说法,但我认为这只是一个从量变到质变的过程,中间并没有什么全新的技术。

笔者:我感觉您对SOA的理解和厂商宣传的SOA并不一样。

张思宇:是的。我认为SOA厂商所说的SOA产品,是在A系统和B系统之间,增加一个模块,A系统和B系统分别在那里注册多个服务。A系统发出的服务请求可能要经过这个模块,由这个模块向B系统提出服务请求。然后B系统返回服务结果给模块,模块再把这个结果返回给A系统。这个模块就是为SOA专门设计的产品或叫做平台。系统可以在SOA平台上注册服务,也可以向它请求别人提供的服务。

实际上,离开了SOA平台,两个应用系统之间在搭建的时候也可以按照SOA的架构,相互注册服务。当然,如果企业已经有现成的应用系统,通过使用厂商的产品,实现SOA架构会更加容易一点。

我理解的SOA不局限在多个系统之间,单一的复杂系统内部也可以应用SOA架构,因为一个复杂的系统可能本身就是由相互分离的不同功能模块组成的。不同的功能模块之间也需要相互调用。

笔者:那您觉得国内SOA供应商的产品和国外SOA供应商的产品在技术上有什么不同吗?

张思宇:技术上怎么定义呢?SOA的特点是A发出请求,B提供了服务并返回一个结果,当然这个服务必须经过注册,开放给A。A需要服务的时候,可以直接向B发出请求。请求是用标准的XML语言写成的,系统之间可以自动交流。只要是按照这样原则编写的软件架构,就可以看做是SOA。

事实上,我没有接触多少SOA产品。我了解了一些IBM、Oracle、BEA这三家当前的情况。如果从技术上来说的话,我认为大家应用的技术应该都是一样的,但在架构思路和目前可以提供的功能方面不完全一样。

笔者:很多企业对于SOA一直处于观望状态,您对国内企业实施SOA有什么建议?

张思宇:我认为最先要掌握SOA的应该是开发商,而不是企业用户。我们实施SOA的时候,也不是我们提出的。但企业都不知道到底是否应该采用SOA的时候,说明市场教育是不够的。企业首先要知道为什么要实施SOA,是否有这个需求?我们自己实实在在做过了,如果一个系统不是很复杂的话,我认为不一定要实施SOA。SOA的可取之处很多,但是SOA也有自己的弊端。

笔者:您觉得SOA有什么弊端?

张思宇: 它的弊端是资源代价比较大,程序比较复杂一些,程序运行中的一些步骤占用较大的资源。它要将软件分解成模块,封装成服务,每个服务都要经过注册,没有经过注册的就不构成服务。系统和系统之间还要遵循一定的协议,编写服务请求,使得软件程序比较大。所以如果是简单的程序,没有必要用SOA。

笔者:中外运信息管理部包括开发人员共有多少人?这个部门在公司处于什么样的地位?

张思宇:我们这个部门总共有60多个人,应该说我们负责整个公司大型系统的建设、维护等所有和信息系统有关的工作。

笔者:实施SOA的时候,你们如何与公司高层沟通它的商业价值?

张思宇:高层关心的是系统功能的实现,能够满足业务需求。他们并不关心我们用什么样的技术实现。我们的“海运船货代”系统这样的项目是由公司高层直接领导的,包括预算、实施计划、人员组织等决策也都是他们最后决定的。采用什么样的技术手段实现,是我们的技术人员最关心,因为那对实现的效果影响很大。

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑