知识卡片

SOA的诞生背景,及三个关键概念:服务、ESB与松耦合

结构图卡

内容

SOA(Service Oriented Architecture,面向服务的架构)诞生于1990年代,是面向服务拆分对应的一种架构理念(不同于[[分层结构层层传递的约束:用冗余和轻微性能代价换取低复杂度]]所属的面向流程拆分)。它出现的背景是企业内部IT系统重复建设、协作效率低下:企业各部门往往各自有独立的IT系统(人力资源系统、财务系统、销售系统),这些系统可能都要重复实现类似人员管理这样的功能(比如某员工离职,要分别到三套系统里各自删一次权限);各系统还常常是不同供应商提供的,实现技术各不相同,企业自己也很难对它们统一重构;随着业务复杂度上升,越来越多流程需要多个IT系统协作完成,但这些系统本身没有统一的实现标准(比如人力资源系统用Java对外提供RPC、财务系统用C#对外提供SOAP),每次开发新的跨系统流程都要协调大量异构系统、逐一定制开发,效率很低。针对这些问题,SOA提出了三个关键概念。服务:所有业务功能都被视为一项服务,服务意味着要对外开放能力,别的系统要用时无须为它定制开发;服务的粒度可粗可细,比如”人力资源管理”可以整体是一项服务,其中”人员基本信息管理”“组织结构管理”也可以各自拆成独立的服务,具体粒度要看企业实际情况判断。ESB(Enterprise Service Bus,企业服务总线):借用计算机总线的思路,把企业内各个异构服务连接起来——因为各服务实现方式各不相同、对外接口各式各样,ESB负责屏蔽这些差异,统一完成协议转换、数据转换等工作,让服务之间能高效互联互通。松耦合:目的是减少各服务间的相互依赖和影响,因为SOA架构下各服务本应独立运行,如果做不到松耦合,某个服务一升级,依赖它的其他服务可能全部跟着故障——但真正做到完全后向兼容其实是一项复杂的工作,说起来容易做起来难。

结构图

flowchart TB
  A["SOA诞生背景:企业IT系统重复建设+异构协作低效"]
  A --> A1["各部门系统重复实现相同功能<br/>(如人员管理需在多套系统各改一次)"]
  A --> A2["各系统供应商不同、实现技术各异<br/>难以统一重构"]
  A --> A3["跨系统流程需协调大量异构系统<br/>无统一标准,每次都要定制开发"]
  A1 --> B["SOA的三个关键概念"]
  A2 --> B
  A3 --> B
  B --> C["服务:功能对外开放,无须定制开发<br/>粒度可粗可细"]
  B --> D["ESB:企业服务总线<br/>屏蔽异构接口,统一协议/数据转换"]
  B --> E["松耦合:减少服务间依赖<br/>但真正做到完全后向兼容并不容易"]

参考来源

- 位置:《从零开始学架构》第33讲《传统的可扩展架构模式:分层架构和SOA》"SOA"(源文件:_epub-src/OEBPS/text00003.html) - 结论依据:原文说明SOA背景"企业各部门有独立的 IT 系统……各 IT 系统都需要重复开发人员管理的功能……各个独立的 IT 系统没有标准的实现方式……每次开发新的流程和业务,都需要协调大量的 IT 系统",并展开"服务……ESB……松耦合"三个关键概念的定义,直接支撑本卡片结论与结构图。 - 原始内容:SOA 出现的背景是企业内部的 IT 系统重复建设且效率低下……为了应对传统 IT 系统存在的问题,SOA 提出了 3 个关键概念:服务……ESB……松耦合。