
IBM软件集团企业解决方案部大中华及北亚地区首席架构师 毛新生
【IT168现场报道】IBM软件集团企业解决方案部大中华及北亚地区首席架构师毛新生演讲:
企业应用架构的理念、技术与实践
大家早上好。今天我们可以说我们不再孤独了。IBM在探索随时硬件搭档的时候是6年前了,但是他们说我们要在亚洲地区找一支团队,一起帮助寻找答案,通过和客户一起来做一些实践,看怎么样将它的业务从不太灵活的状态到真正时时的状态。很有幸,我们和印度的团队有一些竞争,中国的小伙子们比较努力,最终我们入围和美国和欧洲的专家,在那个时间点开始了SOA的探索过程。
当时只有几个人,我们成立了中国SOA设计中心,开始在美国和欧洲一些地方做一些事情,那个时候还不叫SOA,那个时候我们叫做高级Web服务应用。希望能够借助与Web服务带来的一些好处,主要是它的副操作能力和标准化,看看能不能让各种各样的应用在一起,帮助企业真正的随时应变。从那一点开始我们逐渐的在4年前,在那个点上确定了一套设计原则和设计哲学以及架构的风格,我们认为那是我们找到的一个答案,就是今天我们在广为谈论和非常关心的SOA。然后再那个点上,弟兄们,我们非常孤独。我们去企业找CIO谈、CEO谈的时候,大家都鼓着眼睛说小毛你来忽悠我们了?那时候在像在爬一个很陡的山,可是今天看到济济满堂的专家、高手的时候,温暖感油然而生。
在过去几年中,我们在实践中的感悟凝结成一句话,今天的SOA已经成为你构造IT系统的一种哲学和方法,它能够真正的帮助我们满足现在业务对IT系统的新需求,就是如何能够真正做到非常敏捷的应对各种变化,想变就变。
我会从几个角度来谈论一下。首先是SOA的发展脉络,SOA确实是IT自然发展的结果,是一个发展的趋势。我们会讨论一下SOA究竟怎么落地,让我们不要停留在概念的探讨上,最后我们会简单的讲一下IBMSOA的理念。
从SOA来讲,我们已经讨论太多了,SOA的根本目的究竟是什么?在过去的这些年里,包括今年的几个大的跟客户交流的活动当中,我们还是看到很多的时候,客户有一些误解,SOA的根本目的是什么?我们为什么要做SOA的事情?有一件事情是非常重要的,SOA的根本目的就是业务的敏捷性。也就是说,我们如何借助与SOA,让这个业务本身想变就变。
要做到这件事情不是太容易,当中有三个要点要理解:首先是业务本身还是非常灵活的,实质上是在谈论我们不管下面有没有IT的系统。好比说,在国内实际上有非常多的企业,尤其是中小企业,没有什么特别的IT系统,都是靠人自己来做这件事情,他们也有一个业务敏捷性的问题、随时应变的问题,不需要IT的东西,业务本身是独立的。他自己怎么样才能做得很灵活呢?
我们举个例子,联想很高兴把IBM的PC部门买了,但是接下来麻烦就来了。因为IBM同时也卖给他们N多人,从美国、日本到中国的研发中心,与此同时,这些人工作的习惯,IBM卖给他们的部门的相关工作流程、文化理念和支持他们的IT系统大概一并都得卖给他们。我在美国若干个实验室包括日本的实验室都看到非常有趣的现象,IBM的办公室中间起了一道墙,建筑物里起一道墙很容易。IBM支持这些人的业务流程和业务系统中间砌一道墙怎么砌呢?
这对IBM和联想来讲都是一个很麻烦的问题。IBM怎么把这一部分人和相关的业务系统和数据剥离出去,而联想面临一个很讨厌的问题,我们怎么把这些东西接到我的系统里面来,这实际上就是一个非常典型的例子,你的业务想变化在发生各种各样的变化的时候,想怎么样去灵活的做这件事情,我们在过去的若干年里,和客户在探讨,牵扯到一个业务自身建模的问题,牵扯到一个CEO的角色需要关心的问题,我的业务是不是真的也可以组件化,我的业务的执行的过程是不是非常的富有柔性,我可以把我不同的业务活动变得什么样呢?就是内聚性非常高,外偶合性很低。
如果做到这一点就很High了,如果用户的需求发生变化,好比说银行,今天取钱的过程发生变化,电子银行和过去传统的存取钱怎么结合起来形成一个新的业务,让用户不用在柜台间跑来跑去,如果你的业务面上已经组件化并且想好了组装的问题的话,我想这个业务本身就很灵活,最终用户的需求就比较容易的去满足。
如果说我们在业务层面上做了非常灵活的处理和组装的能力,可是IT系统相当一部分业务活动是由IT自动化并且支持的,如果不能很好的去配合这一点,也是非常苦恼的。大家想想看在过去不管是我们的主机时代用汇编的语言,用C或者是其他的语言去做的东西,还是说在过去借助于OO、CBD、分步式的对象在做这个事情。我们一直都在努力的希望我们的IT系统越来越组件化、模块化、并且有组装的能力,但是有一件事情我们没有做好,就是在IT系统中你会发现,那些项目不管是组件和对象做得怎么好,或者是一些涉及的模式,可是抽象的级别比较低,它和业务的组件和刚刚讲的可重用可组装的业务的活动有着非常遥远的距离。
所以我们讲在这个地方就存在一个事情,我们能不能总结过去IT世界里一直在尝试和探索的,希望它有组装的能力,希望它重用,希望能够非常灵活的应付各种各样的变化的能力,设计哲学和设计原则,能不能提升抽象的级别,使得我的IT系统能够直接出现一个业务人员可以理解的抽象单元,而且这种抽象单元还可以像过去OO的世界里面的组件的样子,他们有着非常清晰简洁的接口,同时按照各种各样的模式可以比较灵活的组装,应付各种各样的变化。
服务作为一个更高级别的抽象,对在引用的IT系动,它继承了过去我们在多年IT探索中所得到的设计哲学和理念,集成了他们并且将其进行延伸,增加业务抽象和业务支持的部分的东西进来,成为一个新的IT人员应该掌握的抽象的手段。它可帮助我们非常灵活的将IT世界里的东西进行分割,并且灵活的组合。
有了这个工具,听起来不错。还有第三个问题,那就是一个已经切割好可以灵活重用和组装的业务世界里的单元,与IT世界里的单元,它们之间的影射,或者我们用一个学术的词“可追溯性”,这个参考的架构谈论最多的一件事情就是“可追溯性”,这个意思是双向的,当业务活动发生变化,比如说业务的规则发生变化,或者业务流程对这些业务活动进行组装层面上发生变化的时候,这种变化如何从业务的世界向IT的世界去进行传递?这是一件事情。
其次,我在IT世界里,当我要切换到一个新的平台,我从过去老的主机的世界切换到J2EE或者相反的过程中,我形成的IT世界里的冲击带来的一些变化,如何反馈或者在业务的级别上被阻断,如果有什么变化,怎么影响业务层面上的东西,影响在哪里,有没有很好帮助你定位的地方,成为减少这种变化对我们政体的系统,对于参与这个事情的业务方与IT方所带来的困扰尽量的减少。
所以我们说,在过去若干年的探索当中,这三个要点是在SOA世界里非常重要的东西,接下来我们从细节上进一步的看一下。
首先我们讲,从计算IT系统发展的历史来讲,它一直都在朝着这样的目标进行,从简单的01到打孔的纸带,到面向模块、对象、组件,今天的SOA、服务,或者说未来的什么东西发展,它一直都在研究这样的(情况),我们的系统越来越分步,抽象的级别越来越高,我们所使用的技术为了维持在大规模分步的世界里大家的交互性,使用的数据也好、功能也好、描述性的东西越来越标准,以这样的方式在发展。
非常有意思的是,在过去若干年里,互联网的发展以及Web服务的发展,对架构的需求形成了一个巨大的助推力。使多年前非常理论性的SOA在今天焕发了自己的青春。前面已经多次提到,这个架构风格从过去我们支持一个企业里少量的业务比较以主机为中心的单一的架构风格,在应用里都是非常多的紧偶合的,技术上极度亲密和相关的数据表达方式,逐渐转移到以部门为导向,满足企业越来越多的业务活动的需求,可是没有总体的规划,每个部门和业务的单位做它自己的事情,出现了一大批比较是各管各、自顾自的自身内部非常紧耦合的孤岛式的应用和数据的资源。这种架构的风格逐渐在过去几年里往一种组件化的级别发展。组件化更多的发生在应用的内部,一个应用或者平台上,构造的同级别比较亲密的应用怎么组件化,一个应用级别和几个应用级别之间的共享,脱离应用的环境和平台的环境就没有办法了。J2EE也好,其他的也好,过去都是在企业计算的角度,沿着组件化应用的风格在推动,依然是非常紧偶合的,可重用、组装的能力也寥寥无几。
进一步往前演变,分步性越来越强,每个公司的全球化、全球化的竞争、资源的竞争和分步等等,导致一个企业在全球分步的情形越来越明显。中国这些企业也都在努力的往外扩张,联想、TCL或者是其他的,一方面是业务面上我需要有地域上的分步,另一方面随着互联网的进展,应用也变得不是那么复杂化,很多开源的世界里,你要应用吗?随便找一个业务员来满足需求。应用从一个相对复杂非常严谨的大的东西变得越来越分步,自身非常简单,做单一的角度来进行。这些事情又许多串起来,互联网和Web服务的发展使这个事情有一个基础,越来越可行,无论是安全、性能等问题都可以得到有的解决。大家开始在想,原来和平台和技术没有什么关系,和地域和位置没有什么关系的切割,非常复杂的IT系统的方式实际上我们找得到,我们找到这种方式以后出现的好处是,我每一个应用本身可以做得非常简单,不用局限或者束缚于非常复杂和特定的技术环境,我们可以非常轻松的将这些分步的东西很好的组合起来,每一个应用做自身的事情。这样一个设计方式和设计原则逐渐的演变到今天,究竟有一个什么东西呢?具体来讲是什么呢?在这个地方牵扯到若干层面,首先是业务的层面,在这样的一个设计哲学?
从技术的角度来讲,首先是宏观的架构风格上,这样的一个IT的系统应该在这个世界里是以服务为中心去思考问题的,以服务这个基本单元来进行的,而不是以对象、组件这样的方式。在这样的世界里,有服务的提供者,也有服务的请求者,最关键的是,这些服务的请求者和服务的提供者之间的关系是非常松散偶合的,换言之,每一个服务本身不管是作为提供者和请求者是相对独立的,只提供自给自足服务的描述,不需要依赖于任何其他的服务、状态和功能,它只管它自己。
然后又一系列的架构设计原则和设计模式来帮助你真正的将这些管自的服务可以比较容易的找得到他们,发现他们,将他们很好的比较容易的组装在一起,满足你应用级别的业务需求。为了做到这件事情,有一系列的架构元素,后面我们会谈到,比如说ESB等,为了实现这样一个东西,你需要做什么,在这里会有一个变成的模型,这些模型在最初级的力度上就是Web服务,你做出这个就可以了。稍稍比较靠近的发展阶段就是SDA、SDO,这分别从数据的角度让你去做这个事情,这是程序员看到的世界。
合起来是一个非常重要的事情,我们怎么样去进行一个好的分析和设计,以服务为中心进行业务分析,问题的建模,转移到价格设计和实现。我们讲,很重要的架构元素、反映设计和风格的有几个。首先是ESB,实际上承载了过去信息的能力,增加了服务层次上的中介,可以帮助你去发现服务,可以帮助你去路游服务,是在语义和语法的层次上。通过它可以使服务的请求者和服务的提供者变得非常的松散偶合。
另外就是流程的引擎,一个业务流程的引擎可以帮助你把业务很好的组成起来,端对端的流程满足了它的特性。在这个层次上你也需要一些业务的管理,从而更好的去满足并且用数字化的方式去引导业务决策和优化。通过这样的做法以后,你发现在以服务为基础的世界里,原来这种非常坚硬的应用程序之间的边界就轰然坍塌了,而且非常低层的技术世界和非常高层的业务世界之间的差距消失了,所以使得一个IT系统不仅仅变得灵活,还使得IT人员和业务人员对话有了一个基础。
作为一个总结来讲,SOA实质上来讲,设计的原则和架构的风格是一个构建IT组织、实现和整合业务流程的新的IT的趋势,它的核心就是引入了新的抽象级别,就是服务。一个服务基本上我们可以理解成重复使用的,可以和别的服务进行组装的业务单元或者业务活动、业务能力。
当我们讲服务的时候,更多的是谈论的不是IT的概念而是你的业务的概念,也就是说,你的这个公司实质上是你业务基本上将这样的一种服务,也就是可重用的业务单元组装在一起,来形成你的业务流程,满足你的业务需求的公司,我们称之为这个公司是面向服务的,它和今天经济转移到知识经济、服务经济是非常有关系的。为了支持这样一个业务风格的IT的系统要具有自身的架构的风格,这种架构的风格是以服务为中心的,我们称之为面向服务的架构。在这个世界里,各种各样的业务方面的应用和流程其实就是一个又一个的复合应用。
我们讲,它和过去是非常不同的。首先是标准化和组织的承诺,这两件事情是非常重要的。第一你要做SOA的事情,标准化要在企业架构里有非常好的贯彻。另外整个组织的承诺不是CIO的承诺,不是CTO的承诺,也不是一个技术人员和几个技术人员的承诺,首先是亲爱的CEO同学的承诺,然后就是各种各样业务部门的承诺,他们看到面向服务或者是以服务为中心的业务模式对创新和业务的灵活性,对他们赚钱和关心的种种痛苦的问题的解决是如此之有效。所以他们说,OK,让我们面向服务,接下来是IT部门需要去关心和承诺的东西。
我们讲说,整个SOA实质上刚刚谈到,已经将IT系统的抽象级别从一个过去纯粹的技术世界(对象、过程、函数、组件等)逐渐延伸进业务的领域,还有第一步,服务。将来还会有更多的东西。开始做OO的时候,大家抽象自己的问题和一个业务问题的时候,最早的《OO的分析和设计》开篇就说把需求拿过来,名词就是对象,动词就是对象的方法,这是他所谓的做OO的方法论。而今天有分析模式、设计模式,有各种各样的东西,还有所谓的OO的系统怎么架构,演变到J2EE,这个演变的过程,以服务为中心的事情今天才刚刚开始。一段时间以前,我们参加服务的会议的时候,大家就说服务会不会转化为服务的伙伴去做这个事情。实际上对IT的人员做了一个新的要求,兄弟们,你更多的是业务和技术都非常熟悉的复合型的人才。
我们讲说,SOA对整个IT带来的冲击和过去不一样,过去不需要考虑我怎么样去做企业的整个应用系统,去考虑它的连通性,而今天SOA需要考虑这样的问题,从一开始构造这个应用,它就注定要和企业中的其他应用和外面的应用打交道的,连通性是非常重要的。在SOA的世界里,服务通常是下面来完成的,有粗密度的重用和组装能力,也有细密度的重用组装能力。
从技术人员的角度小节一下,SOA就是这样子,我们将业务的功能和应用的数据变成可重用的模块,它们可以连接起来,完成端到端的过程,这个模块就是服务。SOA本身定义了业务和IT两个层面上的东西,首先是你的业务本身、流程怎么实现,IT怎么样实现这样的哲学和业务层面的设计创建和交付。
所以从一个企业的角度来讲,你的客户看到的就很爽,他得到的体验真正是服务的体验。一件服务是我掏了钱,我就是大爷,我享受服务,不用管其他的事情。今天还不是这样。你试试到政府的部门去跑跑,或者是到银行去搞搞钱,这些都是很痛苦的,不是一个端到端的体验。柜台后面的小姐或者办事员一张脸板得和冰霜一样。做了SOA以后,企业本身从客户角度来讲,它看到的是非常有弹性的端到端的体验,企业的CEO都非常关心。自身的业务部门的老总或者是你的CEO们看不到下面IT系统东西,他也不需要关心,他更关心业务世界里端到端的业务流程,而且这些业务流程是可以进行数字化的度量和管理的。
SOA怎么落地呢?我们前面谈到了,首先是业务层面上的建模,怎么样将业务进行组件化。然后是IT世界里怎么架构,怎么去建设这些东西。这个过程是简单的,一方面是说业务世界里建模以后,借助于服务建模的过程,这实质上就是将粗密度的业务组件和业务活动与过程怎么样递次分解,映射到IT世界里比较细密度的服务上去,借助于SOA基本的架构风格根据你选择的产品设计架构和实现。
在这里看得非常清楚,一方面是业务的结合,还有一个是粗细密度的结合。SOA实际上是一个企业级的架构,是具有整个企业范围影响的,我们希望真正的去尝试SOA或者使SOA发生效果,我们应该像佛所说的,亦如是观。在企业中你发现,扑面而来的一个事情就是业务层次的世界,怎么将你的业务转化为可重用和组装的单元。我们发现说,有实现业务层面上的东西,站在用户的角度,站在信息的角度、数据的角度、功能的角度不同的去建模,实现各种应用,然后又一个整合的角度,怎么将不同的应用整合起来,还有一个怎么运营和运作的角度,安全的角度和系统管理的角度。SOA涵盖这方方面面。
因此我们讲,SOA没有办法一蹴而就,是一个需要业务和IT的世界携手同行,相互理解,有一个有规可循的治理,这是一个框架,做事的方式方法和规矩。大家这样合作才能达成目标,这是一个长期演变的过程。
实际实施的时候有很多问题,我们总结了十大顶尖问题,什么时候开始一个服务,什么是好的服务,可伸缩性标准等等。我这个地方只是简单讲一下,怎么样开始第一个SOA的项目。
通常应该有一个远景图,然后应该对自己做一个成熟度模型的分析,这里是从方方面面来讲的,可以类比CMM的角度去讲它,从业务组织、IT的方法、应用的状况、整个情形、架构是什么样子的,硬件和软件的基础设施。做完一个评价以后,可以确定自己的目标怎么做,选择其中的一个或者若干个作为你的重点开始第一个项目。
从切入点的角度来讲,可以从不同的角度来想,一个是增强数据的重用能力,一个是对连通性解决好,把整合的基础打下来,怎么样让人的合作变得好一点。我的业务流程是端到端,我拿到的是非常完整的数据化。
治理也是一个非常有趣的话题。治理是使得SOA的重用真正发生的基础。这里有一个例子,刚开始的时候,这个家伙提供很多服务过来使用,陆续有不同的部门开始来用了,提不同的要求,产生了冲突就开始解决问题,之后继续发生,就乱掉了。不见得你用了SOA的方法,用服务建模的事情来做就一定能避免这个问题,还是需要一个规矩,让我们从整体业务的角度而不是从一个一个部门的角度来谈这个问题。和前面讲的SOA是企业级的架构是一样的。
SOA的治理方法实际上是我们在实践过程中总结出一套方法,这个方法是可供参考的,也不见得是最好的方法。基本上你可以从计划的角度,先可以做一个计划,实际上是从企业政体的角度出发,可先侧重在某一个局部,做一个计划,然后将相关的规矩定义出来,国内的一些企业做得蛮好的,他们有非常完备的企业架构的实践,非常令人惊奇的。在美国做了几年到现在为止还处在不是特别普遍的阶段,国内一些企业在计划和定义都做得很好。实施的过程中要遵循一些东西,最后有一个评审,之后要有一个修改,这样去实施这件事情。因为你整个SOA来讲,服务是有生命周期的,从业务建模、定义出来,创建出来开始组装、应用、管理,这个过程中你都可以应用SOA治理的标准和要求。
这个图大家都非常清楚,这是一个以服务为中心的参考,这是IBM支持的服务总线,怎么通过这个服务来改造旧有系统的服务,新的系统如何在SOA、J2EE的平台上开发,自然而然的成为一个服务,然后有网关和合作伙伴打交道,把它的服务引出来或者你的服务供他使用。
下面分散的、离散的不相关的应用可以在一个服务的层次上,以一种非常好的方式被发现、路由、整合,从而组装在一个业务流程中形成一个端到端的业务流程。如果一些人力的活动通过一些东西转化为所谓的人力活动的服务,或者是一些信息整合通过企业整合,形成一个人、数据、应用的全面整合,通过端到端的业务过程表现出来。然后再这些服务和业务流程上施加一些数字化的指标,从而你可以进行业务绩效和流程管理,有一个数字化的基础来支持创新和业务流程的优化等,还有一些管理和开发的事情。
应IBM和书商的要求,在这里做一下广告,有两本书是相互配合的《SOA&Web2.0--新商业语言》是给老板看的,《SOA原理、方法和实践》是给CIO和架构师看的。
谢谢大家。