面向服务的体系结构解析

: 面对不断变化的需求,越来越多的人开始关注面向服务的体系结构(SOA),SOA抽象层次高,软件元素之间松散耦合,系统开放性好,这些优势使得它成为未来一段时间重点研究方向。作者从自身理解的角度探讨了面向服务的体系结构的原理。

关键词: 业务 职能 业务敏捷  服务  面向服务

 

1.      软件工程面临业务需求不断变化的问题,

软件体系结构(下称SA)的提出主要是为了解决在软件日益复杂趋势下,如何提高软件质量的问题.SA通过高层抽象,将人们的关注点从繁杂的细节中转移到系统的总体体系结构上来,让分析、设计人员从整体上有效把握软件的重要的功能及非功能属性。SA的复用也使得软件的复用由原来简单的代码复用上升到软件分析、设计的复用,复用的层次更高,粒度更大,这无论对于提高软件质量,还是软件分析、设计知识的传承来说,都是大有裨益的。

随着人们对IT的依赖程度加深,越来越多的业务都需要通过IT系统来完成,这使得IT系统与业务系统结合越来越紧密。一方面随着业务范围的扩大,软件复杂度会增高;另一方面,业务不会是一成不变的,它总是随着市场的需要在不断改进,现在是快鱼吃慢鱼的时代,谁能够适时、快速地响应市场的变化,谁就能在市场竞争中取得优势。这种业务的快速变化和高质量变化适应市场需要,又称为业务敏捷。这就对我们的IT系统也提出了需求,如何去适应业务敏捷。

传统SA更多地关注的是如何去解决一个复杂系统,在应对业务敏捷性方面探索较少,这使得大家经常对业务需求的变化比较无措:或者拒绝变化,或者重大更改甚至重新设计。在这种情况下,一种新型的SA—SOA,面向服务的体系结构应运而生。它提出将业务提炼成服务的思想,使软件的体系结构更开放、更灵活。

2.面向服务的体系结构

目前关于SOA的争论还比较多,下面这个定义概括了SOA 主要思想:一种应用程序体系结构,在这种体系结构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,可以以定义好的顺序调用这些服务来形成业务流程。

我觉得SOA不仅是一种体系结构,也是一种设计思想,它是面向对象、面向组件方法学的进一步的发展,抽象程度更高,而且关注的是系统总体结构。

面向对象以细粒度的对象为抽象元素,面向组件以组件为抽象元素,而面向服务是以服务为抽象元素。服务是什么呢?服务是自包含的,具有定义良好的功能接口。

1)服务可以独立完成一个功能,和其他服务耦合度低。这一特性也决定了整个SOA是松散的、开放式结构,你可以随意添加服务,对现有系统不会造成任何不良影响。这好似一套积木玩具,它由许多固定形状的积木块组成,在没有搭成某个模型之前,积木块之间是没有什么必然联系的,它们仅仅是“一堆”积木块,如果你发现某种形状少了,没问题,再去买一些,这对于原来的积木没有任何影响,因为合起来后它们仍然是“一堆”积木块,不会发生什么化学变化变成天外飞石。但如果你原来买的不是积木块,而是一个用胶水、钉子固定好的模型,如果你以后发现你不喜欢了,想给它加点或者去掉东西可就不是那么容易的事了,因为它的组件间是“强耦合”的。

2)服务用标准的与软件实现技术无关的语言描述,服务接口的实现遵循标准的协议,与具体软件技术(编程语言或开发平台)无关。这一点非常重要,它使得服务提供者和服务使用者都不要关心对方使用了什么样的软件技术,这样即使以后技术进步其中有一方用另一种软件技术,服务仍然能够正常运行。积木块最关心的是它的形状,你没钱就买木头的,有钱就买金子的,如果你只是关心你所搭建模型的样式,那么什么材料对你来说都无所谓,只要形状合适就可。

  Java Beans 视图

                                          1

 

这个概念基于一种架构样式,该样式在三个主要参与者之间定义了交互模型:服务提供者,公布服务描述并且实现服务;服务消费者,他既可以使用统一资源标记符(URI)来直接使用服务描述,也可以在服务注册中心来查找服务描述并且绑定和调用服务;服务代理提供和维护服务注册中心。

3.企业级应用中的SOA

SOA本身是定位在企业级的应用上的。企业运作本身是由多个业务职能部门相互配合而成,所以一项业务的完成会涉及到多个职能部门。企业的业务也是多种多样,在信息化初期,我们往往针对某一项业务开发IT系统,由于针对性强,所以很难为其他业务所利用,在原业务需求发生变化时,往往要重新建立。

SOA的思想就是站在企业全局的角度将企业的每个业务职能(业务流程中的功能点)变成相应的服务,进而用IT系统实现服务,而一个业务流程就是这些服务的顺序组合。由于业务职能相对来说变化比较小,所以服务比较稳定,而业务流程往往需要随需应变,将稳定与变化隔离开,我们就能够很好地实现业务敏捷。

 

  SOA 层

                       2 SOA参考架构

2中显示的是一个进行SOA实施后软件系统层次架构图,第一、二层是IT基础设施,主要实现基础服务,第四、五层主要是与我们业务相关的业务程序,直接与业务模型对应,主要是实现流程编排,即根据业务流程来调用相应的服务,可以看作是业务层。由于业务流程不一样,所以会存在多个业务系统。第三层是这个架构的核心-服务层,这一层处于业务与IT系统之间,正是这一层将业务与IT基础设施分开,只要服务的定义不变化,那么业务和IT可以独立地演变。在这样的结构下,我们做业务系统就像搭积木一样,积木块(服务)是已经按标准做好的了,我们按照一定的样式选取所要的积木块搭建一个模型(业务系统),如果我们要换成另一个样式那么就把原来的模型拆成积木块重搭,我们可以舍弃(但不一定是要扔到垃圾箱,你不用别人还可以用)一些积木块,也可以再加入一些积木块(可能是已经做好的,也可能还没做,如果没做我们可以按标准再做,这并不影响原有的积木块),如果我们积木块设计的形状合理,那么它可以在很多种样式中反复被利用。通过这样的做法我们就能充分体会到搭积木的快乐,而不会陷入做积木块的痛苦中。

积木块设计地越好,它被重用的可能性就越高,我们需要做新积木块的可能性就越小,所以SOA方法中最关键也就是如何发现“好”的服务,这些服务独立的、相对稳定的基础服务。而服务模型的建立是以业务模型为基础的,所以SOA方法不仅仅强调IT系统的敏捷性,他同样强调业务模型本身是灵活的,能够很好适应业务敏捷性。SOA实施时要求首先要对业务进行整理、优化。

综上所述,SOA实质是将易变的业务流程(业务)与相对稳定的业务职能(服务)分开,认为业务是服务的组合,通过服务将IT系统与业务系统之间进行解耦,同时也实现了业务系统之间形成松散结构,所以它能够更好地适应业务变化,达到快速响应的目的。

 

参考文献:

1.Ali Arsanjani, Ph.D.  基于服务的建模和架构

2.Olaf Zimmermann  面向服务的分析与设计原理

3.毛新生等 业务敏捷:SOA的本质(《程序员》2007 6月刊)

4.梅宏,申峻嵘 软件体系结构研究进展(《软件学报》软件体系结构专刊)

 
1 SOA 架构样式的概念模型
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值