SOA特征简介与Web扩展服务的前景展望

web

什么是面向服务的体系结构(SOA)?

  面向服务的体系结构(SOA)表示您可以如何使用 Web 服务的大图景。Web 服务规范定义了实现服务以及与它们的交互所需要的细节。然而,面向服务的体系结构(SOA)是一种用于构建分布式系统的方法,采用 SOA 这种方法构建的分布式应用程序可以将功能作为服务交付给终端用户,也可以构建其他的服务。面向服务的体系结构(SOA)可以基于 Web 服务,但是它可能改为使用其他的技术来代替。在使用面向服务的体系结构(SOA)设计分布式应用程序时,您可以将 Web 服务的使用从简单的客户端-服务器模型扩展成任意复杂的系统。

  因而,单个的软件资产成为开发其他应用程序的基本构件。您可以通过与新的代码和遗留代码一起使用的共同交互方式来减少系统的复杂性(CBDi 的 Lawrence Wilkes 开玩笑说,面向服务的体系结构(SOA)可以代表“节省我们的资产(Save Our Assets)”)。有一种标准的方法可以用于表示这些软件资产和与它们交互;现在人们关注的重点已经转移到基于这些构件的应用程序装配上来了。

  虽然在这里讨论的是用于业务应用程序的面向服务的体系结构(SOA),但是面向服务的体系结构(SOA)同样也可以用于其他的分布式系统,比如网格计算和高级 Web 服务规范(例如,Web 服务分布式管理(WS-DistributedManagement)、Web 服务信任(WS-Trust)以及 UDDI)。

什么是服务?

  在面向服务的体系结构(SOA)中,服务(service)是封装成用于业务流程的可重用组件的应用程序函数。它提供信息或简化业务数据从一个有效的、一致的状态向另一个状态的转变。用于实现特定服务的流程并不重要,只要它响应您的命令并为您的请求提供高质量的服务就可以了。

  通过定义的通信协议,可以调用服务来强调互操作性和位置透明性。一个服务表现为一个软件组件,因为从服务请求者的角度来看,它看起来就像是一个自包含的函数。然而,实际上,服务的实现可能包括在一个企业内部的不同计算机上或者许多业务合作伙伴拥有的计算机上执行的很多步骤。就封装的软件而言,服务可能是一个组件,也可能不是一个组件。如同类对象,请求者应用程序能够将服务看作是一个整体。

  Web 服务是以使用 SOAP 消息(它是用像 HTTP 这样的标准协议上的 WSDL 来描述的)的调用为基础的。使用 Web 服务的最佳实践就是与外部的业务伙伴通信。

松耦合

  服务请求者到服务提供者的绑定与服务之间应该是松耦合的。这就意味着,服务请求者不知道提供者实现的技术细节,比如程序设计语言、部署平台,等等。服务请求者往往通过消息调用操作——请求消息和响应——而不是通过使用 API 和文件格式。

  这个松耦合使会话一端的软件可以在不影响另一端的情况下发生改变,前提是消息模式保持不变。在一个极端的情况下,服务提供者可以将以前基于遗留代码(例如,COBOL)的实现完全用基于 Java 语言的新代码取代,同时又不对服务请求者造成任何影响。这种情况是真实的,只要新代码支持相同的消息模式。

明确定义的接口

  服务交互必须是明确定义的。Web 服务描述语言(Web services Description Language,WSDL)是受到广泛支持的方法,用于描述服务请求者所要求的绑定到服务提供者的细节。服务描述的重点在于与下面几部分交互所用的操作:

  服务
调用操作的消息
构造这种消息的细节
关于向何处发送用于构造这种消息的处理细节的消息的信息
WSDL 不包括服务实现的任何技术细节。服务请求者不知道也不关心服务究竟是由 Java 代码、C#、COBOL,还是由某种其他的程序设计语言编写的。它可以描述使用 HTTP 的 SOAP 调用。由于它的扩展机制,它也可以定义其他类型的交互,比如通过 JMS 提交的 XML 内容、直接方法调用、由管理遗留代码的适配器处理的调用(CICS),等等。

  WSDL 的通用定义允许开发工具创建各种各样类型的交互的通过接口,同时隐藏它是如何由应用程序代码调用服务的细节。例如,如果服务是以多种交互类型公开的,Web 服务调用框架(Web Services Invocation Framework,WSIF)通过允许运行时决定调用高质量服务的最优方法来使用这种能力。

