看了篇文章,对SOA有了初步的理解。可以把SOA架构看作成一个完整的企业架构,企业里有各种业务(业务系统),每个业务都有自己的服务,业务通过ESB(企业服务总线)串联起来,有个服务注册中心,业务把自己的服务注册到注册中心。消费者可以在注册中心找到自己的服务,完成自己的需求。达到一站式服务,就像超级商场和小卖铺的区别一下。
以下是这篇文章.
简介
最早在1996年, Gartner就提出了SOA的概念,为SOA描述的远景目标是:在于让IT变得更有弹性,以更快地响应业务单位的需求,实现实时企业(Real-Time Enterprise)。后来在IBM、BEA等IT巨头的推动下,各种技术逐渐完备。截止到目前为止,业界还没有一个统一的SOA定义。SOA是一种软件系统架构,其通过松耦合的方式,将各个组件的不同功能单元——服务(Service)——连接起来。SOA的核心是服务(Service),与服务相关的实体还有服务提供者、服务消费者、服务注册表、服务条款、服务代理和服务契约等。
W3C将服务定义为:“服务提供者完成一组工作,为服务使用者交付所需的最终结果。最终结果通常会使使用者的状态发生变化,但也可能使提供者的状态改变,或者双方都产生变化”。
服务代理者(Services Broker)是一个服务存储库,它允许服务提供者发布服务到该服务存储库上并使服务请求者能够找到这些服务。服务发布者(Services Provider)提供符合契约(Contract)的服务,并将这些服务发布到服务代理者(Services Broker)。服务请求者(Services Consumer),也被称为服务消费者,通过查找服务代理者(Services Broker)中的服务,找到想要的服务。
服务本身是无状态(Stateless)的,可以有一到多个组件(Component)组成。服务的表现形式可以是多种多样的,既可以嵌入到页面响应服务请求,也可以作为一个服务接口用来被调用。服务的实现没有技术限制,可以是用各种语言来实现。具体如图01-01所示:
![]() |
IBM在其developerWorks上这么定义SOA:“面向服务的体系结构(Service-Oriented Architecture,SOA)是一种 IT 体系结构风格,支持将您的业务转换为一组相互链接的服务或可重复业务任务,可在需要时通过网络访问这些服务和任务。这个网络可以是本地网络、 Internet,也可以分散于各地且采用不同的技术,通过对来自纽约、伦敦和中国香港的服务进行组合,可让最终用户感觉似乎这些服务就安装在本地桌面上一样。可以对这些服务进行结合,以完成特定的业务任务,从而让您的业务快速适应不断变化的客观条件和需求” 。
面向服务的架构(Service-OrientedArchitecture,SOA)是一种IT术语,不是一种商业术语,这使得很多人难以理解SOA的概念。本文尝试结合日常生活中的例子来形象的阐述什么是SOA,使大家对SOA有一个全面的认识,从而在整个企业级(而不是企业中的一个或多个部门)构建灵活、可重用的系统。
通过超市的例子解释什么是SOA
我们在小的时候家门口有很多的小卖部,大一点的小卖部会有柜台,营业员站在柜台里面,我们需要买东西的时候来到柜台外面,柜台里面有什么商品透过玻璃一目了然,找到想要的东西后直接向营业员要就好。小一点的小卖部更是只有一个窗口,我们通过窗口就可以看到里面大多数的商品,直接找老板要某一样东西就好。这样,每个小区或家属院门口都会有一到几个小卖部,满足了我们多数的日常需要。
这就类似我们早期的IT建设,各个部门根据自己的需要,分别构建自己的应用系统,用来实现本部门业务的自动化(从手工方式变成电子方式),业务量和数据量都不大,基本上能满足本部门的需要。
随着社会的发展,小卖部越来越不能满足人们日益增长的物质需要,于是,百货商店(百货大楼)就得到了大的发展,大家都习惯去百货商店购买东西。
同理,各个部门的业务也在发展,分散在各个部门之间的业务系统也越来越不能满足企业日益增长的业务需要,于是,各种集成系统应运而生,就像从小卖部到百货大楼的转换一样。
社会的发展还在继续,随着大卖场(超市)的出现,人们的生活方式有了一次大的转变,以往我们需要跑很多地方才能买到的物品,在超市里就都可以买到,从粮油副食品,到小商品,再到电器等等,真正实现了一站式购物。在超市出现以前,比如同学要过生日,我们需要买蛋糕、鲜花、生日礼物送给同学,同时蛋糕需要用漂亮的包装盒包装,生日礼物需要用包装盒以及丝带包装,那我们需要分别跑不同的地方才能买到我们想要的东西,而随着超市的出现,蛋糕、鲜花、生日礼物都可以在超市买到,同时还会赠送蛋糕需要的包装盒,生日礼物需要的包装盒和丝带。超市带来的另一个变化,就是我们可以自由的挑选我们想要的商品,所有的商品都摆在货架上等待我们挑选,相比于传统的百货商店和小卖部,要方便许多。
企业基于全局构建的SOA系统同样给企业应用带来了一次大的转变,通过基于SOA的系统真正实现了对所有企业资产的集成(类似于超市的一站式购物),通过重用(REUSE)企业现有资产,构建更好的面向使用者的操作平台(而不是面向计算机的一个个孤立的应用系统)。基于SOA构建的系统(超市)可以很好的集成企业中已经存在的各种资产,从而使企业的现有资产得到了很好的重用。通过服务调用的方式,使得原有各个系统以及新构建的系统有机的结合成为了一个整体。
大型连锁超市背后的重要支撑就是其现代物流,这就类似于SOA中的企业服务总线(ESB)的概念。现代物流中运输的是超市需要的各种商品,同样,ESB上跑的是各个系统需要的服务(Web Service)。超市可以把以前的小卖部以一个个货架(专区)的形式整合起来,而基于SOA的系统同样可以把以前一个个孤立的系统整合起来,这种整合是以松耦合的方式实现的,不再像集成系统那么通过点对点的集成技术来实现(当业务发生变化时,需要硬编码来修改系统以适应业务变化),就像货架上卖的货物可以随时调整一样,基于SOA的系统允许接入的服务也是可以根据需要进行变化的。
![]() |
小企业需要SOA吗?
小企业需要SOA吗?显然是需要的,就像越来越多的小卖部变成了一个个连锁超市一样,企业如果要发展,使用SOA的方式整合企业现有的资源是最好不过的选择,既可以保护原有的资产,又可以灵活扩展,避免了传统的集成方式带来的种种弊端。就像超市有不同规模一样,既有全球大型连锁超市、家电连锁超市、仓储式超市,也有像7天一样的小型连锁超市,更有家门口的小型非连锁超市,同样,不管大型企业还是小型企业,都会需要构建基于SOA的应用系统,区别在于构建的SOA系统的成熟度和规模不一样。
体系结构
相比于传统应用,基于SOA的系统是针对业务随时会发生变化进行设计,而不再针对某一个固定的业务进行设计,各个业务组件之间通过松耦合的方式连接,而不是通过紧耦合的方式,通过原子服务、复合服务保证资产的可重用。
如果想构建一个SOA系统,就需要了解体系结构的概念,体系结构是成功构建IT系统和应用程序的最重要方面。关于体系结构知识的具体请参见软件体系结构。
体系结构中有一个重要的概念:抽象。抽象是指对要描述的对象隐藏无关的细节,在整体上提供简化的视图,以便更好的理解对象。通常来说,抽象的级别越高,细节信息越少,抽象的级别越低,细节信息越多。在设计面向服务的解决方案时,既可以使用自顶向下(从抽象级别高到低)的方法,也可以使用自底向上的方法。在企业级如果要构建一个SOA系统,通常使用自顶向下的方式,先分析整个企业的体系结构(包括业务和技术的战略、治理维护等)。但由于现在多数企业都是以项目为中心划拨资金和投入资源的,所以,自底向上的方式构建SOA项目也是切实可行的,先通过项目获得经验,在将其推广到整个企业体系结构(EA)级别。
SOA参考体系架构(SOA Reference Architecture)
![]() |
SOA参考体系架构如图01-03所示,通过SOA参考体系架构我们可以很好的了解如何构建一个SOA系统,期间会用到什么服务。SOA参考体系架构通过使用非专有的、与具体产品无关的方式,清楚地说明了SOA系统架构中都需要用到那些服务和组件,描述了在企业范围内构建SOA系统所需要的关键能力。
在01-03图的中间部分,是企业服务总线(Enterprise Service Bus,ESB)。ESB作为SOA模型的连接入口点,是SOA参考架构的核心,为整个架构范围内所有服务提供相互通讯的能力。ESB可以提供很多服务,比如请求和响应服务、路由服务(中介服务)协议转换服务、数据转换服务、自定义的日志记录、优化和监视等。另外,ESB还提供了各种服务的通用连接和动态调用(虚拟化)功能,充分利用了服务组件体系结构(SCA)模型编程。
图01-03图的中间靠左上部分是交互服务(Interaction Services)。交互服务通过用户接口、用户交互界面等将将IT的功能和数据传递给最终用户,并满足用户特定的使用习惯。
图01-03图的中间靠中上部分是流程服务(Process Services)。流程服务主要用来满足业务流程的需要,通过将多个服务组合起来形成一个业务流程。
图01-03图的中间靠右上部分是信息服务(Information Services)。信息服务主要用来提供对同构或异构数据源的访问,解决不同数据源之间数据共享困难的问题。比较常用的技术有联邦、复制、ETL、元数据管理、主数据管理、动态数据仓库、XML等。
图01-03图的中间靠右下部分是访问服务(Access Services)。访问服务主要用来提供访问已有应用、打包应用的能力,使已有应用的功能以服务的形式对外暴露出来。
图01-03图的中间靠中下部分是业务应用服务(Business App Services)。业务应用服务主要用来构建一个强大、可伸缩、安全的服务环境,为新的应用组件提供运行时服务。
图01-03图的中间靠左下部分是伙伴服务(Partner Services)。伙伴服务提供将合作伙伴的应用系统集成到共同的企业体系结构中的功能。
SOA参考架构是一个完整的企业架构,可以覆盖整个企业范围内集成的需求。参考架构中的服务通过模块化的方式进行集成,因此SOA的实现可以从一个小的项目来启动,在新的项目实施的时候,新的功能能够轻松的加到架构中,通过渐进的方式在企业范围内扩大集成的范围。
SOA解决方案堆栈
通过对重要概念和关注事项的抽象,SOA解决方案堆栈提供了 9 个层次(分离关注的事项:五个功能层和四个非功能层),以及它们的逻辑体系结构构建块(抽象),这些构建块可以用于在较高的抽象级别上表现面向服务的体系结构。
![]() |
如图01-04所示,SOA解决方案堆栈的五个功能层分别是请求者层(Consumers Layer,消费者层)、业务流程层(Business Process Layer)、服务层(Services Layer)、服务组件层(Sevice Components Layer)和操作系统层(Operational Systems Layer),上方的功能层相是服务请求者更加关注的层次,下方的功能层是服务提供者更加关注的层次。下面我们分别来看一下这五个功能层:
? 请求者层(Consumers Layer,消费者层):
提供图形化界面或其它操作方式,方便服务请求者提出服务请求。
? 业务流程层(Business Process Layer):
业务流程层主要是根据业务流程的需要,对服务层中定义的服务进行相应的组合和编排。
? 服务层(Services Layer):
服务层是整个SOA解决方案堆栈的核心层,由所有的服务(Services)组成,其在五个功能层中起着承上启下的作用,当收到业务流程层的调用请求后,将调用服务组件层的相关组件单元完成业务请求,从而实现SOA业务驱动的理念。服务可以根据实际需要,按粒度进行分层,虽然细粒度的服务可以提供更多的灵活性,但其交互的模式以及治理也更为复杂。相反,粗粒度的服务可以有效降低交互的复杂性,但灵活性降低,大家可以根据自己的实际需要进行灵活选择。
? 服务组件层(Sevice Components Layer):
服务组件层是由各个组件组成的,服务层的各种服务当接到请求后就是调用这些组件完成相应的工作的。服务组件层中的组件是平台相关的。
? 操作系统层(Operational Systems Layer):
操作系统层主要包括操作系统、数据库、管理系统、客户关系管理系统(CRM)、ERP、商业智能(BI)等各种同构或异构的系统,是所有应用程序、中间件以及操作系统的组合。
如图01-04右边部分所示,SOA解决方案堆栈的四个非功能层分别是:治理层(Governance Layer)、数据架构(元数据)和商业智能层(Data Architecture(meta-data) & Business Intelligence Layer)、Qos层(QoS Layer,Security, Management & Monitoring Infrastructure Services)和集成层(Integration Layer,Enterprise Service Bus)。下面分别来看一下这四个非功能层:
? 集成层(Integration Layer,Enterprise Service Bus):
集成层,也就是企业服务总线ESB主要实现服务代理者(Services Broker)的功能,在服务请求者和服务提供者之间提供正确、高效、安全的服务中介、路由和传输功能。
? Qos层(QoS Layer,Security, Management & Monitoring Infrastructure Services):
Qos层主要为SOA提供要实现功能性需求 (NFR) 所需要的各种功能,比如安全、管理、监控等。
? 数据架构(元数据)和商业智能层(Data Architecture(meta-data) & Business Intelligence Layer):
该层主要提供元数据、商业智能相关的各种功能。
? 治理层(Governance Layer):
治理层包括对SOA中业务操作的整个生命周期的治理管控。
如何构建一个企业级SOA系统
第一步:通过组件业务模型(Component Business Model,CBM)分析企业核心业务组件。
SOA是业务驱动的,我们需要根据业务的优先级来进行IT投资,而不能盲目的进行IT投资。通常我们使用IBM GBS的组件业务模型(Component Business Model,CBM)来评估企业的各种业务,分析该企业的核心竞争力在什么业务上。CBM解决方案的基础是组织内核心业务组件的定义,通过对企业的核心业务进行KPI分析、ROI分析,得出该业务是否具有足够的竞争力。
通常我们会从CBM中得出的重点区域作为SOA设计活动的输入,比如对某一银行,我们通过CBM认识到帐号管理是该行的一项核心竞争力,其同时也是客户满意度和减少客户大量流失方面的一个重要决定因素。那我们在进行SOA系统构建时就可以把帐户管理作为一个重点进行构建,通过加快帐户开立流程,增强这个功能从而提高客户满意度,减少客户大量流失。
第二步,通过面向服务的成熟度模型(Service Integration Maturity Model , SIMM)确定当前系统的成熟度以及我们下一步要构建的SOA系统要达到的成熟度,这是个迭代的过程。
第三步,成立SOA卓越中心(SOA Center of Excellence ,COE) 或类似该机构的小组,通过这个中心整合企业范围的技术与资产。成立该中心有助于理顺构建SOA系统过程中的各种跨部门问题,服务的生命周期管理等等。
第四步,使用面向服务的建模和体系结构(Service-Oriented Modeling and Architecture,SOMA)进行服务建模,其对应的工具为Rational Unified Process (RUP)。SOMA是IBM端到端的SOA解决方案开发方法。SOMA 2.4中方法内容主要分成三部分,分别是:服务标识(Service Identification)、服务规范(Service Specification)和服务实现(Service Realization Decidions)。而SOMA3.0对服务实现部分做了细分,共分成四个部分:服务标识(Service Identification)、服务规范(Service Specification)、服务实现(Service Realization)和服务部署(Service Implementation)。服务标识主要是用来派生和定义候选服务,服务规范使用全面的技术来决定哪些服务需要暴露并指定相应的流程和服务组件来实现这些服务。服务实现主要包括解决方案模板和模式选择,技术可行性探索,SOA解决方案堆栈实例化。服务部署主要包括构建、组装、测试和部署服务。服务建模时可以使用IBM WebSphere Business Modeler,治理管控可以使用IBM WebSphere Service Registry & Repository。