论坛首页 Java企业应用论坛

SOA是旧瓶装新酒吗?

浏览 31759 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-09-16  
如果一个人认为一种技术(体系)是好的,而他不能用三言而语,或至少是十言八语大致解释一下这种技术的好处,那我觉得他实际上是根本说不出来
0 请登录后投票
   发表时间:2004-09-16  
前面我没有对SOA发表自己的看法,因为自己根本没接触过。但是对这些东西(什么MDA、SOA),我就有一个先入为主的观点,如果说不出什么真正有用的新鲜的东西,我就认为这是垃圾,是骗钱的东东,我连完完整整读几篇文章的兴趣读没有。

这里既然有人号称SOA是非常有价值的,那么可能我对SOA的看法是不对的,但我希望有人和我解释一下,而不是叫我去看这个看那个,恐怕这样的文章我看了几行就要睡着了,而不是象gigix能够看几十分钟。
0 请登录后投票
   发表时间:2004-09-16  
引用
下面摘抄自董洵8月2日发表在计算机世界上的文章:

拨开SOA的面纱
内容简介
SOA是英文Service-Oriented Architecture,即服务导向架构的缩写。这个词汇最近一两年频频出现在各种技术期刊上。但是一直以来对于SOA到底是什么一直没有明确的回答;SOA有什么特点?适合用于解决哪些问题?与其他的技术有什么区别与联系?Web Service和SOA又是什么关系?SOA的出现对于软件架构设计有什么影响?本文将就上面提到的这些问题,尝试根据作者自己的理解给出SOA的定义;总结出SOA特有的三个基本特征;然后以HTTP协议为例对这些特征进行解释;最后简要的说明SOA对今后软件架构设计可能带来的影响。

SOA定义
下面是作者给SOA下的一个定义:SOA是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。从这个定义中我希望表达的前提有下面两点:

1)软件系统架构: SOA不是一种语言,也不是一种具体的技术而是一种软件系统架构,它尝试给出在特定环境下推荐采用的一种架构,从这个角度上来说,它更像一种模式(Pattern)。因此它与很多已有的软件技术比如面向对象技术,是互补的而非互斥的。它们分别面向不同的应用场景,用来满足不同的特定需求。

2)SOA的使用范围:需求决定同时也限制功能。SOA并不是包治百病的万灵单,它最主要的应用场合在于解决在Internet环境下的不同商业应用之间的业务集成问题。在下面我们会详细讨论Internet的各种特点是如何决定了SOA的特点,这里我们只需要先简单回顾一下Internet环境区别于Intranet环境的几个特点:a)大量异构系统并存,计算机硬件工作方式不同,操作系统不同、编程语言也不同;b)大量、频繁的数据传输仍然速度缓慢并且不稳定;c)版本升级无法完成,我们根本就无法知道互联网上有哪些机器直接或者间接的使用某个服务。


基于上面的前提,下面就让我们一起看一下SOA的基本特征。

SOA三大基本特征
独立的功能实体
在Internet这样松散的使用环境中,任何访问请求都有可能出错,因此任何企图通过Internet进行控制的结构都会面临严重的稳定性问题。SOA非常强调架构中提供服务的功能实体的完全独立自主的能力。传统的组件技术,如.NET Remoting, EJB,COM或者CORBA,都需要有一个宿主(Host或者Server)来存放和管理这些功能实体;当这些宿主运行结束时这些组件的寿命也随之结束。这样当宿主本身或者其它功能部分出现问题的时候,在该宿主上运行的其它应用服务就会受到影响。

SOA架构中非常强调实体自我管理和恢复能力。常见的用来进行自我恢复的技术,比如事务处理(Transaction),消息队列(Message Queue),冗余部署(Redundant Deployment)和集群系统(Cluster)在SOA中都起到至关重要的作用。

大数据量低频率访问
对于.NET Remoting,EJB或者XML-RPC这些传统的分布式计算模型而言,他们的服务提供都是通过函数调用的方式进行的,一个功能的完成往往需要通过客户端和服务器来回很多次函数调用才能完成。在Intranet的环境下,这些调用给系统的响应速度和稳定性带来的影响都可以忽略不计,但是在Internet环境下这些因素往往是决定整个系统是否能正常工作的一个关键决定因素。因此SOA系统推荐采用大数据量的方式一次性进行信息交换。

基于文本的消息传递
由于Internet中大量异构系统的存在决定了SOA系统必须采用基于文本而非二进制的消息传递方式。在COM、CORBA这些传统的组件模型中,从服务器端传往客户端的是一个二进制编码的对象,在客户端通过调用这个对象的方法来完成某些功能;但是在Internet环境下,不同语言,不同平台对数据、甚至是一些基本数据类型定义不同,给不同的服务之间传递对象带来的很大困难。由于基于文本的消息本身是不包含任何处理逻辑和数据类型的,因此服务间只传递文本,对数据的处理依赖于接收端的方式可以帮忙绕过兼容性这个的大泥坑。