无状态的服务设计

  服务应该是独立的、自包含的请求,在实现时它不需要从一个请求到另一个请求的信息或状态。服务不应该依赖于其他服务的上下文和状态。当需要依赖时,它们最好定义成通用业务流程、函数和数据模型,而不是实现构件(比如会话密钥)。当然,请求者应用程序需要服务调用之间的持久状态,但是这不应该与服务提供者分开。

  这里有一个定义会话的错误方法的示例:
Requester: “What is Bruce’s checking account balance?"
Provider: “$x"
Requester: “And what is his credit limit?"
Provider: “$y"

  提供者被要求记住请求之间 Bruce 的帐号,这就在服务实现中引入了复杂性。无状态的服务设计将重新定义会话,如下所示:
Requester: “What is Bruce’s checking account balance?"
Provider: “$x"
Requester: “What is Bruce’s credit limit?"
Provider: “$y"

服务粒度

  操作的粒度是一项重要的设计要点。对于外部的消耗推荐使用粗粒度的接口,而细粒度的接口可能用于企业内部。粗粒度接口可能是特定服务的完整处理,例如 SubmitPurchaseOrder,在这里消息包括定义订购单所需的所有业务信息。细粒度接口可能具有用于以下方法的不同操作:CreateNewPurchaseOrder、SetShippingAddress、AddItem,等等。

  虽然细粒度的接口为请求者应用程序提供了更多的灵活性,它同样也意味着交互的模式可能随着不同的服务请求者而不同。这可能使对于服务提供者的支持更加困难。粗粒度接口保证服务请求者将以一致的方式使用服务。面向服务的体系结构(SOA)不要求使用粗粒度接口,但是推荐使用它们作为外部集成的最佳实践。服务编排可以用来创建运行由细粒度操作组成的业务流程的粗粒度接口。

  服务质量需要考虑的问题

  面向服务的体系结构(SOA)设计将跨越计算机系统,并且还可能跨越企业边界。您不得不考虑在使用 Internet 时安全性功能和需求以及如何链接伙伴的安全域。Internet 协议并不是为可靠性(有保证的提交和提交的顺序)而设计,但是您不得不确保消息被提交并被处理一次。当这不可能时,请求者必须知道请求并没有被处理。

  例如,您可能需要考虑您所部署服务的度量、可靠性以及响应时间,以便确保它们在承诺的范围之内。当您设计使用来自其他业务伙伴的服务的系统时,您就不得不考虑面向服务的管理来以协作方式管理伙伴之间的服务。

时间: 2024-09-12 22:02:45

SOA特征简介与Web扩展服务的前景展望的相关文章

启用和自定义 ASP.NET Web API 服务的安全性

对于最常见的场景 - Web 页面中的 JavaScript 访问同一站点上的 Web API 服务,讨论 ASP.NET Web API 的安全性几乎是多余的.如果对用户执行身份验证和授权对 Web 窗体/视图(包含使用服务的 JavaScript)的访问均已设置,则服务可能已具备其所需的所有安全性了.这要归因于 ASP.NET,它会将其用 于验证页面请求的 Cookie 和身份验证信息作为对服务方法的任意客户端 JavaScript 请求的一部分进行发送 .但有一个非常重要的例外: ASP.

Windows Azure为石油和天然气产业客户提供基于web的服务云计算

Fielding系统为大大小小的中上游石油和天然气公司提供两种强大的基于web的服务,帮助运营商精简生产活动和增加外勤业务管理.远程监控和生产分析.每个应用程序都包括一个全功能的移动版本,允许所有客户访问他们的数据并从任何现代智能手机上进行操作,包括iPhone.Android 和 Windows Phone. FieldVisor 是一个领域自动化和数据采集应用程序,可以用于跟踪在石油和天然气生产操作中的任何动向.用户可以跟踪生产.装备.服务.处理历史.任务和许多其他方面的生产操作.Field

