知识卡片
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/>但真正做到完全后向兼容并不容易"]