前言、架构的演进
一、 单体架构(Monolithic Architecture)
a.问题:
单点故障风险高:所有模块都打包在一个应用中,如果其中某个模块(如 A)出现崩溃,可能会导致整个系统不可用,其他模块(B、C、D)也无法正常工作。
扩展性不足:无法针对单个模块进行独立扩展。如果某个模块(如 B)性能成为瓶颈,只能整体扩容整个应用,导致资源浪费。
概念
所有功能模块打包在一个应用中,部署为一个整体(通常是一个 WAR/JAR 或一个进程)。
例如:一个商城项目,商品、订单、用户、支付等模块都在同一个应用里。
优点
架构简单,上手快,适合小型团队。
部署方便:打包一次,部署一次。
调试方便:本地运行即可调试全部功能。
性能较高:模块之间方法调用(进程内调用),无需网络通信。
缺点
难以维护:代码耦合度高,模块间依赖复杂。
扩展困难:无法单独扩展某一模块,只能整体扩容。
部署风险高:改一个模块,必须重新打包整个应用,风险和发布成本大。
技术栈单一:整个系统只能用一种技术栈。
二、垂直架构(Vertical Architecture)
a. 解决了单体架构的问题:
故障隔离:如果 A、B 模块出现故障,C 和 D 模块依然可以正常运行,不会被影响。
独立扩展:如果 A、B 模块性能成为瓶颈,可以单独对 A 和 B 进行扩容,而不需要同时扩容 C、D,从而节省资源。
b. 遇到的问题:
功能重复:由于每个应用(如 app1、app2)都是独立的,如果它们都需要某些通用功能(如登录功能 E),就必须在每个应用中分别实现一遍,造成代码冗余和维护成本增加。
概念
将单体应用按照 业务领域 拆分成多个独立应用(商城系统拆分为用户系统、商品系统、订单系统等)。
各应用之间通过 HTTP 接口或 RPC 调用 进行交互。
优点
各业务系统相对独立,降低耦合。
每个应用可独立开发、部署,迭代速度更快。
可以使用不同的技术栈(例如:支付服务用 Java,推荐服务用 Python)。
缺点
系统间调用通过网络,性能较单体架构低。
数据库通常还是分散不彻底(每个应用一个库),跨系统事务和一致性难以保证。
系统数量增多,运维成本提高。
三、分布式架构(Distributed Architecture)
a. 解决了垂直架构的问题:
- 在垂直架构的基础上,将通用的 登录功能 E 抽取出来,作为一个独立服务提供。这样,app1 和 app2 不再需要各自实现登录逻辑,而是通过远程调用共享的服务 E 来完成登录。
b. 遇到的问题:
服务耦合度高:如果服务 E 发生变化(例如 IP 地址或端口修改),那么所有调用 E 的应用(如 app1、app2)都需要同时修改调用配置,维护成本高,灵活性不足。
概念
系统被拆分为多个 分布式节点,通过 远程调用(RPC/消息队列/HTTP) 进行通信。
强调通过 水平扩展 来应对高并发和大数据量。
包括:应用分布式、数据库分布式、缓存分布式等。
优点
系统可以水平扩展,支撑更高的并发和数据量。
各服务相对独立,故障影响范围比单体小。
可结合缓存、负载均衡、消息队列提高性能和可用性。
缺点
分布式事务复杂(CAP 理论:一致性、可用性、分区容错无法兼得)。
调用链复杂,服务间依赖多,排错困难。
网络通信带来延迟和失败风险。
运维和治理复杂,需要监控、熔断、限流等机制。
四、SOA 架构(Service-Oriented Architecture)
a. 解决了分布式架构的问题:
1. 采用经典遇到问题的思路:遇到问题就加一层。
2. 具体做法是:在服务之间引入 ESB(企业服务总线) 作为中间层,避免服务间的直接调用。
3.例如:如果服务 A 需要调用服务 D,它不必关心 D 的 IP 或端口,只需要向 ESB 发出“我要调用 D”的请求。由 ESB 负责将请求路由到 D。这样一来,即使 D 的地址或端口发生变化,也只需要在 ESB 中进行配置修改,而不需要逐一修改所有依赖 D 的服务代码,从而极大降低了系统的耦合性和维护成本。
b. ESB(Enterprise Service Bus,企业服务总线)
是什么:SOA 的核心中间件,本质上是“服务调用的中转站”。
作用:
提供服务路由、协议转换、数据格式转换、安全校验。
解决了“服务之间直接调用带来的耦合问题”。
特点:
中心化:所有请求必须经过 ESB。
优点:减少耦合,服务变更对调用方透明。
缺点:性能瓶颈、单点风险,运维复杂。
c. Dubbo 与 SOA的关系
最初:Dubbo 是阿里巴巴在 SOA 浪潮下开发的 RPC 框架。
在 SOA 里,Dubbo 提供:
服务注册/发现(通常用 Zookeeper)。
服务调用(高性能 RPC)。
服务治理(负载均衡、容错等)。
所以说:Dubbo 是 SOA 技术体系中的一个实现工具。
- d. Dubbo 与微服务的关系
- 后来:随着微服务理念(去中心化、轻量化、自治化)的兴起,Dubbo 也顺势演进。
特点:
天生就是 去中心化直连(不依赖 ESB)。
加上 Spring Boot / Spring Cloud Alibaba 生态,Dubbo 可以直接用来做 微服务框架。
所以:Dubbo 也可以看作是微服务架构的一种实现方式。
概念
面向服务的架构:将业务功能抽象为独立的“服务”,通过 ESB(企业服务总线) 或其他中间件统一管理服务通信。
服务通常是 粗粒度 的(如“订单服务”、“支付服务”),强调服务复用。
优点
服务复用:不同系统可调用相同服务。
统一标准:通过 ESB 管理服务接口,减少系统间耦合。
易于集成:企业内部不同系统(财务、ERP、CRM)可通过 SOA 对接。
缺点
ESB 可能成为性能瓶颈和单点故障。
服务粒度大,灵活性不足。
实现和治理成本高,适合大型企业。
相比微服务,SOA 偏重“系统集成”而不是“灵活扩展”。
五、微服务架构(Microservices Architecture)
a. 解决了分布式架构的问题:
在 SOA 思想基础上演进而来,去中心化:不依赖单一 ESB,而是通过服务注册发现、API 网关等轻量化机制治理。
将服务划分得更加细粒度(例如“订单查询服务”、“订单支付服务”分开)。
强调 轻量级通信(HTTP REST、gRPC、消息队列),避免复杂的 ESB。
微服务就是SOA做的升华
b. Dubbo 与 SOA的关系
最初:Dubbo 是阿里巴巴在 SOA 浪潮下开发的 RPC 框架。
在 SOA 里,Dubbo 提供:
服务注册/发现(通常用 Zookeeper)。
服务调用(高性能 RPC)。
服务治理(负载均衡、容错等)。
所以说:Dubbo 是 SOA 技术体系中的一个实现工具。
- c. Dubbo 与微服务的关系
- 后来:随着微服务理念(去中心化、轻量化、自治化)的兴起,Dubbo 也顺势演进。
特点:
天生就是 去中心化直连(不依赖 ESB)。
加上 Spring Boot / Spring Cloud Alibaba 生态,Dubbo 可以直接用来做 微服务框架。
所以:Dubbo 也可以看作是微服务架构的一种实现方式。
概念
在 SOA 的基础上演变而来。
将系统拆分为 更细粒度 的服务,每个服务只负责一个小功能(例如:订单查询、订单支付分成两个服务)。
服务之间通过 轻量级通信(HTTP REST、gRPC、消息队列) 交互。
每个微服务可独立部署、扩展、运维。
优点
高扩展性:可根据不同服务的负载独立扩容。
高灵活性:不同服务可用不同语言、数据库、技术栈。
故障隔离:某个服务挂了,不影响整个系统。
快速迭代:小团队可独立开发不同服务。
缺点
服务数量庞大,治理复杂。
分布式系统问题严重:网络延迟、分布式事务、数据一致性。
运维成本高:需要服务注册发现、配置中心、监控、链路追踪等支持。
部署和测试难度大。
六、 ESB、SOA、Dubbo、Zookeeper、微服务的关系
(1) SOA(Service Oriented Architecture,面向服务架构)
是什么:一种架构思想,把系统功能拆分为不同的服务,通过服务接口交互。
目标:服务复用、降低耦合、提高灵活性。
实现方式:通常依赖 ESB(企业服务总线) 来进行服务间通信与治理。
(2) ESB(Enterprise Service Bus,企业服务总线)
是什么:SOA 的核心中间件,本质上是“服务调用的中转站”。
作用:
提供服务路由、协议转换、数据格式转换、安全校验。
解决了“服务之间直接调用带来的耦合问题”。
特点:
中心化:所有请求必须经过 ESB。
优点:减少耦合,服务变更对调用方透明。
缺点:性能瓶颈、单点风险,运维复杂。
(3) Dubbo
是什么:阿里开源的 高性能 RPC 框架,最早用于 SOA 架构,现在也支持微服务生态。
作用:
提供服务调用(RPC,二进制协议)。
服务治理(负载均衡、容错、限流)。
配合注册中心(Zookeeper/Nacos)做服务发现。
和 ESB 的区别:
Dubbo 不走 ESB 这种中心化模式,而是 去中心化直连(服务通过注册中心发现对方,直接调用)。
更贴近 微服务的理念。
(4) Zookeeper
是什么:一个 分布式协调服务,常用作 注册中心。
在 Dubbo 中的角色:
Dubbo 服务启动时,会把自己注册到 Zookeeper。
消费者通过 Zookeeper 查找提供者,之后 直连调用。
不是 ESB:它不转发请求,只负责服务注册与发现。
(5) 微服务(Microservices)
是什么:一种比 SOA 更轻量化的架构思想,把系统拆分为小而自治的服务。
特点:
去中心化:没有 ESB,服务点对点调用。
每个服务独立开发、部署、扩展。
通常结合 Spring Cloud、Dubbo+Nacos/Zookeeper、gRPC 来实现。
和 SOA 的关系:
可以看作是 SOA 的进化版,避免了 ESB 的中心化弊端。
微服务更强调自治、轻量、DevOps。
(6) 关系对比表
名称 定义/定位 是否中心化 在体系中的角色 和其他关系 SOA 架构思想 ✅ 依赖 ESB 把系统拆成服务 倾向于用 ESB 来管理服务调用 ESB 中间件(SOA 核心组件) ✅ 中心化 服务调用中转、协议适配 是 SOA 的实现方式之一 Dubbo RPC 框架 ❌ 去中心化 服务调用+治理 SOA/微服务的技术实现,不依赖 ESB Zookeeper 分布式协调服务 ❌ 去中心化 注册中心(服务注册/发现) Dubbo 常用 Zookeeper 做注册中心 微服务 架构思想 ❌ 去中心化 系统拆分为自治小服务 可以用 Dubbo+Zookeeper/Nacos 实现
(7) 一句话总结
SOA + ESB = 早期的服务化方案(中心化,总线治理)。
Dubbo + Zookeeper = 去中心化的服务化方案,更接近微服务。
微服务 = SOA 的演进,强调去中心化和自治,常用 Dubbo/Spring Cloud 来落地。
ESB ≠ Zookeeper:ESB 是“总线转发”,Zookeeper 是“注册中心”。
七、 架构演变路径总结
单体架构
初创项目、小型系统,快速上线。
垂直架构
用户量和功能增多后,按业务垂直拆分成多个应用。
分布式架构
用户规模进一步扩大,需要水平扩展,解决性能和高可用问题。
SOA 架构
大型企业内部系统集成需求,借助 ESB 统一管理服务。
微服务架构
在互联网高并发和快速迭代场景下兴起,强调小而独立的服务,配合 DevOps、容器化(Docker、K8s)进行治理。
📌 一句话记忆
单体:所有功能都在一起。
垂直:按业务拆分成多个独立应用。
分布式:系统节点化,解决性能和扩展问题。
SOA:面向服务,ESB 统一管理。
微服务:服务粒度更小,更灵活,配合现代云原生技术。