赛门铁克推出针对僵尸网络Web监视服务

3月25日消息,据国外媒体报道,赛门铁克推出一项Web监视服务,旨在发现一个机构内部与僵尸网络有关的恶意活动的证据.这项服务连续不断地查看向外部发送的HTTP通讯以便发现在被感染的计算机中的木马程序设法给其犯罪的控制者"往家里打电话"的可疑迹象. 据赛门铁克全球管理的安全服务部门副总总裁Grant Geyer说,这项24小时的监视服务是赛门铁克目前的安全服务产品组合的一个扩展. 这个Web监视服务使用许多方法识别在一个机构网络内部与僵尸网络有关的通讯,包括捕捉来自安全Web网关(包括来

用Web Services服务实现文件上传

services|web|上传 建立一个Web Services服务,public string UploadFile(byte[] fs,string FileName) { try { ///定义并实例化一个内存流,以存放提交上来的字节数组. MemoryStream m = new MemoryStream(fs); ///定义实际文件对象,保存上载的文件. FileStream f = new FileStream(Server.MapPath("") + "\\&q

在Domino应用程序中集成Google的Web API服务

面对 Google 当前和不断扩充的 30 多亿个 Web 页面的索引,它之所以会成为在Internet 上执行工业强度的搜索的最佳工具之一就不难理解了.除了其 Web 页面的数量之外,搜索结果的质量之高也归功于其专有的搜索算法,该算法建立在相关性和流行性的基础上.最近的报告表明,Google 每天以 88 种不同的语言响应 2 亿个搜索请求(平均每秒响应 2,300 个请求!).而根据 SearchEngineWatch.com 的调查,Google 处理了基于 Web 的所有查询中的百分之七

提供服务的进程在与 World Wide Web Publishing 服务通信时遇到致命错误

  事件类型: 警告 事件来源: W3SVC 事件种类: 无 事件 ID: 1011 日期: 2007-7-2 事件: 15:30:31 用户: N/A 计算机: WWW 描述: 为应用程序池 'AppPool-BBS' 提供服务的进程在与 World Wide Web Publishing 服务通信时遇到致命错误.进程 ID 为 '2052'.数据字段包含错误号. 数据: 0000: 6d 00 07 80 m.. 经查证: 原因为同事删除了user用户组对system32目录的访问权限,更正

Oray如何增加80端口WEB穿透服务流量

请使用护照密码登录http://www.oray.com依次打开[我的控制台]里面的[产品管理]进入[WEB端口穿透]管理页面选中已开通的任务名称[test],然后点击[续费/升级]按钮 接下来会出现[WEB端口穿透升级/续费]界面,然后将鼠标移到[流量增加]选中需要增加的流量后,点击[下一步] 系统扣费成功后即有[续费操作成功]提示 重新进入[WEB穿透服务]管理页面可以看到我们服务流量已经增加多100M了.

ubuntu下安装 gSOAP 用于C/C++开发web service服务端与客户端

昨天在ubuntu下进行安装gSOAP,费了很多时间,没成功,今天又来找了大量教程资料,终于一次成功,这里写下自己的安装步骤和方法,供大家参考. 首先下载gsoap,我下载的是gsoap-2.8.1.zip 用unzip gsoap-2.8.1.zip命令解压缩,会解压生成gsoap-2.8文件夹. cd gsoap-2.8   在安装之前需要先安装一些编译工具.     安装编译工具: $sudo apt-get install build-essential 为了成功编译gSOAP,您需要安

webservice exception-客户端调用web service服务异常

问题描述 客户端调用web service服务异常 我是一个菜鸟,现在正在学着用wsdl.stub.连接webservice 现在出现的问题是: org.apache.axis2.AxisFault: Exception occurred while trying to invoke service method ReadClientDBByStrings at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils