SOA(面向服务的架构)为我们提供了一种很好的改变现有业务流程模式的途径,成功实施SOA项目的关键在于分析重点、减低
风险,给出企业真正需要的功能模块。本质上讲,SOA并不是一种
新技术,它仅仅是一种系统设计/规划模式,甚至可以说,只是一种现有业务流程重组转换模式。
要将现有的IT架构转变到SOA架构需要时间、资金、勇气,以及一位强有力的领导者。基于SOA架构建立的IT系统可以帮助企业节约系统的开发成本,并可以大大提高企业的敏捷性。但是,要想实施基于SOA架构的系统,不但需要大胆的构想,更需要大胆的行动。为了实现这一目标,对企业内所有的员工,这既包括IT部门员工,也包括其他部门的员工,都需要转变对业务流程的固有看法。这需要相关的职能部门为了长远的目标而放弃眼前的利益,也要求IT系统设计师及开发人员从服务的角度来考虑系统的构成,同时,可能会放弃某些环节的控制权,如版本控制等。整个SOA系统可能要涉及变更管理、技术管理、风险管理以及日常业务管理等多个已有的业务系统。 这些情况的确能够让人们在是否选择SOA模式上犹豫不决,就像在黑暗的SOA森林中找不到前进的方向一样,但实际情况并不如想象的那么困难,根据已经实施的SOA系统,我们还是能够找出其实施路径的。 SOA的定义 简单的讲,SOA就是将现有的一些功能模块打包成独立的程序包,命名为“服务”模块,这些服务模块在整个软件系统的角色相当于在垒高玩具中所用到的小砖块。对于这些服务模块,需要对其接口进行良好定义,使得其他的应用系统可以使用“拿来主义”,方便的使用这些服务模块。通过创建服务模块库,将所建立的模块集中到模块库中,这样,利用库中的服务模块,可以方便的构建出所需要的应用系统,这好像我们在垒高游戏中,使用同样的小砖块,只需要对砖块进行重新排列,我们既可以搭建出城堡,又可以搭建成鳄鱼或飞机。与面向对象的技术不同,SOA架构所需要的服务模块可以分布在更为广泛的分布环境中,而不必像面向对象技术那样,需要使用大块的可重用去构建一个全新的系统。对于基于SOA架构所构建的系统,我们不必考虑如何基于具体的操作系统构建具体的服务模块,也不必考虑具体的操作系统,只要这些操作系统支持标准的服务接口就可以方便的使用这些服务模块。 如果你认为SOA是解决目前IT系统所有痼疾的万能良药,那你可能要失望了。SOA并不能代替已经在公司内部存在的那些被良好集成的应用系统。通过合理的部署,SOA系统可以改善原有的IT系统效率,使得原有的那些应用系统更具有柔性。 SOA如何改变业务流程 ProCard公司是一家信用卡服务公司,他们能够提供其竞争对手(如visa)不具备的信用卡服务,这些服务包括动态跟踪信用卡持有者个人信息变化,比如增加信用卡透支额度或个人通信地址的变更,要完成这些服务,需要一套完整实时信息系统来代替原有的离线信息系统。同时,ProCard清楚地知道其竞争对手也会建立完成这些功能的信息系统。所以,ProCard面临一个选择:是继续使用原有的信息系统来实现这些新的服务项目,还是建立一个新的信息系统。最终,ProCard选择了后者,基于SOA架构建立新的信息系统。 ProCard可以将从他们的信息系统中将那些完成实时功能的模块抽取出来,形成一个独立的软件产品,以满足对包括Visa系列信用卡在内的产品支持。但是,出于长远考虑,他们希望所构建的系统能够为更多的潜在用户所用。因此,他们决定使用SOA架构构建了面向服务的软件功能组件,这样用户可以方便的将这些功能组件集成到他们的系统中,并且它们还提供一些扩展接口,满足未来软件功能扩展的需要。 但是,大胆的想法往往会遇到很大的阻力。要实现SOA的系统,必须说服业务流程部门的人员赞成这一决定,也就是说,需要改变现有的ProCard的业务模型,不但要让他们知道这个想法是可以实现的,而且要让他们知道这种改变是必须的。ProCard的COO(前任CIO)Inn Hill说道,“从技术上讲,我们的员工可以很快的接受这一新系统,但从业务流程角度讲,我们需要花较长的时间来适应新系统所带来的改变。”其中最关键的一点,Hill提到,是确保我们不仅仅局限于技术层面,更重要的是考虑潜在的商业利益,这就要求我们从简单的独立系统供应商转变成一个服务供应商。“我相信如果我们提供基于服务的一些功能模块,那我们将会开拓一个我们未曾涉足的领域。”Hill同时也强调,一些银行可能不会购买这一新的软件服务,但是,一些对个人信息感兴趣的机构可能会购买这一服务,这样,对ProCard而言,就开拓了除了原有市场之外的另一个新的市场。 “无论从哪个角度来看,实现SOA是一个梦想,它的影响不仅仅是技术层面的,更重要的是,它可以改变我们现有的流程模式。”Hill补充道。 技术是难点,说服员工是难上之难 SOA项目主管必须清楚一点:对于SOA项目的实施,不能一次将所有的功能都加以实现,不能一口吃个胖子。在SOA项目中将风险最小化的一个方法是先将一些小的或有利于业务流程使用SOA模式构建相应的服务模块,这样可以让员工先适应这种新的服务模块,不至于使整个公司因为引入了新的IT系统而陷入混乱。ProCard的CIO Guido Sacchi表示,之所以引入SOA来构建新的IT系统,是出于几方面考虑的:首先,新的架构可以降低IT系统结构的复杂度;其次,可以减少系统的运营成本,同时,增加系统的灵活性。 为了减少整个项目的风险,他决定先对呼叫中心中的两个功能进行服务模块化——站内客户服务和离站信息收集,并将它们作为SOA的测试项目。之所以选择这两个功能是因为它们具有相对固定的项目预算,并且其运营成本相对较高。同时,如果这两个功能服务能够成功实现的话,那可以增加新的利润来源,并且提供新的SOA项目可以成功的证据。 原有的系统的复杂度很高,为完成系统功能,定义了很多复杂的接口,并且代码相当复杂。“如果我们想更改或增加系统的某些功能,我们必须为新的功能目标重写大量的代码。”Sacchhi说道,“比如,要想完成数据的抽取转换装载功能,我们必须针对不同的需求,重构这一功能模块。”但是,在SOA架构上,通过建立柔性的服务模块,就可以方便的利用已经建立的服务模块实现相应的系统功能,而不必为每个需求建立一个独立的功能模块。同时,利用SOA架构,也能节省大量的开发时间。并且,基于SOA架构更为便利的一点是,所实现的服务模块可以为不同的需求所用,就像砖块一样,为完成相应的功能,只需调用重组相应的服务模块即可。 Sacchi表示,基于SOA架构实现的站内客户服务和离站信息收集这两个功能模块,可以大大减少系统的响应时间。同时,SOA架构允许用户将不同的功能集成在一个统一的用户界面下,这样还可以免除用户在不同系统中切换操作之苦。使用SOA架构,开发人员还不必为每个系统构建不同的功能模块,不同系统中可以共享一些服务模块。 PorCard的COO Hill对SOA有着不同的体会,他说,当开发小组很快的掌握了SOA技术,并开发出相应的服务之后,迫使ProCard从原来的软件产品供应商转变成了服务供应商。这一转变也使得ProCard重新考虑原有的质量控制体系。原来,他们的质量控制包括从开发、测试直至最终的产品交付的全过程,但是,现在的情况不同了,很多环节是不可控的,也是不必去控制的,比如,可以使用Visa提供的相应功能模块作为中间件,在此基础上开发出具体的服务模块,同时,对后台的数据库系统也不必去过多的考虑,只要开发的服务模块能够调用数据库中的数据,完成相应的功能就可以了。这样就大大简化了整个开发的工作流程,时间上缩短了,效率自然得到了提高。 基于SOA的折中方案 实践告诉我们,一个成功的SOA项目的实施,依靠的不是热情和勇气,而是细致周密的论证部署。1-800-Flowers.com的CIO Enzo Micali说道,“很多SOA技术的坚定支持者希望我们对我们所持有的7种不同品牌提供一个共同的服务平台。但是,我们的本意是为每个品牌提供一套独立的服务体系。” Micali表示,他领导了一个架构设计小组和两个开发小组,其中一个开发小组主要开发面向客户的应用服务,另一个主要开发核心系统服务,起初,他们的工作都是鉴定哪些项目是可以基于SOA架构进行重构的。“经过一段时间的工作,我们发现那些在业务流程中最基本最通用的功能是可以抽取出来,使用SOA架构进行重构。”同时,常识性的知识在平衡客户需求和软件功能方面起到了极大的作用。并且,他还强调了一点,整个系统的开发部署时间以及系统的性能是检验系统是否成功的关键标准,不必通盘考虑所有的服务功能,相反,独立实现某一部分的功能却是一个比较不错的系统开发模式, Micali也同意SOA支持者,也认为SOA技术是先进的,但是,他表示,如果所有的用户能够有足够的耐心等待的话,他也会将所有的系统功能转移到SOA架构上来,但是,实际情况并不允许我们去这么做。同时,他还表示,即便是所开发的系统并不是急需的,只要认定系统可以转移到SOA架构的平台上来,一定要提前试着去实现。 实现SOA架构系统的好处 尽管我们在上面一再告诫要慎重实施SOA项目,但是实施SOA项目所带来的好处还是很多。比如,我们成功构建了一个通用的服务功能模块,那我们在下一次开发时可以直接调用这一功能模块。“从这个意义上讲,第二次开发时的开发成本为零。”Sacchi说道。他还强调,利用共同的服务模块,还可以大大减少系统的处理时间,减少在多个环节中浪费掉的不必要时间,从而使整个系统的运行更为快速便捷。 SOA项目能够带来的另一个好处是管理上的统一。对于SOA系统而言,要想成功实施一个系统,必须从企业整体来通盘考虑,成立专门的架构设计小组,确定整个企业业务流程运作的最佳路径。这样整个业务流程及信息系统的管理将会实现统一管理,改变过去各部门、各业务环节脱节的现象。 同时,这些SOA项目实施的先行者也提醒SOA项目主管,“不要希望能将大海的水煮开”,要想成功实施SOA系统,必须根据业务流程仔细分析其服务功能,有所侧重的逐一实现,最终使整个系统达到它最佳的性能。 |