SOA 比 Web Services 涵义更广

Web Services 总结 Web Services 是一种面向服务的架构(SOA)的实现,它通过使用标准化的协议和接口,使得不同应用程序之间能够进行互操作。简单来说,Web Services 是一种在网络上提供服务的软件组件,它可以通过网络被其他应用程序访问和调用。Web Services 作为一种重要的网络服务架构,已经成为现代软件开发和互联网应用的重要组成部分。通过本文的总结,我们可以了解到Web Services 的定义、架构、关键技术以及应用场景等方面的内容。 阅读详情
标题:SOA 比 Web Services 涵义更广 浏览次数: 12 时间:2004-08-31
作者:Steve Wilkes

无论何时在街上问一个了解点技术的普通人有关面向服务的架构(SOA)的概念,首先反应到他的头脑中的东西将是Web Services。尽管SOA已经存在一段时间了,但是这并不令人惊奇,现在术语SOA的清晰度已经大大增强了,以前总是将它混淆为Web Services。

既然我们都处于相同的水平,我们将为本文专门定义SOA如下:

“SOA是一种设计和实现企业应用程序的方法,这些应用程序处理那些通过定义良好的、平台无关的接口约定来访问松散耦合的、粗粒度的(商业水平)、可重用部件(服务)的互通问题。”

很清楚的一点是该定义不包含用于调用服务的通信协议或者有线格式。不像其他基于方法的服务那样,真正的SOA鼓励通过不同的方法访问服务――而不只是HTTP之上的SOAP。

本文的目的是基于该点展开的。本文提供可选的服务调用模式并且解释为什么SOA要比Web Services涵义更广。

背景

基于服务的概念在Web Services之前就有很长并且成功的历史了。一般对象请求代理体系结构(Common Object Request Broker Architecture ,CORBA)已经存在了很多年并且提供了许多至今仍被吹捧的SOA优点。

根据我们的定义,很明显CORBA不是一个真正的SOA实现。尽管CORBA有一个通过IDL(接口定义语言)定义的平台无关的服务约定和一个支持不同语言和平台的实现,但是它需要一个名为IIOP(Internet Inter-ORB Protocol)的特定通信协议和标准化的有线格式。此外,编译IDL来产生存根(stub)和骨架(skeleton)的需求表明生成的应用程序是紧密耦合的。

如果我们将SOA的范围缩小为只是Web Services,我们将有一个相似的故事。WSDL代替了IDL,并且服务通过一个特定的(虽然成本较低但更流行)带有标准有线格式(SOAP)的协议(HTTP)来调用。使用现在的开发环境,可以从WSDL生成存根和骨架,但是产生的服务的耦合性比我们所希望的更紧密了。

当我们放宽这些限制并且使得服务可以通过不同的协议来调用的时候,真正SOA的威力就显示出来了。

协议的问题

问你自己这样的问题——“我的组织内部处理互通使用了多少种不同的协议?”根据公司规模的不同,你可能使用了HTTP、HTTPS、消息代理(JMS、MQ、MSMQ等)、CORBA和SMTP。你可能也意识到了,EJB的远程调用或者远程对象上一个方法的简单执行都将利用诸如JRMP这样的协议。

你将意识到的其他事情是,在很多情形下为一个特定的场合选择协议并不是基于真正的用例分析。看起来选择更像建立在当前的实现之上,选择的依据通常是现有的基础设施或者选择最快的和最容易的路线来集成。该问题的另一个方面是集成机制可能通过适配器、打包器或者委托机制使用现有的代码并且没有尝试去确定通信粒度的正确水平。

在一个真正的SOA中,上面提到的所有协议都可以为服务提供一个访问点。 从理论上讲,一个服务可以通过服务接口被定义一次,但可以利用不同访问协议有许多实现。从现在通常用来描述服务的语言WSDL来看,这一点最为明显。

WSDL-去掉W

尽管WSDL的名字是Web Services描述语言,它并没有描述Web Services。它有一个独立于通信协议或数据格式的核心服务定义框架。该核心框架描述了组成一个服务的操作和每次请求和响应中传送的数据。处于该层次之上的是绑定扩展,它将一个特定的协议或格式附加到一个消息、操作或者访问点上。

一般的理解认为WSDL描述了Web Services,而SOA是关于Web Services的,这种理解来自于扩展到SOAP、HTTP和MIME绑定的核心框架的混淆方式就包含在最初的WSDL规范中。

这些绑定作为例子包含在规范中是为了澄清它们的使用方法,但是正如规范中声明的:

“不排除在WSDL中使用其他绑定扩展。”

