服务是为了满足某项业务需求的操作、规则等的逻辑组合,它包含一系列有序活动交互,为实现用户目标提供支持。
核心:
通过服务进行系统解构,使用 ESB 统一通信
架构组成
- 应用配置
- 流程管理器
- I/O 处理
- 服务总线(ESB)
- 各类服务(服务 1~6)
- 历史遗留系统
调用流程
- 应用配置驱动流程
- 流程管理器编排服务
- 通过 ESB 调用多个服务
- 服务访问数据层
SOA层次和特点
| 服务构件 | 传统构件 |
|---|---|
| 标准化程度更高 | |
| 粗粒度 | 细粒度居多 |
| 接口是标准的,主要是 WSDL 接口 | 常以具体 API 形式出现 |
| 实现与语言无关 | 绑定某种特定语言 |
| 以通过构件容器提供QOS 的服务 | 完全由程序代码直接控制 |
架构对比
| 架构 | 特点 |
|---|---|
| SOA | 中心化 |
| 微服务 | 去中心化 |
ESB(企业服务总线)
作用:
统一服务之间的通信
功能
- 协议转换(HTTP/SOAP/MQ)
- 路由转发
- 数据转换(XML/JOSN)
- 安全控制
问题
- 单点瓶颈
- 复杂度高
单个服务内部结构
分层
- 服务接口层
- 逻辑层
- 数据访问层
数据来源
- SQL Database
- XML
- Flat File
关键点
- 接口标准化
- 统一安全处理
- 容错机制
graph LR A[应用配置] --> B[流程管理器] C[I/O处理] <--> B B --> D[ESB] D --> S1[服务1] D --> S2[服务2]
实际项目中的对应
- ESB -> API Gateway(或 Kafka)
- 流程管理 - Orchestration
- 服务 - 微服务
关键技术
graph LR A[服务注册中心] <--通过UDDI查找--> B[服务请求者] A <--通过UUDI发布--> C[服务提供者] B <--用WSDL描述--> C B <--通过SOAP连接--> C
| 功能 | 协议 |
|---|---|
| 发现服务 | UDDI、DISCO |
| 描述服务 | WSDL、XML Schema |
| 消息格式 | SOAP、REST |
| 编码格式 | XML |
| 传输层 | HTTP等 |
- UUDI:Web 服务集成体系,包含了服务描述与发现的规范
- WSDL:服务描述语言,三个基本属性(服务做了什么/如何访问服务/服务位于何处)
- SOAP:基于 XML协议,在分布式环境中交换信息
- REST:只使用 HTTP 和 XML 进行基于 Web 通信的技术
ESB
消息中间件、服务总线,它是面向服务架构的一种实现方式
graph LR A[企业服务总线] <--> S1[消息转换] A <--> S2[消息传输] A <--> S3[动态路由] A <--> B[应用服务接口] A <--> C[用户交互服务]
服务请求者与服务提供者之间的解耦
- 提供位置透明性的消息路由和寻址服务
- 提供服务注册和命名的管理
- 支持多种消息传递规范
- 支持多种可以广泛使用的传输协议
- 支持多种数据格式及其相互转换