技术开发 频道

探究SOA的思想

    额外的约束

    在SOA中,有几项额外的约束用于提高其可测性、性能及可靠性。

    无状态服务

    每个消费者发送给提供者的消息必须包含所有提供者处理该请求所需要的信息。此约束使的提供者更加的可测,因为提供者不需要在请求之间保存状态信息。既然每个请求都被通用的对待,这就形成了有效的“服务批量生产”。同样可以称此约束提高了可见度,因为任何一个监控软件都可以监控单个的请求并指出其目的。由于不需要担心中间状态,因此从部分的失败中恢复也是相对简单的。这使的服务更加可靠。

    有状态服务

    有状态服务在许多场景下很难避免。其中一个便是在消费者和提供者间建立一个会话。会话是典型的为了性能而建立的。例如,为每个请求发送安全证书对消费者和提供者来说都是相当沉重的负担,如果把安全证书替换成在消费者和提供者之间共享的一种标记,那么会快上许多。另一个场景那就是给消费者提供服务。

    有状态服务要求消费者和提供者都共享同一特定消费者的上下文,它可能被提供者和消费者间交互的消息所包含或引用。此约束的缺点是,它可能全面降低服务提供者的可测性,因为提供者可能需要为每个消费者记忆共享的上下文。它同样还增加了服务提供者与消费者间的耦合关系,使的服务的筛选变的更加的困难。
   
    幂数请求

    由一个软件代理接收到的重复请求与单个的请求拥有相同的效果。此约束允许提供者和消费者通过简单的进行“如果请求失败则重复执行”来全面提高服务的可靠性。

    源于SOA的Web服务

    每个人都大概的了解什么是“web服务”,但是并没有一个可被广泛接受的定义。web服务的定义同时也被W3C Web服务框架工作组激烈的讨论。尽管定义一个web服务是如此的困难,但是大致说来满足下列约束的web服务就是一个SOA:

    1.接口必须是基于互联网协议,例如HTTP、FTP和SMTP。

    2.除非是二进制附件,消息必须是XML格式。

    有两个重要的Web服务格式,分别是:SOAP Web服务和REST Web服务。

    SOAP Web 服务

    对于SOAP Web服务,介绍下面的约束:

    1.除了二进制附件,消息必须由SOAP传输。

    2.服务的描述必须是用WSDL(Web Services Description Language),即描述服务的标准语言。

    SOAP Web服务是一种在企业中最具有共同市场的网络服务形式。一些人简单的将web service和SOAP、WSDL services混淆。SOAP规范定义了结构化信息,依据SOAP 1.2 规范,此信息能够在很多底层协议下交换。换句话说,SOAP就如一个带有本身内容的信封。SOAP的一个优点是它允许有多种信息交换形式来传送且固化信息的联系,这不同于传统的请求/响应形式。SOAP Web服务有方面的内容,SOAP RPC和document-centric SOAP web services。SOAP RPC web服务不是SOA,而document-centric SOAP web 服务是SOA。

    SOAP RPC Web 服务

    SOAP RPC Web 服务打破了由SOA需要的第二个约束。SOAP RPC Web 服务将SOAP消息编码为RPC(远程过程调用)。换句话说,SOAP RPC通过底层的一个通用接口“进入”了新的特定的RPC应用接口。它(SOAP RPC)有效的指示系统行为和应用语义。因为系统行为在分布式环境下是很难被指示的,由SOAP RPC创建的应用很自然的不是共同操作的。许多实际中的程序运行已经证实了这一点。

    面对此困难,WS-I basic profile(Web服务互用性组织)和SOAP 1.2已经对RPC的随意性做了支持。RPC也趋向于命令性而非描述性,这违背SOA的本质。可笑的是,SOAP最初是为RPC而设计的。有些人认为在不久的将来,“SOAP”将实际代表“SOA协议”。

    REST Web 服务

    术语 “REST”首先是由Roy Fielding用来描述网络架构的。REST Web 服务是SOA所基于的“资源”的概念。一个资源就拥有一个URI。一个资源可能没有或有更多的代表性。通常,如果一种资源没有代表性可得到,我们就说这种资源不存在。REST Web 服务需要下面的额外约束:

    1.接口仅限于HTTP。下面的语义是被定义的:

    HTTP GET是用来获得一个资源的一个代表性。消费者用它(资源的代表性)从URI中重新得到一个代表性。服务提供者通过此接口不允许发生来自消费者任何的职责。

        HTTP DELETE是用来删除一个资源的代表性的。

    HTTP POST是用来更新或创建一个资源的代表性。

    HTTP PUT是用来创建一个资源的代表性。

    2.多数信息是XML格式的,并且有规范语言限制而写的。例如W3C的XML Schema或者RELAX NG。

    3.简单的信息可以编码为URL编码。

    4. 服务和服务提供者必须是资源,而消费者可能是资源。

    除了标准的HTTP和XML处理技术,REST Web 服务需要很少的底层基础的支持,它现在被许多程序设计语言和平台很好的支持。REST Web 服务是简单且有效的,因为HTTP是最广泛可以得到的接口,并且它对多数的应用是很好的。在多数情况下,HTTP的简单很容易的胜过引入一个额外的传输层的复杂性。(译:林艳芹)

0
相关文章