根据上面的说明,我们可以明白WSDL规范的作者原本想用它来从总体上来描述服务。包含的绑定通过将它和用于解决特定用例的现有技术耦合而使得规范增加了相关性。WSDL的完全形式鼓励将服务绑定到多个协议;关键是决定哪个协议最适合特定的场合。

最佳实践产生完美的产品

对于任何单个的服务都有很多调用服务的方法。假设服务已经绑定到很多协议,一个IT建筑师如何决定在一个特定用例中使用哪种方法呢?

下表总结了流行协议的属性和数据格式:

传输协议

同步性

数据格式

描述

HTTP

同步或异步

表单(Get / Post)、XML、SOAP

远程、无安全性、平台无关、组织内部或外部服务访问

HTTPS

同步或异步

表单(Get / Post)、XML、SOAP

远程、安全性、平台无关、组织内部或外部服务访问

JMS

异步

XML、SOAP、Java对象

在通信Java环境中点到点或者发布消息

SMTP

异步

基于上下文的、XML、SOAP

组织内部或外部远程消息传输

Proprietary Message Broker

异步

XML、SOAP专利

在专有环境中点到点或发布消息

CORBA

同步

CORBA对象

在潜在的异构环境中直接远程对象调用

Native Distributed Objects

同步

COM+、EJB /RMI、.NET远程

在本地环境中直接远程对象调用

Native Object

同步

本地数据类型

在本地环境中本地对象访问


应该搞清楚的是,对于分布式和本地对象技术,面向服务方法的应用程序不打算执行很多高粒度的方法调用。如果我们应用最佳的实践,需要假设这些对象包含了可以接收复杂数据结构的商业级别的方法。

通过举例的方法,想像一个管理购货订单的本地对象并使用企业资源达将它们永久保存。该对象可能有用于创建订单、添加一条项目、设置客户信息等的方法。在本地级别调用这些方法不会引起任何问题,但是如果我们使用远程或者异步协议,由很多远程调用引起的性能问题就很明显了。解决方案是提供一个单个方法接收一个包含整个订单全部数据结构的对象来添加一个订单。

该方法可以通过服务接口来描述,并且通过分层技术使得可以通过多种协议来访问。不用更改服务签名,要改的只是通信协议和数据有线格式。下图解释了如何实现分层。

既然这样一个服务可以通过很多协议来访问,决定哪一种协议与特定用例和技术集能最佳匹配就是服务客户的事情了。当考虑数据有线格式的时候,会引出了另外一个复杂问题。正如前面表中所示,每一种协议都支持多种格式的数据。上图中的暗示是根据需要在不同数据格式之间转换数据。为了讨论方便我们假设本地对象提供的方法接受通过所有层次传播的XML。

下表再次列出了这些协议并且解释了什么时候应该使用每种协议来访问由打包的本地对象提供的相同服务。

传输协议

推荐使用方法

HTTP

服务位于可能是在组织外部的远程机器上。提供服务的平台与客户平台不同。可能需要异步访问服务从而使得一个响应可以立刻分程传送到客户。在回调或者轮询结果时可能也需要异步操作。对服务的可靠访问不是问题。对安全性没有要求

HTTPS

除了需要一个安全验证连接之外,其他与HTTP相同

JMS

服务和客户都位于可以访问JMS提供者的Java平台上。不需要服务立即给出响应。服务请求发送确认可能是必要的。发送或接收消息可能是一个事务的一部分。诸如验证和授权等的安全性是可选的

SMTP

服务和客户都可以访问SMTP引擎,但是在直接通信中不是必要的或者是位于全异的平台上。不需要服务立即给出响应。不需要事务支持。确认传输也不是必须的。对安全性没有需求

Proprietary Message Broker

服务和客户都可以访问消息代理,但是可以在全异的平台上。不需要服务立即返回响应。服务请求传输确认可能是必要的。发送和接收消息可能是一个事务的一部分。安全性是可选的

CORBA

服务和客户都可以访问对象请求代理(ORB)并且可以通过IIOP进行通信。可以要求对服务同步访问从而使得响应可以立即分程传送给客户。服务请求可能是一个事务的一部分。安全性是可选的

Native Distributed Objects

尽管不需要位于相同的物理机器上,但服务和客户都位于同样的本地平台并且使用直接通信。可以要求对服务同步访问使得响应可以立即分程传送给客户。服务请求可能是一个事务的一部分。诸如验证和授权等的安全性是一个选项

Native Objects

服务和客户都位于相同的本地平台并且位于相同的物理机器上。可以要求对服务同步访问使得可以将响应立即分程传送给客户。不要求事务支持。对安全性没有要求


要为一个特定用例选择适当的协议,那么就需要考虑服务使用的上下文和总体系统的可靠性、性能和安全性需求。

SOA使得事情变得容易

提供多种方法调用相同服务的一个明显的副作用是在开发中提供必要的分层技术的开销。在本地对象上执行一个方法可能只需要一行代码。创建一个JMS并将它放在一个队列中或查找它并且缩小远程分布式对象需要多得多的工作。要在这样的环境中实现高生产率,所有的这些事情应该变得同样容易。实际上,调用服务应该使用相同的机制,和底层的实现应该是无关的。

在WebLogic平台中,控件正好起到了这样的作用。服务的创建者可以建立接受XML的Java控件并执行比如说创建一个购货订单的所有任务。这是由本地对象来实现的(在这种场景后面,Java控件可能使用了Java过程,它可能依次执行其他服务,但是这在另一篇文章中讨论)。

一个附加的步骤可以用该控件创建一个Java Web Services(JWS)(现在根据需要而支持HTTP或HTTPS)。也可以使用Java控件创建一个Java页面流,从而可以对服务直接进行Web访问(也是HTTP或者HTTPS格式)。如果需要远程对象访问,可以创建一个带有会话Bean(本地分布式对象)的EJB项目,通过一个过程代理将其委托给一个Java过程。另外,EJB控件提供界面来使得通过HTTP或者JMS提供现有的EJB。EJB编译选项允许通过CORBA可以访问EJB并让EJB生成IDL和Stub。

可以通过两种方式添加JMS支持。首先,JWS可以通过@jws:协议标记直接绑定到JMS,或者在WSDL中通过JMS绑定到基于服务的JAX-RPC。另外,可以创建一个Java过程来监听JMS队列并且在接收到消息的时候委托Java控件来处理消息中包含的XML。通过订购一个Email通道,可以使用类似的过程来提供SMTP支持。用同样的方法可以支持其他消息代理。

下表对这些内容做了一下总结:

传输协议

WebLogic 平台部件

HTTP

JWS、JAX-RPC Web Services或者页面流动作

HTTPS

JWS、JAX-RPC Web Services或者页面流动作

JMS

JWS或者JAX-RPC带有JMS绑定的Web Services、带有JMS订购的JPD

SMTP

带有Email订购的JPD

Proprietary Message Broker

带有消息代理订购的JPD

CORBA

EJB编译选项允许生成IDL和CORBA的存根

Native Distributed Objects

带有会话Bean的EJB项目

Native Object

Java控件(JCS)


服务的客户同样很容易使用服务。在Workshop中,可以使用各种内置的控件来轻松地访问Web Services、EJB、JMS队列、消息代理通道、Email或者CORBA实现。当然也可以直接使用自定义的Java控件。

结束语

面向服务的架构比Web Services涵义更广。一个单独的服务可以多种方式提供,从而使得可以通过多种协议进行访问。服务的客户应该选择最合适的协议从而满足特定用例、性能、安全性和可靠性的需求。BEA WebLogic平台为单个服务用多种协议包装提供了简化的构造方法,为服务的使用提供了很大的帮助。Web Services只是服务实现的一种形式,在很多情形下使用可选协议将提供更具伸缩性和健壮的解决方案。

 

 

http://dev2dev.bea.com.cn/techdoc/other/200408238.html

5、Java Web Services在SOA应用开发中的概述 本文详细探讨了Java Web Services(JWS)在面向服务架构(SOA)应用开发中的作用。通过一个假设的订单管理系统案例,介绍了SOA复合应用的业务流程及服务交互。同时,分析了JWS如何利用WSDL、SOAP等标准支持服务接口的定义和消息传递,并深入解析了服务器端部署与客户端调用的具体流程。JWS为SOA开发提供了从服务构建、部署到调用的完整解决方案,是构建分布式系统的重要技术。 阅读详情

相关推荐

2、Java Web Services与面向服务架构(SOA)的探索

本文深入探讨了Java Web Services(JWS)及其在面向服务架构(SOA)中的应用。文章详细介绍了JWS的核心技术标准,如JAX-WS、JAXB和SAAJ等,并分析了其优缺点以及学习曲线。同时,针对JWS在以WSDL为中心的开发方法中的不足,提出了应对策略,并推荐了学习资源和实践方法。通过案例和代码示例,帮助开发者掌握JWS的开发、部署与集成,最终构建强大的SOA应用。文章还展望了JWS的未来发展趋势,包括简化开发流程、增强安全性以及与新兴技术的融合。

124

SOA (面向服务的体系结构)

SOA (面向服务的体系结构) 面向服务的体系结构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。 中文名面向服务的体系结构外文名Service-Oriented

jsd2root的博客 5320

(25.08)Ubuntu20.04+ROS1复现FAST-LIO2

请确保在。

m0_69023437的博客 3992

SOA/软件架构设计—面向服务的架构(SOA详细解释)「建议收藏」

soa架构, 面向服务的架构

这里是菠萝味菠萝啤的博客 954

基于ESP32-S3与PCM5102的HiFi网络收音机复刻指南:从硬件设计到软件配置

本文提供了一份详细的基于ESP32-S3与PCM5102的HiFi网络收音机复刻指南。内容涵盖从核心硬件选型(如ESP32-S3主控与PCM5102 DAC芯片)、四路独立LDO供电设计,到软件环境配置、固件烧录及常见问题调试的全过程,旨在帮助创客打造一台支持网络电台、本地播放与蓝牙连接的高保真音频播放器。

weixin_30632267的博客 186

ZYNQ系列PS侧和PL侧DDR3或DDR4在AD(Altium Designer 25)中的layout布线规则约束

DDR3或DDR4的PCB布线规则通常有相对固定的要求,对应的,在PCB设计时有固定的约束设置。

FPGA艺术家的博客 786

SOA/软件架构设计---面向服务的架构(SOA详细解释)

文章比较多,但干货慢慢,请耐心阅读 面向服务的架构 迄今为止,对于面向服务的架构(Service-Oriented Architecture,SOA)还没有一个公认的定义。许多组织从不同的角度和不同的侧面对 SOA 进行了描述,较为典型的有以下三个: (1)W3C 的定义:SOA 是一种应用程序架构,在这种架构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口...

zhangxiaoxiao9527的博客 11万+

手把手教你玩转CPU微架构专栏--​​​​1.5 工具准备:用Gem5模拟器“看见”微架构(安装、基础仿真命令)​

本文介绍了如何使用Gem5模拟器进行微架构学习和实验。Gem5是一款支持多种指令集的开源微架构模拟器,可模拟CPU流水线、缓存等核心组件。文章详细说明了在Ubuntu和macOS上安装Gem5的步骤,包括依赖安装、源码编译和验证方法。通过一个简单的加法指令测试程序,演示了如何运行基础仿真并解读输出日志,包括指令执行流程和性能统计数据。此外,还提供了两个实战实验:修改L1缓存大小和观察分支预测失败,帮助读者理解微架构参数对性能的影响。最后指出Gem5是学习微架构的"显微镜",能直观观察指令

xiaoheshang_123的博客 140

SOA概念详解

SOA概念详解

caicongyang 1万+

手把手教你学Simulink--人形机器人控制场景实例:基于Simulink的多连杆人形机器人拉格朗日动力学建模仿真

matlab编辑% 连杆长度 (m)% 躯干(髋到CoM)% 大腿% 小腿% 质量 (kg)% 转动惯量(绕质心,简化为杆)matlab编辑% 躯干CoM(假设在髋上方L_body/2处)% 左大腿CoM% 左小腿CoM% (右腿类似,略)本文完成了基于Simulink的多连杆人形机器人拉格朗日动力学建模仿真,实现了:✅ 定义7-DOF平面人形结构✅ 使用Symbolic Math Toolbox自动推导动力学方程✅ 生成。

MHD0815的博客 145

我的世界模组开发——前言

避坑:在开发过程中一定不要过分依赖AI,虽说现在的人工智能很厉害,但是也有很大的弊端,很多AI生成的代码错误百出,还得自己修改,而且像deepseek这种AI的训练数据还停留在一年前,给出的maven仓库地址都是过时的甚至是错误的,开发模组就是要多学习,多看源码,这样开发模组的水平才能越来越高。总而言之,build.gradle文件在我的世界Forge模组开发中扮演了重要的角色,它定义了项目的构建过程、依赖关系和编译选项,为开发者提供了灵活而强大的构建工具。开发工具推荐使用idea,因为可以使用通灵义码。

qq_24992377的博客 2594

SOA演进到微服务

引言:“微服务”是当前软件架构领域非常热门的词汇,能找到很多关于微服务的定义、准则,以及如何从微服务中获益的文章,在企业的实践中去应用“微服务”的资源却很少。本篇文章中,会介绍微服务架构(Microservices Architecture)的基础概念,以及如何在实践中具体应用。 单体架构(Monolithic Architecture ) 企业级的应用一般都会面临各种各样的业务需

cws1214的专栏 2810

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

使用Java Web Services来实现SOA(一)