此外,对于一个服务来说,Internet与局域网最大的一个区别就是在Internet上的版本管理极其困难,传统软件采用的升级方式在这种松散的分布式环境中几乎无法进行。采用基于文本的消息传递方式,数据处理端可以只选择性的处理自己理解的那部分数据,而忽略其它的数据,从而得到的非常理想的兼容性。

HTTP协议:一个典型的SOA实现
每一项新技术都是在一些旧的技术基础上发展出来的。正如XML根本思想来自于在60年代就已经出现的早期标记性语言一样,SOA虽然这两年才出现,但是它所表达的观念应该说在网络这种分布式系统结构出现不久就已经广泛应用了。例如我们最熟悉的HTTP协议就是一个非常典型的SOA架构设计。HTTP协议的工作过程简单叙述如下:

1)客户端,通常是通过浏览器,向服务器端以文本的方式发送一个请求,索取一个Web页面;

2)服务器端接收到这个请求之后,根据请求的内容进行处理并且返回一个符合HTML语法的文本;

3)客户端接收到服务器端的响应文本后调用本地的程序,通常还是浏览器,把返回的HTML文本的内容展现出来。

下面来看一下HTTP协议如何满足了SOA的特点:

独立的功能实体:作为服务器端的Web服务器是绝对不会因为客户端的状况变化而改变的,它总是非常稳定的按照自己的内在逻辑运行,响应外部的请求,管理自己的资源和数据。这里一个非常好的例子就是Web服务器对缓存(Cache)的处理,很多Web服务器为了提高性能都或多或少的对数据进行缓存,但是缓存数据、刷新数据这些于客户端完全无关的操作完全由服务器端独立完成,完全不受客户端的影响。
大数据量低频率访问:对于一个HTTP请求来说,客户端与服务器之间访问的边界非常简单:就是一个请求,一个响应,没有任何其它的信息往返。无论客户端申请的网页上除了文字之外还有什么信息,对于客户端来说,它发出的请求只是简单的告诉Web服务器它所需要的网页的位置;至于为了生成这个网页,服务器端是否需要访问数据库,执行Servlet或者其它的CGI程序对客户端而言,都是完全透明的。
基于文本的消息传递:迄今为止兼容性最好的系统可能就是HTTP协议支撑的大部分的web应用了,我们可以在Windows平台下用IE查看互联网上一个Linux+Apache服务器上的由Perl脚本自动生成的网页。这里的关键就是所有内容都是以格式化的文本方式传递的,不管Perl脚本如何执行,只要它的输出是符合HTML规范的网页,就可以被客户端的浏览器解释。而由于不同的操作系统上对于相同的HTML的解释遵循相同的规范,因此不同操作系统下仍然能够看到一致的用户界面。
我们上面基本描述了SOA作为一种软件架构有哪些特点,下面让我们一起看看Web Service与SOA的关系。

SOA于Web Service
Web Service是就现在而言最适合实现SOA的一些技术的集合,事实上最近SOA的火爆在很大程度上归功于Web Service标准的成熟和应用的普及为广泛的实现SOA架构提供了基础。下面让我们看看Web Service中的各种协议是如何互相工作来满足SOA所需的特点的:

独立的功能实体:通过UDDI的目录查找,我们可以动态改变一个服务的提供方而无需影响客户端的应用程序配置。所有的访问都通过SOAP访问进行,只要WSDL接口封装良好,外界客户端是根本没有办法直接访问服务器端的数据的。
大数据量低频率访问:通过使用WSDL和基于文本(Literal)的SOAP请求,我们可以实现能一次性接收大量数据的接口。这里需要着重指出的是SOAP请求分文本方式和远程调用(RPC)两种方式,正如上文已经提到的,采用远程调用方式的SOAP请求并不符合这点要求。但是令人遗憾的是现有的大多数SOAP请求采用的仍然是远程调用(RPC)方式,在某些平台上,例如IBM WebSphere的早期版本,甚至没有提供文本方式的SOAP支持。
基于文本的消息传递:Web Service所有的通讯是通过SOAP进行的,而SOAP是基于XML的,不同版本之间可以使用不同的DTD或者XML Schema加以辨别和区分。因此只需要我们为不同的版本提供不同的处理就可以轻松实现版本控制的目标。
SOA对于软件架构设计的影响
无论您现在的系统是否牵涉到基于Internet的业务集成,采用SOA推荐的架构都对提高您系统的扩展性有很大帮助,下面是在系统中引入SOA后需要在软件架构方面做出的改变:

使用基于文本方式的SOAP调用,摆脱远程调用中出现的函数参数类型等与数据无关的信息,保证所有SOAP传递的都是有意义的商业数据。依赖于Schema,而不是类定义对这些数据进行解释。
传统的三层Web应用将可能变成四层结构:传统意义上的商业逻辑层将被进一步划分为存放每个会话(Session)信息的客户逻辑层和与状态无关Sateless的SOA层。
总结
本文根据作者自己对SOA的理解给出了SOA的定义,总结了SOA的三点特征并且简要的从程序员的角度指出SOA的出现对于软件架构设计的影响,希望本文能帮助您对SOA有较为深入的理解。


我的理解就是SOA是一种架构模式,WebService是它的技术基础之一,可能大家也做过类似的基于WebService的应用,但是你不知道几个大厂商管这叫SOA,那么现在大家就知道了,出去同客户侃的时候,知道自己这套架构的新的学名叫SOA了。其实跟设计模式差不多,很多人都用过单例模式,但是没看过设计模式之前,你不知道各个大牛小牛们管这叫单例模式。
0 请登录后投票
   发表时间:2004-09-16  
拆分theone的一个回帖在这里:
引用


firebody:

引用:
SOA仅仅提供了一层包装

SOA是architecture,而Web Services是technology。你的比喻太离谱了!

引用:
SOA就像一个鸡蛋壳,WEB Serice就象蛋黄。我们要吃蛋黄,不要弹壳


窃笑...

ozzzzzz:

拜托您老以后发贴能不能注意一下修辞,少用点长句,多用点短句。你那些句子长的可怕,而且又挤在一陀,看得我头大。

你是不是IBM里面出来的,怎么把人家揣摩的那么清楚?


我没有人身抨击的意思,只是想从SOA的拥护者观点中找出SOA与众不同的地方。

theone提到了很有意思的(确实也很有讨论意义)一句话:
SOA是architecture,而Web Services是technology。

对于这句话,或许我该把potian ,o6Z,gigix等勾引来这里,继续讨论一下。
0 请登录后投票
   发表时间:2004-09-16  
我们都知道SOA是architecture,不然就更没法说了。我的意思就是,即便作为architecture,我也没看到多少有价值的东西,倒像是一大堆我们老早知道的东西攒巴攒巴再改个名——从这个意义上来说,“新瓶装老酒”挺恰当。比如说,敏捷、模块化、五视图、平台无关性架构,等等。所以我说它——至少目前对我而言——的价值就在白皮书上,以前我写明白这堆东西得花点功夫,现在我就写上一句“本产品采用SOA架构”,具体怎么着你自己揣摩吧,既省时间又有面子。
0 请登录后投票
   发表时间:2004-09-16  
firebody
对于SOA是architecture,而Web Services是technology,我已经在我的那个帖子中回到过这个疑问了.
同时如果今天有时间和精力,我会分析一下一个公用的Architecture(如同现在的SOA/MDA/J2EE/.NET)和一个私有的Architecture应该有什么不同.不过昨天我太累了.
0 请登录后投票
   发表时间:2004-09-16  
引用

SOA于Web Service
Web Service是就现在而言最适合实现SOA的一些技术的集合,事实上最近SOA的火爆在很大程度上归功于Web Service标准的成熟和应用的普及为广泛的实现SOA架构提供了基础。下面让我们看看Web Service中的各种协议是如何互相工作来满足SOA所需的特点的:

独立的功能实体:通过UDDI的目录查找,我们可以动态改变一个服务的提供方而无需影响客户端的应用程序配置。所有的访问都通过SOAP访问进行,只要WSDL接口封装良好,外界客户端是根本没有办法直接访问服务器端的数据的。
大数据量低频率访问:通过使用WSDL和基于文本(Literal)的SOAP请求,我们可以实现能一次性接收大量数据的接口。这里需要着重指出的是SOAP请求分文本方式和远程调用(RPC)两种方式,正如上文已经提到的,采用远程调用方式的SOAP请求并不符合这点要求。但是令人遗憾的是现有的大多数SOAP请求采用的仍然是远程调用(RPC)方式,在某些平台上,例如IBM WebSphere的早期版本,甚至没有提供文本方式的SOAP支持。
基于文本的消息传递:Web Service所有的通讯是通过SOAP进行的,而SOAP是基于XML的,不同版本之间可以使用不同的DTD或者XML Schema加以辨别和区分。因此只需要我们为不同的版本提供不同的处理就可以轻松实现版本控制的目标。


SOA的三个基本特征:
1.独立的功能实体
2.大数据量低频率访问
3.基于文本的消息传递

1、2、3都是Web Service完全具备的,其中2中间提到的有关RPC调用和文本调用,是一个仅仅需要改良的实现方式。
SOA所承诺达到的目标很多实际就是Web Service推出时所承诺的。
0 请登录后投票
   发表时间:2004-09-16  
