架构-架构设计2.2-面向服务的架构风格
【参考:SOA的ESB总线和微服务的网关感觉差不多啊,为什么很多人说微服务和SOA之间就差了个ESB? - 知乎】
SOA概念
SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通信,不涉及底层编程接口和通信模型。
在SOA中,服务是一种为了满足某项业务需求的操作、规则等的逻辑组合,它包含一系列有序活动的交互,为实现用户目标提供支持。
SOA并不仅仅是一种开发方法,还具有管理上的优点,管理员可直接管理开发人员所构建的相同服务。多个服务通过企业服务总线(ESB)提出服务请求,由应用管理来进行处理,如下:
实施SOA的关键目标是实现企业IT资产重用的最大化,
在实施SOA过程中要牢记以下特征:
- **可从企业外部访问、
- 随时可用(服务请求能被及时响应)、
- 粗粒度接口**(粗粒度提供一项特定的业务功能,而细粒度服务代表了技术构件方法)、
- **服务分级、
- 松散耦合**(服务提供者和服务使用者分离)、
- **可重用的服务及服务接口设计管理、
- 标准化的接口**(WSDL、SOAP、XML是核心)
- **支持各种消息模式、
- 精确定义的服务接口**
从基于对象到基于构件再到基于服务,架构越来越松散耦合,粒度越来越粗接口,越来越标准。
基于服务的构件与传统构件的区别有四点:
- 服务构件粗粒度,传统构件细粒度居多;
- 服务构件的接口是标准的,主要是WSDL接口,而传统构件常以具体API形式出现;
- 服务构件的实现与语言是无关的,而传统构件常绑定某种特定的语言
- 服务构件可以通过构件容器提供QoS的服务,而传统构件完全由程序代码直接控制。
主要协议与技术
【参考:WebService,ESB笔记 - 世间草木 - 博客园】
Web服务最基本的协议包括UDDI、WSDL和SOAP,通过它们,可以提供直接而又简单的Web Service 支持如图所示。
- UDDI(统一描述、发现和集成协议)计划是一个广泛的、开放的行业计划,它使得商业实体能够彼此发现;定义它们怎样在Internet上互相作用,并在一个全球的注册体系架构中共享信息。
- WSDL(web 服务描述语言,Web Services Description Language),是一个用来描述Web服务和说明如何与Web服务通信的XML语言。可描述三个基本属性:
- **服务做些什么——服务所提供的操作(方法)
- **如何访问服务——和服务交互的数据格式以及必要协议。
- 服务位于何处协议相关的地址,如URL。
WSDL文档以端口集合的形式来描述Web 服务,WSDL服务描述包含对一组操作和消息的一个抽象定义,绑定到这些操作和消息的一个具体协议,和这个绑定的一个网络端点规范。WSDL文档被分为两种类型:服务接口和服务实现。
- SOAP(Simple Object Access Protocol)是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。它包括4个部分:
- SOAP封装,定义了一个描述消息中的内容是什么,是谁发送的,谁应当接收并处理它以及如何处理它们的框架;
- SOAP编码规则,用于表示应用程序需要使用的数据类型的实例;
- SOAP RPC表示是远程过程调用和应答的协定;
- SOAP绑定是使用底层协议交换信息。
SOAP 的两个主要设计目标是简单性和可扩展性,这就意味着有一些传统消息系统或分布式对象系统中的某些性质将不是SOAP 规范的一部分。
补充:BPEL(Business Process Execution Language For Web Services)翻译成中文的意思是面向 Web 服务的业务流程执行语言,也有的文献简写成BPEL4WS,它是一种使用 Web 服务定义和执行 业务流程的语言。使用BPEL,用户可以通过组合、编排和协调Web服务自上而下地实现面向服务的体系结构(SOA)。BPEL 提供了一种相对简单易懂的方法,可将多个 Web 服务组合到一个新的复合服务(称作业务流程)中。
实现方式
WEB Service
服务提供者、服务注册中心(中介,提供交易平台,可有可无)、服务请求者。服务提供者将服务描述发布到服务注册中心,供服务请求者查找,查找到后,服务请求者将绑定查找结果。如图:
服务注册表
- 服务注册:应用开发者(服务提供者)在注册表中公布服务的功能。
- 服务位置:服务使用者(服务应用开发者),帮助他们查询注册服务,寻找符合自身要求的服务
- 服务绑定:服务使用者利用检索到的服务接口来编写代码,所编写的代码将与注册的服务绑定,调用注册的服务,以及与它们实现互动。
企业服务总线ESB
简单来说是一根管道,用来连接各个服务节点。ESB的存在是为了集成基于不同协议的不同服务,ESB 做了消息的转化、解释以及路由的工作,以此来让不同的服务互联互通。
包括:客户端(服务请求者)、基础架构服务(中间件)、核心集成服务(提供服务)
ESB特点:
- SOA的一种实现方式,ESB在面向服务的架构中起到的是总线作用,将各种服务进行连接与整合
- 描述服务的元数据和服务注册管理,
- 在服务请求者和提供者之间传递数据,以及对这些数据进行转换的能力,并支持由实践中总结出来的一些模式如同步模式、异步模式等;
- 发现、路由、匹配和选择的能力,以支持服务之间的动态交互,解耦服务请求者和服务提供者。高级一些的能力,包括对安全的支持、服务质量保证、可管理性和负载平衡等。