分布式微服务--单体架构 ,垂直架构 ,分布式架构 ,SOA ,微服务 以及他们之间的演变过程

前言、架构的演进

一、 单体架构(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,企业服务总线)

    1. 是什么:SOA 的核心中间件,本质上是"服务调用的中转站"。

    2. 作用

      1. 提供服务路由、协议转换、数据格式转换、安全校验。

      2. 解决了"服务之间直接调用带来的耦合问题"。

    3. 特点

      1. 中心化:所有请求必须经过 ESB。

      2. 优点:减少耦合,服务变更对调用方透明。

      3. 缺点:性能瓶颈、单点风险,运维复杂。

  • **c.**Dubbo 与 SOA的关系

    1. 最初 :Dubbo 是阿里巴巴在 SOA 浪潮下开发的 RPC 框架。

    2. 在 SOA 里,Dubbo 提供:

      1. 服务注册/发现(通常用 Zookeeper)。

      2. 服务调用(高性能 RPC)。

      3. 服务治理(负载均衡、容错等)。

    3. 所以说:Dubbo 是 SOA 技术体系中的一个实现工具

  • **d.**Dubbo 与微服务的关系

    1. 后来 :随着微服务理念(去中心化、轻量化、自治化)的兴起,Dubbo 也顺势演进。

    2. 特点:

      • 天生就是 去中心化直连(不依赖 ESB)。

      • 加上 Spring Boot / Spring Cloud Alibaba 生态,Dubbo 可以直接用来做 微服务框架

    3. 所以:Dubbo 也可以看作是微服务架构的一种实现方式


​​​​​概念

  • 面向服务的架构 :将业务功能抽象为独立的"服务",通过 ESB(企业服务总线) 或其他中间件统一管理服务通信。

  • 服务通常是 粗粒度 的(如"订单服务"、"支付服务"),强调服务复用。

优点

  • 服务复用:不同系统可调用相同服务。

  • 统一标准:通过 ESB 管理服务接口,减少系统间耦合。

  • 易于集成:企业内部不同系统(财务、ERP、CRM)可通过 SOA 对接。

缺点

  • ESB 可能成为性能瓶颈和单点故障。

  • 服务粒度大,灵活性不足。

  • 实现和治理成本高,适合大型企业。

  • 相比微服务,SOA 偏重"系统集成"而不是"灵活扩展"。


五、微服务架构(Microservices Architecture)

a. 解决了分布式架构的问题:

在 SOA 思想基础上演进而来,去中心化:不依赖单一 ESB,而是通过服务注册发现、API 网关等轻量化机制治理。

将服务划分得更加细粒度(例如"订单查询服务"、"订单支付服务"分开)。

强调 轻量级通信(HTTP REST、gRPC、消息队列),避免复杂的 ESB。

微服务就是SOA做的升华

  • **b.**Dubbo 与 SOA的关系

    1. 最初 :Dubbo 是阿里巴巴在 SOA 浪潮下开发的 RPC 框架。

    2. 在 SOA 里,Dubbo 提供:

      1. 服务注册/发现(通常用 Zookeeper)。

      2. 服务调用(高性能 RPC)。

      3. 服务治理(负载均衡、容错等)。

    3. 所以说:Dubbo 是 SOA 技术体系中的一个实现工具

  • c. Dubbo 与微服务的关系

    1. 后来 :随着微服务理念(去中心化、轻量化、自治化)的兴起,Dubbo 也顺势演进。

    2. 特点:

      • 天生就是 去中心化直连(不依赖 ESB)。

      • 加上 Spring Boot / Spring Cloud Alibaba 生态,Dubbo 可以直接用来做 微服务框架

    3. 所以: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 是"注册中心"。

七、 架构演变路径总结

  1. 单体架构

    • 初创项目、小型系统,快速上线。
  2. 垂直架构

    • 用户量和功能增多后,按业务垂直拆分成多个应用。
  3. 分布式架构

    • 用户规模进一步扩大,需要水平扩展,解决性能和高可用问题。
  4. SOA 架构

    • 大型企业内部系统集成需求,借助 ESB 统一管理服务。
  5. 微服务架构

    • 在互联网高并发和快速迭代场景下兴起,强调小而独立的服务,配合 DevOps、容器化(Docker、K8s)进行治理。

📌 一句话记忆

  • 单体:所有功能都在一起。

  • 垂直:按业务拆分成多个独立应用。

  • 分布式:系统节点化,解决性能和扩展问题。

  • SOA:面向服务,ESB 统一管理。

  • 微服务:服务粒度更小,更灵活,配合现代云原生技术。

相关推荐
CAE虚拟与现实10 小时前
华为的 4A 架构简介
服务器·华为·架构·4a架构
喜欢吃豆11 小时前
LangGraph 深度解析(三):构建可观测、交互式 AI 智能体的流式架构权威指南
人工智能·python·算法·架构·大模型
codergjw19 小时前
RabbitMQ篇
分布式·rabbitmq
半桶水专家19 小时前
Kafka Topic(主题)详解
分布式·kafka
戮戮20 小时前
MCP over SSE 通信过程详解:双通道架构下的高效对话
架构·大模型·mcp·大模型插件
蜡笔小柯南1 天前
每秒扛住10万请求?RedissonRateLimiter 分布式限流器详解
分布式·redisson·滑动窗口·ratelimiter
MySGDLife1 天前
微服务相关
微服务·架构
悟空聊架构1 天前
一次Feign超时引发的血案:生产环境故障排查全记录
运维·后端·架构
一行•坚书1 天前
Redisson分布式锁会发生死锁问题吗?怎么发生的?
java·分布式·后端