题记:
本文是一篇有关SOA的文章的译文,同时也是本人的毕业设计的文献翻译,完全出于学习和研究的目的,如果原作者对此有异议,请尽快与我联系,我将在最短时间内撤掉该文章.翻译尽可能的参照原文,有些细微的改动,文中的思想,我本人并不完全认同,比如有关面向对象的那段描述.翻译不当之处,还请读者谅解,毕竟水平有限:(
原文地址:http://www.XML.com/pub/a/ws/2003/09/30/soa.HTML
译文部分:
什么是SOA
介绍
"事情可以变的尽可能的简单,但不可能更加简单"
--爱因斯坦
概述
爱因斯坦在数十年前做了上述的著名论断,时至今日,这句话依然与大型软件系统的构建息息相关.不幸的是,任何一个在IT业待了足够长时间的人都能够指出,有太多的软件系统已经在爱因斯坦的这句话上失败了.一些系统做的太简单,以至于无法胜任其应当承担的责任;而另一些则做的过于复杂,使的开发和维护的成本急剧上升,并且没有注意到可能会出现的系统整合需求.看上去要达到"简要"这个程度更像是一个不实际的梦想而已.我们到底错在哪?
松耦合
问题其实就在我们身边.当我们构建了越来越多的软件系统后,出现了许多相似的场景和模式.很自然的,比起把它们全部除去,我们更希望能重复利用这些现有系统的功能.我们先给出一个名词的定义.真实依赖:这是一种事件的状态,它代表了一个系统依赖另一个系统提供的功能这种状态.如果这个世界只存在真实依赖,爱因斯坦的试验也许在多年以前已经实现的很好了.问题就在于,在真实依赖之间我们同样创建了许多的虚假依赖.
如果你去海外出差,你知道你必须随身带着电源适配器,否则你的生活将一塌糊涂.真实依赖是,你需要电力,而虚假依赖是你的插头必须插到当地的插座去.看看那些不同国家的各色的插头,你会注意到,他们有些又小又紧凑,还有些则又大又粗.
这里面给我们的教训就是,虚假依赖是不可以移除的,但是我们可以削弱它.如果我们能够理想的把系统间的依赖降到最低,那我们就已经达到了松耦合的目的,我们可以把那句明言重新加工一下:"虚假依赖应该降到最低而真实依赖是不可改变的."
SOA的定义和解释
现在,我们可以给面向服务架构一个定义了.SOA是个旨在使相互作用的软件业务达到松耦合效果的架构.服务是一个由服务提供者提供的,实现服务消费者的请求的业务单元.提供者和消费者都是软件代理为了各自的利益而产生的角色.
这听起来似乎有些太抽象了,但SOA实际上无所不在.让我们来看个在我们生活中随处可见的有关SOA的例子吧.拿CD做例子.如果你想播放CD,你会把CD插到一个CD播放器里面来播放.CD播放器提供了播放CD的服务.令人高兴的是,你可以更换不同的CD播放器.你可以用一个随身的播放器或是你的昂贵的立体声系统来播放同一张CD.他们都给您提供了播放CD的服务,但是服务质量是不同的.
SOA的思想与面向对象思想有着许多意味深长的差异.在面向对象编程中,数据和行为被强烈的建议绑定在一起.因此,在面向对象的设计中,每个CD应该伴随它自己的播放器,并且不应该被分开.这听起来有些奇怪,但这确实是我们构建许多软件系统的方法.
服务的结果通常可以改变消费者的状态同样也可能改变服务提供商的状态也可能都改变.在你用你的CD播放器听完音乐后,你的心情发生了变化,从"沮丧"变成了"高兴".如果你想要一个涉及到双方状态改变的例子,那么在饭店吃饭将是个很好的例子.
我们想找人帮忙做某项工作通常是因为那个人是那个方向的专家.而消费一个服务通常要比我们自己干来的更便宜和高效.我们大部分的人都能意识到我们不可能成为每个领域的专家.这个道理同样适用于构建软件系统.我们称之为"关注分离",这已经被认为是软件工程的一条基本原理.
SOA如果来达到使交互的软件代理松耦合的目的呢?它通过满足以下两条约束来实现:
1.参与的软件代理的简单并且普遍存在的接口的小集合.只有通用的语义会在这些接口里编码.这些接口对所有的提供者和消费者都是全局可用的.
2.接口间传递的消息必须是可描述的并通过扩展方式传递.没有,或者只有极少量的系统行为被消息订阅.样式约束了消息的词汇和结构.扩展的样式允许新版的服务在旧有的服务存在的情况下被使用.
正如在上面的电源适配器的例子上所说的,接口非常的重要.如果接口不工作,那么整个系统也将瘫痪.在分布式系统中,接口则是即昂贵又易于出错的.接口需要指示系统的行为,而在不同的平台与语言之间要实现接口是非常困难的.远程接口同样也是在大部分的分布式系统中最慢的一种.与为每个应用程序都创建新的接口相比,为所有的应用程序创建一些可重用的接口则要有意义的多.
因为我们只拥有很少的一部分可用的通用接口,我们必须在消息中表示应用程序特定的语义.我们可以通过我们的接口发送任何消息,但是在我们宣称某个架构是面向服务的之前,我们必须遵循一些规则.
首先,这个消息必须是可描述的,因为服务提供者有责任解决问题.这就好比你来到一个饭馆,告诉侍者你要点的菜单,但是你不会手把手的告诉他们的厨师怎么来做你要吃的鱼.
第二,如果你的消息没有按照一定的格式,结构来书写,服务提供者将不能理解你的请求.限制了词汇和结构的消息对于任何一次高效的交流都是必须的.消息受限的地方越多,则这个消息将越容易被理解.虽然这需要通过牺牲扩展性来达到目的.
第三,扩展性非常的重要.要理解这一点并不难.这个世界是个在不断变化的世界,这个道理同样存在于软件系统所处的各个环境.这些变化要求软件系统进行相应的变化,包括服务消费者,提供者,还有他们相互交流的消息.如果消息是不可扩展的,消费者和提供者将都受限于某个特定的服务版本.尽管扩展性如此的重要,不过在以往的情况,依然容易被忽略.最好的情况也只转 载:http://www.qqread.com/dotnet/u236699.html
更多内容请看SOA 面向服务架构、什么是SOA、SOA技术资讯专题,或进入讨论组讨论。
相关专题
- SOA 面向服务架构 (337篇文章)
- 什么是SOA (7篇文章)
- SOA技术资讯 (337篇文章)
- VB.NET 入门教程 (22167次浏览)
- asp.net 实现购物车详细代码 (14312次浏览)
- C#版的网站新闻发布系统 (690次浏览)
- ASP.NET2.0轻松搞定统计图表 (651次浏览)
- 使用ASP.NET AJAX实现幻灯片效果 (604次浏览)
- ASP.NET如何存取 SQLServer数据库图片 (592次浏览)
- 如何制作Asp.Net界面模板 (582次浏览)
- ASP.NET中实现DataGrid数据排序 (580次浏览)
- VB.NET读写文本文件方法 (579次浏览)
- VC#初学入门:第一个Windows程序 (536次浏览)



