面向服务的架构(SOA)中的协议独立性

ZDNet软件频道 时间:2004-06-09 作者:Builder.com |  我要评论()
本文关键词:
在考虑到服务和进程可能需要跨多个协议进行交互时,设计一个有效的分布式软件系统就变得相当麻烦。
本文译自Builder.com,未经许可请勿转载

在考虑到服务和进程可能需要跨多个协议进行交互时,设计一个有效的分布式软件系统就变得相当麻烦。

多数分布式系统都将进程内通信的协议细节包装在使用每个给定协议的进程或服务中。如果不是那样做,就是把细节内嵌在一些负责处理某一具体协议的通信的管理类(manager class)中。在需要一个新协议时,这两种机制都会引起重新设计、重新编程、重新编译和测试等问题。根据与协议有关的代码与服务本身之间耦合的数量,通常会产生一些相互依赖,从而在底层通信基础设施发生变化时需要处理一些潜在的困难的耦合。

协议独立性的设计

一个面向服务的架构(SOA,service-oriented architecture)取决于服务间最少的相互依赖。这个松散耦合必须将所有方式传播给架构的协议层。因此,SOA 使用的通信基础设施应该设计为与底层协议层无关。

代码重用性是设计良好的(well-designed)、协议独立的(protocol-independent)通信框架的最主要的优点,因为使用框架的代码将不会与使用的协议绑在一样。底层协议的透明替换也是协议独立的通信框架设计的非常重要的优点。这使得新协议的部署变成比以前简单,因为避免了在重新部署中一般都会遇到的另人头痛的事情,包括重新启动服务,阻碍客户端运行等。

协议独立性的模式
  • 业务托管:隐藏业务服务的底层实现细节,比如查找和访问细节等。

    例子:包装(wrapper)Java Bean,用于聚集多个对象,并展现容易理解的业务接口。

  • 远程代理(proxy or surrogate:充当位于其它层中的对象的一个替身。

    例子:RMI 的 stub 类设计

  • 适配器(Adapter)或包装器(Wrapper:适配器提供能异构对象或服务的透明访问,实现这一机制所采用的方式是将请求或可能的响应从一个交互接口转换成另外一个接口。

    例子:Java 的 Portable Object Adapter(可移值对象适配器)

  • 代理(broker):从其它层的对象和服务器抽出业务层对象。

    例子:CORBA 的 ORB 环境

  • 工厂(factory):根据动态配置在运行时期实例化对象。工厂通常是围绕 Strategy 模式或 Bridge 模式设计的实例化对象。

    例子:RMI 的客户 socket 工厂环境

    协议抽象层

    协议独立框架技术的一个最重要的内容是协议抽象层。与其它优点不同,协议抽象层允许通过多个协议同时地对服务进行访问;允许向开发人员隐藏协议细节;还使得透明协议替换变得容易。A说明了这一概念。

    图A
    协议抽象层

    使用 SOAP 的协议独立性

    简单对象访问协议(SOAP)是一个轻量级的,基于 XML 的协议,用于在一个分散、分布式环境下交换信息。SOAP 支持远程过程调用(RPC)方式的信息交换和面向消息方式的信息交换。SOAP 是围绕很多松耦合设计的,包括协议独立性、语言独立性、平台独立性和操作系统独立性。

    SOAP 规范定义一个XML 文档的结构,用于在两个实体之间通过各种其它协议交换数据。

    SOAP 规范1.2定义了一个绑定框架,用于扩展将 SOAP 消息从一个节点传输到其它节点的责任。这样就使得 SOAP 处理器可以做到协议不可知和协议独立。因而,SOAP 版本1.2消息可以跨 HTTP、SMPT 或者任何其它与绑定框架兼容的绑定所用的协议来传输消息。


  • 百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
    中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
    京公网安备:1101082134