SOA——通过不同的解释学习

引言

越是基本的概念,往往越“解释不清”,而深入解读的过程,总是可以学习到许多道理——不管最终是否得出了唯一的解释。SOA就是这么一个东西。                

几年前接触到这个概念时,曾经觉得无需深究,因为觉得这是自己理解甚至自觉地应用着的东西,例如在做软件架构设计时,就已经采用了类似的思路,甚至还选择了SOAP、UDDI这些东西。那时觉得这是一种很基本的东西,但无法看清或预料今天的这种发展。现在细想,SOA在概念出现几十年后在实践领域“咸鱼翻身”,是很有道理的。便宜、随处可得的网络,是它生存的基础,迈向深入的互联网企业应用,是它的动力。SOA也不像它表面看起来那么简单。它的确很有可能成为IT应用进化的又一个里程碑。

在IT领域,有一种强烈的意识,就是希望把自己提出、提倡或正在推广的“理念”尽量包装、提升为“先进的企业管理理念”。强烈的商业主使的背景,导致了对许多事实和道理的污染,但另一方面,由于信息技术独一无二的广泛性、改造力,它也确实强烈地影响甚至某种意义上引导着这几十年管理理念与方法的发展。清楚地认识到上述两个方面会大有裨益。SOA同样如此。作为一个相对完整的讨论,下面也从这个层面开始对SOA的讨论。                            

软件之外——作为经营理念或EA的话题

“服务”本来是企业经营管理范畴的一个基本的概念,在应用到软件架构这样的领域时,需要更严格的解释。即使对软件架构师,从源头的、非技术层面上去充分理解它,再进一步探讨各种可能的,技术的解决方案,应该也是很有启发的吧。在上一篇文章《什么是服务》中,笔者做了这样的尝试。今天再来看“面向服务架构”(SOA)。在企业管理的领域,服务是一种被不断强调的理念,也许有足够的切合度将其称为“SOA经营理念”。例如IBM这样的企业,从上个世纪后期,就开始强调自己是一个服务型的企业,而不是制造企业或技术提供者。

另外,从EA(企业架构,以信息系统架构为主)的角度去讨论SOA,也会是很有意思的。一方面,从企业设计的角度,强调面向服务的原则,与强调其它原则(例如指挥 -控制)所产生的企业架构,会有着非常大的差异;另一方面,更现实的,就是当企业架构的一个基本部分:技术架构采用或能够体现为SOA时,对企业的组织或业务模式本身 有什么样的影响(或关系)?这都是可以深入探讨的话题。                 

然而,不管服务对现代企业有多么重要,“面向服务的企业”这种说法,可能不会被企业管理者所接纳。传统的企业经营管理领域,对这个方面有更加经典、完整的认识,企业永远是“面向客户”(customer-oriented)的,服务可以是“至上”的、“根本”的、“主要的”,但不是企业所“面向”的。

作为企业的IT应用战略

相对于把SOA提升到企业经营管理的层面,从企业信息技术应用战略的角度去探讨它,是一个更实在的话题。许多对SOA展开的论述中都涉及到这个方面。从现状上看,作为信息技术的最终用户一方,它所能采取的战略与战术,是完全被供方制约的,在SOA的解决方案没有真正成熟和普及之前,用户一方不会有什么具体的作为。但是,即使作为开发者,能够充分地站在用户立场上去讨论和认识,是非常难得和有益的。现在能看到许多涉及到这个层面的讨论,但是经常可以发现,讨论者对于最终用户、最终用户方的IT支持/实施者、企业改造与规划者、应用规划与设计者等等不同的角色和立场划分不清,最终所提出的观点也常常含混不清。

作为开发途径与设计风格

Eric Newcomer等(2006)诠释SOA时,从开发途径入手,即“面向服务开发”(Service-Qriented Development)。这里的服务主要就是指网络服务(Web Services),这已经是现今IT企业应用领域最广泛和基本的技术(和环境)。从这个角度看,SOA是一种水到渠成的东西。沿着这个思路,从应用开发与实施的“过程/途径”(而不是系统自身的结构)角度,Newcomer等认为SOA“是一种设计方式”,它指导着业务服务(business services)从构思、创建、使用到停止的整个生命周期的各个方面。进一步,他们指出:SOA也是一种定义和提供IT基础设施的方式,它允许不同应用相互交换数据、参与业务过程,无论它们各自背后用什么样的操作系统或编程语言。这后一点,实际是对应着前面讨论的“作为企业的IT应用战略”话题。

作为开发途径或设计风格这种诠释,与后面讨论的作为软件架构风格的诠释实际上是互补的,一个强调了过程方面,一个强调了对象(应用系统)方面,要得到一种有特定结构特征的对象,其设计、开发、实施的过程自然是需要与之相适应和配合的。

作为软件架构风格

回到软件这个范围,首先看比较笼统或基本的解读:SOA是一种架构的风格而非架构本身。例如,Open Group的定义:                              
SOA是一种架构风格,它支持面向服务面向服务是按照服务、基于服务的开发和服务的结果进行思考的方式。”                               

OMG看来也是倾向于采用架构风格的比较宽泛的理解(以下文字出自OMG网站链接的SOA定义讨论Wiki页面,2006-10,文中的黑体是引用时加的):                         

  “SOA是一种架构风格,用以为服务的供应者与消费者群体(community)达成共同价值,它可以

   - 令群体参与者以最小的协同依赖或技术依赖共同工作;                

   - 对参与到群体中的组织、人和技术规定必须依照的契约;               

   - 供群体实现业务价值和业务过程;                         

   - 便于多种技术在群体内的交互作用;”                       

                                    
更早的,Hao He(2003-9)有一个我认为很值得重视的论述:
SOA是一种架构风格,旨在互相影响的软件代理(software agents)之间保持松散耦合。服务是由供应者执行的工作单元,服务供应者执行它来达成服务消费者期望的最终结果。供应者与消费者,都是由代表其所有者 的软件代理(software agents)担当的角色。
这个表述还包含了一个相当有趣的概念——代理(agent)。在字面上理解它(就像许多表述所用的“代表”on behalf of 一样)也是可以的,但用出自人工智能领域的那个agent去理解,也是意味深长的,笔者也曾对此也一些思考。                                       

所谓的风格(style,或类型),就是说可以有许多不同的体现形式。看起来,实际的情形也正是如此在发展着,如此而言,在更具操作性、技术性的SOA定义上出现“一个缩写,各自表述”,也是自然而然的事。
                                 

作为软件技术架构

务实的技术专家们不愿意玩虚的,因此会倾向于用技术的语言,甚至具体的技术来诠释。例如Systinet资深副总裁Gregg Bjork这样解释:“SOA就是以XML接口的形式发布服务的架构”。无疑,以当今的软件技术,建构SOA方案,不可能舍弃XML。                               
                                         
但我们应当能够理解到,从原理上,一个真正的SOA,是跟任何具体软件开发、支撑技术无关的。在SearchWebService.com提供的定义,虽然也强调了技术角度的要求,但并没哟约定具体的技术:
面向服务架构(SOA)是一种支持服务之间通讯的底层结构。在这个上下文中,服务被定义为一种工作单元,它可代表某种运算处理实体(例如人类用户或其它程 序)执行。SOA定义两个运算实体(比如程序)之间怎样相互作用,使其中之一能够执行代表另一个的工作单元。服务相互作用用描述语言定义。每个交互作用是 自主的和松散耦合的,故每个交互作用独立于任何其它的交互作用。”             
                                          
在类似的许多强调技术操作性的界定中,“松散耦合”(loose coupled )和“代表,做代理”(on behalf of)是两个典型的要点,但从对服务本来意义的思考出发,在这两个方面都是可以进一步探讨的。

结语

即使作为一名软件架构设计者或工程师,尝试一下软件之外的理解,对把握到SOA的实质也有很大的好处,最起码你就不容易被各种常常隐藏着很深的商业企图的SOA方言所操纵或挟持。在软件领域,将SOA作为软件架构风格的理解是比较中肯的,在此基础上进一步去分析形形色色的SOA实现方案,就比较有谱了。

参考链接


更新日期:2007-10-18
                                  
(任何应用、传播请保持原署名及出处。商业机构或营利性使用,需取得作者许可)       
作者:Flyingrobot, 2007年8月8日, 企业应用探索日志, http://blog.vsharing.com/flyingrobot

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值