系统架构师-面向服务架构(SOA)全解

1、为什么需要SOA架构

1.1 系统集成问题

  1. 异构系统整合
  • 例如,一个企业可能同时拥有用 Java 开发的企业资源规划(ERP)系统、用 C# 开发的客户关系管理(CRM)系统以及用 Python 开发的数据分析系统。通过 SOA,可以将这些系统的特定功能以服务的形式暴露出来,然后根据业务需求进行组合和调用,实现数据的共享和业务流程的协同。
  1. 可扩展性
  • 比如,企业要增加一个新的市场推广活动管理功能,可以开发一个独立的服务来实现这个功能,并将其集成到现有的 SOA 架构中。这样,既可以满足新的业务需求,又不会干扰到其他正在运行的业务模块。

1.2 业务灵活性问题

  1. 快速响应业务变化
  • 例如,当市场需求发生变化,企业需要调整产品销售策略时,可以通过重新组合现有的服务来实现新的销售流程,而无需对整个系统进行大规模的开发和修改
  1. 服务复用
  • 比如,一个用于用户身份验证的服务可以在企业的多个系统中复用,无论是内部员工管理系统还是面向客户的电子商务平台,都可以调用这个服务进行用户身份验证。

1.3 技术独立性问题

  1. 技术升级与替换
  • 例如,企业决定将数据库从一种类型转换为另一种类型,只需要对相应的数据服务进行调整,而不会影响到其他业务服务和整个系统的运行
  1. 降低技术风险
  • 如果企业只依赖于一种特定的技术,一旦该技术出现问题或不再被支持,可能会对整个系统造成严重影响。而在 SOA 架构下,企业可以根据实际情况选择最适合的技术来实现各个服务,从而降低技术风险。

2. SOA架构及需要解决的问题

从应用的角度定义,可以认为 SOA是一种应用框架,它着眼于日常的业务应用,并将它们划分为单独的业务功能和流程,即所谓的服务

从软件的基本原理定义,可以认为SOA是一个组件模型,它将应用程序的不同功能单元 (称为服务)通过这些服务之间定义良好的接口和契约联系起来。

简单理解,SOA即将业务功能封装为服务(应用框架),通过接口使不同服务进行通信(组件模型)

所以需要解决的问题

  1. 我有一个服务,我如何给别人使用?我又怎么使用别人的服务?
  2. 不同服务应该如何通信

为了解决这些问题,所以就开始制定协议

3. SOA协议

3.1 SOA的发展史

3.1.1 萌芽:xml

通过XML,开发人员摆脱了HTML语言的限制,可以将任何文档转换成XML格式,然后跨越因特网协议传输

3.1.2 标准化阶段: SOAP、WSDL、UDDI

三个著名的 Web服务标准和规范:

  • 简单对象访问协议 (Simple Object Access Protocal,SOAP)
  • Web服务描述语言 (Web Services Description Language,WSDL)
  • 通用服务发现和集成协议 (Universal Discovery Description and Integration,UDDI)

3.1.3 成熟应用阶段: SCA/SDO/WS-Policy

SCA 和 SDO构成了SOA 编程模型的基础,而WS-Policy建立了SOA组件之间安全交互的规范。

3.2 SOA主要协议

3.2.1 UDDI(通用服务发现和集成协议)

对应需要解决的服务发现使用问题,UDDI就是一个注册中心,可以去注册中心注册,然后其他人可以发现注册的服务。

微软和IBM的公共UDDI注册中心早在2006年就已经关闭了,所以更像是一个历史产物,现在使用的模式是在公司内部搭建自己的注册中心

3.2.2 WSDL(web服务描述语言)

WSDL(Web Services Description Language,Web服务描述语言),是一个用来描述Web服务说明如何与Web服务通信XML语言。通过WSDL, 可描述Web服务的三个基本属性。 (1)服务做些什么------服务所提供的操作(方法)。 (2)如何访问服务------和服务交互的数据格式以及必要协议。 (3)服务位于何处------协议相关的地址,如 URL。

顾名思义,它首先是一门语言,这个语言就是用来描述web服务和通信,其实就是很常见的get/post等等方法,http或者https,端口号是多少

简单理解,它就是SOA通信传递的数据格式

3.2.3 SOAP(简单对象访问协议)