呵呵,不好意思,让potian都感到迷惑的。
我前面所说的基础不是基于这几篇文章,或者说,这几天文章虽然也讲到了SOA,所涉及的地方也没有什么错误,但他们的主题是在宣传自己的产品,而不是帮助开发人员解决问题。实际上我也是第一次大量看到这样的文章,但开始接触到SOA时,我和大家的想法差不多,这都是厂商的作的恶:)

实际上SOA本身的长处是在动态松耦合上,这是和传统组件架构相比较的,比如COM。但如果仅提这样一个概念是不能解决什么实际问题的,Web Service没有流行起来,这是显而易见的。其实更加完整的例子是Sun在99提出了JES,就是后来的OSGi标准(据说这个标准是现在Sun中国研究所的所长宫力提出的,题外话)。
所以后来有人提出了将SOA这种长处和组件结合起来,结合组件结构化的特点,用于开发灵活的系统架构。这方面eclipse是个比较好的实现例子,虽然eclipse的扩展架构不是自SOA始,但它已经覆盖了今天SOA自身所谓的许多内涵。早期eclipse唯一缺乏的就是“动态”能力。所以在eclipse 3中引入了OSGi的底层框架,扩展了这方面的能力。但是一般的人是感觉不到的,因为plugin自身结构没有变化,而只是由框架统一提供了到OSGi的适配器(这方面也可以看出IBM/OTI的功力深厚)。
从这个例子中,我们可以看出SOA的范畴可以收缩的很好,服务的概念被接口所具体化,而框架本身就是SOA的一个具体实现。换个角度,SOA也可以扩展的很大,就是所谓企业软总线的概念(仅仅是概念,恕我见识短浅,还举不出完整的例子)
IoC也可以看作是和SOA有所重叠的地方。实际上Howard(Tapestry的作者)在提出HiveMind时就明确的表明这是一个SOA架构,虽然很多人认为就是IoC容器的另一个实现,当然也有人把OSGi当成一个半吊子的IoC容器。另外,Apache avalon被认为是一个典型的SOA架构实现,看看IoC和SOA下面会怎么样吧?

以上,是我断断续续了解到的目前SOA的真实情况,我也说明这并不一定是什么新发现,但如果这种架构的着重倡议相信会给大家一些提示的。
0 请登录后投票
   发表时间:2004-09-16  
谈谈我的理解

首先,SOA要解决什么问题?应该是应用集成的问题。
比如,最早有一个HRM系统,后来公司又上了一个OA系统。客户提出一个需求,在HRM中增加一个员工后,自动在OA系统添加他的帐号。

在没有HRM源码的情况下,有三种方案可以使用

1、轮询HRM数据库。发现新增记录就在OA中增加
2、在HRM的Employee表中增加个Trigger
3、当然,HRM如果提供此类功能的接口就最好了.但很多时候这是个奢望

而SOA呢,好像有点像以前MS提出的Windows DNA架构.每个功能都做成一个可替换的component,通过web service调用.这样的话,再进行集成就方便多了

但SOA这种方案另一个问题就是划分粒度,太大了集成时可能会有问题;而太小了,效率又会成问题.trade-off
0 请登录后投票
   发表时间:2004-09-16  
关于SOA或Web service的区别,  只是针对不同人来说.

好象我以前提到AOP和attribute, 有的人说, AOP是概念, attribute是技术, 不能混为一谈, 不过如果你想在不影响原有class hiberarchy的条件下, 用横切的方法去影响class或method的行为, 当你对.net程序员提这个要求, 他们想到的是attribute, 如果你对java程序员说, 他们肯定会说AOP, 所以无论是概念还是技术, 只要他们干的是有相同之处, 我们就不用去太在乎他的名字. 只专著他们的功能好了.

SOA和Web service也是一样,
Web service是最早以技术方式提出的, 主要是解决异构系统的互连和分布式计算, 他是依赖于http和soap协议的, 性能不很好, 所以一些大vendor提出了SOA的概念, 我们可以从新的ws-spec中发现, 虽然spec的名字还叫ws-*, 但他的内容主要都是为了独立于http transport协议的, 目的是为了从web 环境里独立出来, 比如ws-addessing, 就是为了脱离http, 还有ws-security是为了不用ssl, 目前MS和IBM正在开发一种新技术indigo来替换web service, indigo主要是解决web service的效率问题, 和运行环境问题, 我的推测是SOA是一种商业宣传的策略, 为了让人淡化web service, 这样一来当indigo推出, 当ms和ibm面对很多人指责技术的更新换代速度时, 他们可以说, indigo也是SOA, 不是新东西. 只是底层协议变了.

我这样认为, 无论是分布还是单机环境, 无论是系统内还是系统之间, 只要是基于一种meta data contract接口, 用remote调用的方式去实现系统的功能, 就叫SOA.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics