今天在论坛上又现针对SOA的评价,其实自从SOA概念被提出来以后褒贬不一的评价不绝于耳,有人说它一无是处只是炒作而已,有的人说它是整合异构系统的法宝,本人自接触SOA到现在已经差不多有三年左右,期间一直在做SOA相关产品和项目的研发和实施,到现在有种不说不快的感觉,以下是我的一点拙见写下来与大家共勉。
1. SOA是什么,每次看到大家一说到SOA就必提BPEL、ESB等概念,SOA是Service Oriented Architecture的缩写。中文的翻译应该是面向服务的构架,既然它是一个构架,那么它必定是以服务的创建、管理、监控等一系列从下至上的以服务为中心的构架,那么其中涉及到的技术规范就很多了而并不只是BPEL、ESB等概念了。
l 首先是服务的创建,从面向过程的程序设计到面向对象的程序设计,主要解决的目的是让程序具有更好的可扩展性和可复用性。而在SOA下,IBM提出了SCA和SDO规范用于创建更具扩展性和复用性的程序模块,这种扩展性不仅仅局限在API之间的调用,更是扩大到更为广阔的空间,例如一个用Java开发了一个符合SCA的服务模块,你可以将其发布成为WebSerivce或者其他的服务类型,而不仅仅是API,真正实现模块即服务的模型。万丈高楼平地起,良好的服务基础是SOA落地的关键,在此我并不是说SCA是构建服务的唯一方式,但是它的确是一个很有效很好的模型。另外在构架服务的过程中,大家会经常提到一个服务粒度划分的问题,服务粒度可大可小,关键是要考虑系统(由很多服务组成)的发展会怎么样影响服务本身的定义。我们可以将一个面向服务构架的系统看成是一个生态系统,而不是部署完就一劳永逸的系统,其实这个正式SOA的本质和目的所在,如果是一个生态系统那么我们会在实施前就有一个系统的近期规划、远期规划等,结合这些规划再来做服务粒度的划分就会比较科学,而不是大家拍脑袋拍出来的。
l 服务的管理,服务开发出来了后,为了实现其效用必须有一个统一的管理和调度,那么在这个层面上涉及到的技术和规范包含了很多内容,比如:ESB、BPEL、BPMN、WS-I,WS一系列的技术规范。我们还是从下到上的来理解,首先各个系统或者历史遗留系统提供的服务的方式都各不一样,有的是WebService、有的是JMS,有的是DB,有的是文件,或者是符合特定系统的API。SOA必需提供一个统一的平台实现服务的透明性。ESB是解决服务透明性的一个解决方案,各个服务按照自身的服务标准接入到ESB中,而ESB提供多种调用方式实现N*N的调用。而在这个过程中涉及到很多的技术规范和标准,例如WS-I、WS-addressing等,我们可以把ESB看做是一块主干,上面提供了多种插槽,通过主板各个在插槽上的元器件可以通信,实现了服务的透明性后,另外一个很重要的问题是,如何根据业务流程组织这些服务,这个就是BPEL需要实现的内容了。而目前被大家所熟识的BPEL其实是BPEL4WS,它定义的一套自动执行流程,即中间步骤不包括人的活动,而这种流程在实际过程中会遇到很多问题,其实在很多的流程中还是需要人来参与的,那么BPEL又扩展其针对人工处理的协议BPEL4HUMAN,其实BPEL为了实现更多的流程类型,扩展了很多比如BPEL4JAVA等,支持BPEL的厂商都是一些大腕,比如:IBM,ORACLE等,但是还有其他的比如富士通就提供类XPDL的流程定义和解析,而BPMN规范提倡的是用BPEL作为其执行引擎的定义,而用BPMN用于显示其流程定义。邓老先生提出了“不管是黑猫还是白毛,抓到老鼠都是好猫”,在流程这块,我个人认为只要开发出能解决问题的产品就是好的产品,比如像:EOS:)
l 服务的上层模块,为什么我叫他是服务的上层模块呢,其实这个部分也是SOA发展的上层台阶,包括了BI、模型分析等内容,目前本人还没深入了解。
综上:SOA是一个服务生态系统,其中包括了一摩尔的技术协议和规范,SOA项目的设计是需要近期规划、远期规划,从上而下的规划。而SOA的落地则需要的是从下而上的组合。
2. 待续…