做题时经常看到”单体架构”“SOA”“微服务”混在一起出题,不把它们搞清楚,这3-5分就白白丢了。
这个考点考多少分?
单体/SOA/微服务的对比,在系统架构设计师选择题中每年必考,通常出现在综合知识的架构设计部分。
此外,案例分析和论文中也经常要求你”选择合适的架构风格”并说明理由。理解这三者的区别和演进关系,是整个架构师考试的基础。
核心对比:一张表搞定
| 维度 | 单体架构 | SOA(面向服务架构) | 微服务架构 |
|---|---|---|---|
| 部署方式 | 整体部署 | 服务独立部署 | 服务独立部署 |
| 通信方式 | 函数调用/方法调用 | ESB(企业服务总线) | REST API / 消息队列 |
| 耦合度 | 高(紧耦合) | 中(通过ESB解耦) | 低(完全松耦合) |
| 治理方式 | 无 | ESB统一治理 | API网关 + 服务注册发现 |
| 数据存储 | 共享数据库 | 可共享也可独立 | 每个服务独立数据库 |
| 粒度 | 粗(整个应用) | 中(业务服务级别) | 细(单一职责) |
| 技术栈 | 统一 | 可不同但受限 | 完全自由 |
| 治理复杂度 | 低 | 高(ESB是中心枢纽) | 中(去中心化治理) |
| 典型代表 | 传统SSH/SSM项目 | WebSphere/WebLogic | Spring Cloud / Dubbo |
一、单体架构
核心思想:所有功能模块打包在一起,作为一个整体部署运行。
┌────────────────────────────┐ │ 单体应用 │ │ ┌─────┬─────┬─────┐ │ │ │用户 │订单 │支付 │ ... │ │ │模块 │模块 │模块 │ │ │ └─────┴─────┴─────┘ │ │ 共享同一个数据库 │ └────────────────────────────┘优点:开发简单、部署简单、调试容易缺点:修改一处要全量部署、扩展性差、技术栈锁死、团队协作困难
适用场景:项目初期、业务简单、团队小
二、SOA(面向服务架构)
核心思想:将应用拆分为可复用的服务,通过ESB(企业服务总线)进行通信和集成。
┌─────┐ ┌─────┐ │服务A│───│ │───│服务C│ └─────┘ │ ESB │ └─────┘ ┌─────┐ │ │ ┌─────┐ │服务B│───│ │───│服务D│ └─────┘ └─────┘ └─────┘ESB的作用:
- 协议转换(SOAP/HTTP/JMS互转)
- 消息路由
- 服务编排
- 安全认证
优点:服务复用、异构系统集成能力强缺点:ESB成为单点瓶颈和单点故障、ESB部署维护成本高、服务间依赖ESB
适用场景:企业级应用集成、异构系统对接、大型企业IT架构
三、微服务架构
核心思想:在SOA基础上进一步拆小,每个服务独立部署、独立数据库、通过轻量级协议通信,去中心化治理。
┌──────────┐ ┌──────────┐ │ 用户服务 │ │ 订单服务 │ │ (独立DB) │ │ (独立DB) │ └────┬─────┘ └────┬─────┘ │ │ ┌────┴───────────────┴────┐ │ API 网关 / 消息队列 │ └──────────────────────────┘ │ │ ┌────┴─────┐ ┌────┴─────┐ │ 支付服务 │ │ 库存服务 │ │ (独立DB) │ │ (独立DB) │ └──────────┘ └──────────┘ ↑ 服务注册与发现(Nacos/Eureka/Consul)核心特征:
- 单一职责:每个服务只做一件事
- 独立部署:可以独立发布,不影响其他服务
- 独立数据库:每个服务有自己的数据存储
- 去中心化治理:没有统一的ESB,通过API网关+服务发现协调
- 轻量级通信:RESTful API / gRPC / 消息队列
优点:独立部署、技术栈自由、弹性伸缩、故障隔离缺点:分布式系统复杂性(网络延迟、数据一致性、服务治理)、运维成本高
适用场景:大规模互联网应用、需要快速迭代的业务
四、三者演进关系
单体架构 → SOA → 微服务,本质是从集中到分散、从紧耦合到松耦合的演进。
| 演进 | 解决的核心问题 | 引入的新问题 |
|---|---|---|
| 单体→SOA | 复用性差、系统僵化 | ESB单点瓶颈 |
| SOA→微服务 | ESB耦合、部署粒度大 | 分布式复杂性 |
不是越新越好!选择架构要看业务阶段:
- 初创期/业务简单 → 单体(快速上线)
- 企业集成/异构系统 → SOA
- 大规模/高并发/快速迭代 → 微服务
真题演练
【真题】关于微服务架构和SOA的对比,以下说法正确的是( )。
A. 微服务通过ESB进行服务间通信 B. SOA中每个服务通常拥有独立数据库 C. 微服务强调去中心化治理,服务之间通过轻量级协议通信 D. SOA比微服务更强调服务的细粒度拆分
答案解析:A. ESB是SOA的通信方式,微服务使用API网关/消息队列 B. SOA中服务通常共享数据库,微服务才强调独立数据库 C. 去中心化 + 轻量级通信是微服务的核心特征 D. 微服务比SOA更细粒度
正确答案:C
【真题】在系统架构演进过程中,从单体架构向微服务架构过渡,主要解决了单体架构的( )问题。
A. 安全性不足
B. 部署粒度过大,修改影响范围广
C. 数据存储能力不足
D. 用户界面不够美观
答案解析:单体架构的核心痛点是”牵一发而动全身”——改一个功能要全量部署。 微服务通过独立部署和服务拆分,让修改影响范围缩小到单个服务。
正确答案:B
以上内容都是我自己通过资料总结出来的,肯定有不足的地方也欢迎大家指正,咱们共同进步。