一、使用Java Web Services实现SOA 现代企业Java应用需要支持SOA原则。大多数SOA应用程序的基础是Web Services。如果你是一名企业级Java开发人员。有可能想掌握包含在J2EE5和J2EE中的Web Services标准。这些标准包括:JAX-WS(其前身是JAX-RPC)[JSR224],JAXB[JSR222],Web Services元数据(WS-Met

fanfan6621的专栏 1686

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

060909 今天初步接触SOA and Web services

 面向服务的体系结构的需求根据上面讨论的问题,可以很明显地看出,应该开发一种体系结构来满足所有的需求,这些需求包括: 首要的一点就是利用现有的资产。现有系统很少可以抛弃,它们通常都包含对于企业很有价值的东西。从战略上讲,目标是构造一个新的体系结构来创造所有想要的价值,但是,从战术上讲,必须集成现有系统,以便随着时间的推移,可以在可管理、渐进式项目中分化或取代它们。

king_jackey的专栏 1854

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

the understand of SOA and Web Services

what is the concept of the SOA and Web Services? the SOA is the abbreviation of the Service oriented aspect , it is the software design principle and architectural pattern  for implementing reusable ,

use Foriegn Language to record life 1010

使用 IBM Integrated Web Services Server for i 在 IBM i 上实现 SOA

IBM iIBM i 是 IBM 最新发布的 i5/OS 的新名称,原有的 System i,i5/OS 等名称都统一更名为 IBM i。IBM i 在很多行业都有着广泛的应用,为客户提供可靠、高度安全的方法来简化 IT 管理并降低成本。回页首IBM i SOA 解决方案 用户在 IBM i 上的原有的大部分应用都是由 ILE

IBM技术期刊 678

基于soap 的 python web services 服务开发指南

序言 web services 已经不再流行,但是,由于这一章的在接 口技术中有着非常重要的地位。 其实 Web Serive 是一项不太容易讲清楚技术。我花很多的时间来查阅相关的资料,由于涉及的概念很过 多,不同资料的解释也有一些出入。我想我的理解也并非全面。不过,我仍然想试图通过自己的理解,用简 单的描述将它讲明白。 相关概念 SOA Service Oriented Ambiguity 中文...

shiter编写程序的艺术 2907

Web services与SOA

Web services: Web 是使应用程序可以以与平台和编程语言无关的方式进行相互通信的一项技术。Web 服务是一个软件接口,它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作。它使用基于 XML 语言的协议来描述要执行的操作或者要与另一个 Web 服务交换的数据。一组以这种方式交互的 Web 服务在面向服务的体系结构(Service-Oriented Architect

morning99的专栏 831

SOA与Web Services之间的关系是怎样的?

   Gartner:Web Services并不一定要转向SOA,也并非所有的SOA都要基于Web Services,这两种技术方向之间的关系是非常重要的,并且它们是相互影响的。Web Services将使SOA能够为大型机用户所用;与此同时,SOA的最佳实践架构将有助于使Web Services获得成功。  SOA不是一定需要 Web Services来实现,并且一个基于Web Service

血色残阳的专栏 2288

SOA and Web services简介

 什么是面向服务的体系结构(SOA)?   面向服务的体系结构(service-oriented architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。这种具

roger007的专栏 1729

Web Services

先给出一个概念 SOA ,即Service Oriented Architecture ,中文一般理解为面向服务的架构 既然说是一种架构的话,所以一般认为 SOA 是包含了运行环境,编程模型, 架构风格和相关方法论等在内的一整套新的分布式软件系统构造方法和环境, 涵盖服务的整个生命周期。而在 SOA 的架构风格中,服务是最核心的抽象手段。 SOA 中的服务是构建在一些列基于开放标准的基础之上的,...

Fengnoi的博客 725

一本非常棒的SOA图书[即将出版]:Understanding SOA with Web Services

Understanding SOA with Web Servicesby Eric Newcomer, Greg LomowAddison-Wesley的Understanding系列图书之一,属于Independent Technology Guides丛书(David Chappell是该丛书的编辑,他同时也是《Understanding .NET(.NET大局观)》的作者)。该

方舟 K ][ N G of A R K 1465

SOA与Web Services之间的关系

Gartner:Web Services并不一定要转向SOA,也并非所有的SOA都要基于Web Services,这两种技术方向之间的关系是非常重要的,并且它们是相互影响的。Web Services将使SOA能够为大型机用户所用;与此同时,SOA的最佳实践架构将有助于使Web Services获得成功。  SOA不是一定需要 Web Services来实现,并且一个基于Web Services开发

Night_Elf的专栏 1122
上一篇: 测试J2EE Web Services
下一篇: JSP学习心得
fraternity_java
博客等级 码龄22年 1粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值