SOAP是在分散或分布式的环境中 交换信息的简单的协议,是一个基于XML的协议。它包括4个部分:1. SOAP封装 (Envelop), 定义了一个描述消息中的内容 是什么,是 发送的,谁应当接收并处理它以及如何处理它们的框架;2. SOAP编码规则 (Encoding Rules), 用于表示应用程序需要使用的 数据类型 的实例;3. SOAP RPC表示 (RPC Representation) 是远程过程调用和应答的协定;4.SOAP绑定 (Binding) 是使用底层协议交换信息。

WSDL已经确定需要传递的数据长什么样,现在就是需要解决服务之间通信传递的问题,所以需要SOAP。

但是不要忘记我们上面还有一个图

如图,服务间的通信首先可以通过这个叫ESB的家伙进行通信,它同时兼顾了数据通信的协议和传递的数据格式问题

一个典型的在 ESB环境中组件之间的交互过程 是:首先由服务请求者触发一次交互过程 ,产生一个服务请求消息,并将该消息按照ESB 的要求标准化,然后标准化的消息被发送给服务总线 。 ESB 根据请求消息中的服务名或者接口名进行目的组件查找,将消息转发至目的组件,并最终将处理结果逆向返回给服务请求者。

到这里,我们有两种方案

  1. ESB
  2. UDDI+SOAP+WSDL

按教材的分发,ESB是企业服务总线模式,而UDDI就是服务注册表模式,至于通信及通信格式这些问题,可以采用SOPA+WSDL的方案,这些都不是必须的,都可以根据实际情况调整

3.2.4 REST(表述性转移)

(表述性状态转移,这个名字挺好的TOT)

做开发最熟的RESTful api,就是这种理念的实现,不多赘述

4. SOA设计模式

如上,我们已经讲了服务注册表模式和企业服务总线模式

现在我们讲微服务模式

看图说故事,右边的微服务架构,第一眼就看到少了ESB,SOA把系统分为服务,微服务把系统分为微服务,所以微服务=SOA?

当然不是

另一个问题,微服务是SOA的一种?SOA包含了微服务?

微服务可以被认为是 SOA 的一种演进形式,但两者并不是严格的包含关系。微服务是在 SOA 的基础上发展而来的一种架构风格,它在服务粒度、技术实现和部署方式等方面与 SOA 存在差异。虽然两者有一定的相似之处,但不能简单地认为微服务是 SOA 的一种,也不是严格的包含关系。

SOA与微服务的区别

  1. 粒度:

SOA:服务通常较大,可能包含多个功能,因此 API 可能更加复杂,往往需要更大的数据载荷。

微服务:服务较小且专注,API 通常更简洁,针对单一功能或资源。

  1. 通信协议:

SOA:可能使用多种协议(如 SOAP、REST、JMS),并常常依赖企业服务总线(ESB)来管理和协调服务间的通信。

微服务:通常更倾向于轻量级协议(如 REST、gRPC),直接服务间通信,避免中间层。

  1. 耦合度:

SOA:服务间可能存在较强的耦合,依赖于共享的模式或数据模型。

微服务:服务间的耦合较松散,每个微服务可以独立变化,使用各自的数据模型。

  1. 治理:

SOA:通常需要更多的治理和规范,特别是在大型企业环境中。

微服务:更强调去中心化的治理,团队可以自主决定服务的实现和技术栈。

总体来说,微服务更注重灵活性和独立性,而 SOA 更注重集成和治理。

相关推荐
hstar952721 分钟前
二、即时通讯系统设计经验
java·架构
江梦寻34 分钟前
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
开发语言·后端·python·macos·架构·策略模式
打码人的日常分享9 小时前
物联网智慧医院建设方案(PPT)
大数据·物联网·架构·流程图·智慧城市·制造
白水baishui9 小时前
搭建强化推荐的决策服务架构
架构·推荐系统·强化学习·决策服务·服务架构
何双新9 小时前
第23讲、Odoo18 邮件系统整体架构
ai·架构
雪碧聊技术9 小时前
将单体架构项目拆分成微服务时的两种工程结构
微服务·架构·module·project·工程结构
从零开始学习人工智能10 小时前
Doris 数据库深度解析:架构、原理与实战应用
数据库·架构
程序员JerrySUN11 小时前
[特殊字符] 深入理解 Linux 内核进程管理:架构、核心函数与调度机制
java·linux·架构
Theodore_102212 小时前
大数据(2) 大数据处理架构Hadoop
大数据·服务器·hadoop·分布式·ubuntu·架构
米粉030512 小时前
深入剖析Nginx:从入门到高并发架构实战
java·运维·nginx·架构