分布式系统概念与设计读书笔记-Web服务

Posted by keys961 on July 25, 2018

1. Overview

层次

组件从底到上:

  • URI(URL/URN),XML(HTML等),HTTP或其它传输协议

URI: 统一资源标识符,其值可为URL或URN

URL: 统一资源定位,包括协议、域名、路径

URN: 统一资源名称,标识一个实体标识符,但不能表达位置(如磁力链)

  • SOAP,REST

SOAP: 简单对象访问协议,交换数据的一种规范,指定XML格式封装消息

REST: 表述性状态传递,一种针对网络应用的设计和开发方式,可降低开发复杂性,提高系统可伸缩性

  • Web Service, 服务描述(WSDL)

WSDL: Web服务描述语言,用于创建服务描述,包括接口定义和其它消息(如URL)

  • 应用程序、目录服务、安全服务、编排

2. Web服务

Web服务的组合:提供Web服务接口允许该操作与其它服务的操作继续组合,从而提供新的功能。

通信模式

一般使用2种:

  • 异步消息(用于耗时服务)
  • 同步请求-应答模式

也可以用事件风格,客户注册/监听感兴趣的事件,当事件到达时进行响应

多种通信模式,可用SOAP协议/REST表示方法,进行消息封装以解决异构性

松耦合

指最小化服务之间的依赖,可通过以下额外特征增强松耦合:

  • 接口编程,接口定义和实现的解耦
  • 用简单通用的接口(如REST方法,提供最小化接口)
  • 通过多种通信范型以解耦(如间接通信以提供时间和空间的解耦)

总之,松耦合有很多维度

消息表示

  • SOAP协议:使用XML来规范
  • REST:用URL和HTTP操作,以XML/JSON等格式表示资源,重点是对数据资源操作而非接口(REST服务接口简单、最小、统一)

服务引用:使用URI,通常为URL

透明性:底层协议细节和消息格式(编码和解码)被编程语言隐藏

2.1. SOAP

SOAP可支持HTTP、SMTP、TCP、UDP等多种协议,规定:

  • 如何用XML表示消息
  • 如何组合一对消息生成请求-应答模式
  • 如何处理XML元素的规则
  • HTTP等协议如何传输SOAP消息

a) SOAP消息

包含在<envelop>中,里面包含头部<header><body>。整个文档置于HTTP消息的体部content-type: application/soap+xml

  • 头部:可选,可包含应用程序专用信息(比如认证、支付等) ,必须是第一个子元素
  • 体部:必需,放置消息体信息

b) SOAP可靠通信语义

WS-ReliableMessaging推荐标准:

  • 至少一次:消息至少传递一次,若不能传递,则报告出错
  • 至多一次:消息至多传递一次,若不能传递,忽略错误
  • 正好一次:消息正好传递一次,若不能传递,则报告出错
  • 按序:消息按照发送方发送的顺序到达目的地

只关心单个消息传递,和RPC调用语义没关系,后者指服务器执行调用次数

3. Web服务描述与WSDL

Web服务描述包括:接口定义、消息如何通信(如HTTP上的SOAP)、服务URI

WSDL:用于Web服务的描述,仅仅是XML文档,其包含以下元素

  • types: 服务使用的数据类型
  • message: 服务使用的消息
  • binding: 协议选择
  • portType: 服务执行的接口操作

WSDL可直接或间接通过UDDI等目录服务,使用URI访问和获取

4. Web目录服务——UDDI

UDDI(统一目录和发现服务)的目的:使用目录更便于客户找到服务

可通过名称、属性查找WSDL,也可使用URL直接访问

4.1. 数据结构

  • businessEntity: 描述提供Web服务的组织,给出名称、地址、活动等

    存储多个businessService

    • businessServices: 存储Web服务实例集合的有关信息,如名称、目的描述

      存储多个bindTemplate

      • bindingTemplate: 存放Web服务实例的地址、服务描述的引用

        存储多个tModel,通过URL索引

        • tModel: 存放服务描述,常为WSDL文档,存储在数据库外且可通过URL访问

当一个数据结构在某个UDDI服务器被加入后,该结构会获得一个URI形式的键,且该服务器是该结构的所有者。

4.2. 查找

两类查找:

  • get_xxx: 给定键值,查找实体
  • find_xxx: 给定搜索规则,返回符合的集合,并给出名称、描述、键和URL的摘要

也可有通知/订阅接口,当新实体加入后,注册的实体可获得变更通知。

UDDI也提供一个接口来发布和更新Web服务的信息。

4.3. 注册处

UDDI服务基于注册处中存储的复制数据。

注册处由一个或多个服务器组成,每个结点数据集相同,数据在不同结点间复制,每个结点都可以查询和发布信息。

数据结构更改必须先在其所有者服务器(即第一次创建的服务器)上进行,如何所有者将更改发布/复制到其它的结点上

a) 复制模式

进行变更的服务器通知其它服务器,然后其它服务器请求进行更改。使用一个向量时间戳来确定是什么更改。

b) 交互

服务器之间通过交互完成复制,也可以通过交互交换数据结构的所有权。

查询就不需要交互,只需单个服务器上执行即可

5. 编排

编排:基于WSDL的用来定义协调的语言,提供一组交互的全局描述,显示每个参与者的行为(如指定不同参与者之间交换信息时的顺序、条件等限制)

很像Spring Web-flow

6. Web服务应用

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

SOA

分布式系统用松耦合的服务集合开发,集合里的服务能被动态发现,能相互通信,并可通过编排进行协调从而提供加强的服务

主要通过使用Web服务实现,这个方法有内在的松耦合特性(见上耦合性说明)

SOA提供一个灵活的软件体系结构,实现了不同不服间的互操作性

6.2. 网格

网格: 指一种中间件,使得非常大规模的文件、计算机、软件、数据和传感器等资源共享成为可能

网格是云计算的早期例子

网格计算: 通过利用大量异构计算机的未用资源,将其作为一个虚拟的计算机集群,为解决大规模的计算问题提供的一个模型。

网格和集群的区别:

  • 集群是同构的,而网格是异构的;

  • 网格扩展包括用户桌面机,而集群一般局限于数据中心

网格中间件: OGSA是基于网格应用的一个标准,基于Web服务,通过面向特定应用的网格服务管理资源,如Globus工具包实现了这个体系结构。

6.3. 云计算

根据“任何东西(物理或虚拟设施到软件)都是服务”,云计算的一种实现途径是Web服务,如AWS

AWS,让外部用户能在AWS基础设施上运行自己独立的服务

且AWS也处理了分布式系统的问题,如HA管理、可伸缩性和性能