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管理、可伸缩性和性能