SOA(Service-Oriented Architecture,面向服务的架构)是一种在计算机环境中设计、开发、部署和管理离散模型的方法。SOA不是一种新鲜事物,它是在企业内部IT系统重复构建以及效率低下的背景下提出的。在SOA模型中,所有的功能都被定义成了独立的服务,所有的服务通过服务总线(ESB)或流程管理器来连接。这种松散耦合的结构使得能够以最小的代价整合已经存在的各种异构系统,当然,由于需要实现对各种异构系统的适配(通常使用ESB来完成不同系统之间的协议转换及数据格式转换),因此,其本身也会引入更多的复杂性。
一个典型的SOA结构如下图所示:
其中,对于其中的单个服务而言,其内部结构一般如下:
SOA的设计原则包括:
SOA作为一种架构设计的概念和思想,需要借助具体的技术和方法来实现。目前SOA的主流实现方法包括:Web Service、服务注册表和企业服务总线。
服务注册表(Service registry)提供一个策略执行点,在这个点上,服务可以在SOA中注册,从而可以被发现和使用。大多数商用服务注册产品支持服务注册、服务位置和服务绑定功能。
ESB(Enterprise Service Bus)将企业中各个不同的服务连接在一起。因为各个服务是异构的,没有统一的标准,各个异构系统对外提供的接口是各式各样的,SOA使用ESB来屏蔽异构系统对外提供的不同接口,以此来达到服务间高效的互联互通。
与SOA紧密相关的技术主要有UDDI、WSDL、SOAP和REST等,这些技术都是以XML为基础发展而来的。
UDDI(Universal Description Discovery and Integration,统一描述、发现和集成)提供了一种服务发布、查找和定位的方法,是服务的信息注册规范,以便该服务被发现和使用,同时它也定义了一种编程接口。该技术规范主要包括数据模型、API和注册服务三部分。
WSDL(Web Service Description Language,Web服务发现语言)是基于XML语法对服务进行描述的语言,包括服务实现定义和服务接口定义。服务实现定义描述服务提供者如何实现特定的服务接口,包含服务和端口描述。服务接口定义是一种抽象的、可重用的定义,行业标准组织可以使用这种抽象的定义来规定一些标准的服务类型,服务实现者可以根据这些标准定义来实现具体的服务。
SOAP(Simple Object Acess Protocol,简单对象访问协议)定义了服务请求者和服务提供者之间的消息传输规范,该协议通过HTTP承载XML格式化的消息。通过SOAP,应用程序可以在网络中进行数据交换和远程过程调用(RPC)。SOAP主要包括封装、编码规则、RPC表示和绑定四个部分。
REST(Representational State Transfer,表达性状态转移)是一种针对Web服务的设计和开发方式,通常使用HTTP、XML、URI和HTML等流行协议或标准,可以有效降低开发的复杂性,提高系统的可伸缩性。REST对信息的操作基本只支持POST、GET、PUT和DELETE,这些操作基于如下的设计理念: