微服务架构 Microservices
论文最常作主线题之一,案例也常考。务必能 画出整体架构 + 解释 6 大核心组件
一、定义与核心特征
微服务(Microservices)是一种把应用拆分为一组小而自治的服务,每个服务围绕业务能力构建、独立部署、独立技术栈,通过轻量协议(REST/gRPC/消息)通信。
6 大核心特征
- 单一职责:每个服务做一件事
- 独立部署 / 独立进程
- 去中心化数据管理:每个服务有独立数据库
- 轻量级通信:REST / gRPC / MQ
- 去中心化治理:技术栈自由
- 容错与弹性:熔断、限流、降级
口诀:"单·独·去·轻·治·弹"
二、微服务 6 大核心组件 ⭐⭐⭐
[客户端 / App]
│
[API 网关] ← 鉴权·限流·路由·聚合
│
┌────┬────┼────┬────┐
[服务A][服务B][服务C][服务D] ← 独立部署
│ │
[服务注册中心] [配置中心]
[链路追踪] [集中日志]
[熔断/限流] [服务监控]
| 组件 | 作用 | 常见实现 |
|---|---|---|
| API 网关 | 统一入口、鉴权、限流、协议转换、聚合 | Spring Cloud Gateway、Kong、Zuul |
| 服务注册与发现 | 服务上下线动态感知 | Eureka、Nacos、Consul、ZooKeeper |
| 配置中心 | 统一管理多环境/多服务配置 | Apollo、Nacos、Spring Cloud Config |
| 熔断 / 限流 / 降级 | 故障隔离、保护后端 | Hystrix、Sentinel、Resilience4j |
| 链路追踪 | 跨服务调用可视化 | SkyWalking、Zipkin、Jaeger |
| 集中日志 | 统一收集、查询日志 | ELK、EFK、Loki |
三、微服务 vs SOA vs 单体 ⭐⭐⭐
| 对比项 | 单体 | SOA | 微服务 |
|---|---|---|---|
| 粒度 | 整体 | 粗粒度 | 细粒度 |
| 通信 | 函数调用 | ESB 总线 | API 网关 + REST/gRPC |
| 数据库 | 共享 | 多数共享 | 独立(每服务一库) |
| 部署 | 一起部署 | 统一部署 | 独立部署 |
| 技术栈 | 统一 | 受限 | 自由 |
| 治理 | 无 | 集中(ESB) | 去中心化 |
四、优缺点(必背)
优点
- 独立部署 → 迭代快
- 技术栈自由
- 故障隔离
- 按需弹性伸缩
- 易于团队并行开发
- 易于复用、可替换
缺点
- 分布式复杂度高
- 数据一致性挑战
- 运维成本高(需 DevOps)
- 服务间通信开销
- 测试与调试困难
- 需基础设施成熟(K8s)
五、核心难点与对策
1. 服务拆分原则
- 领域驱动设计(DDD):按业务子域、限界上下文拆分
- 单一职责、高内聚低耦合
- 合适的粒度:不要过细(分布式陷阱)也不能过粗(失去微服务意义)
2. 分布式事务
- 2PC / 3PC:强一致,性能差
- TCC:Try-Confirm-Cancel,业务侵入大
- Saga:长事务,通过补偿事务回滚
- 本地消息表 / 可靠消息:最终一致
- 事件驱动:最终一致 + EDA
3. 数据一致性 —— CAP / BASE
CAP一致性(C)+ 可用性(A)+ 分区容忍(P),只能选 2
BASE基本可用(BA)+ 软状态(S)+ 最终一致(E)
4. 服务容错(熔断 / 限流 / 降级)
- 熔断:连续失败达阈值,直接拒绝,防雪崩
- 限流:令牌桶、漏桶、滑动窗口
- 降级:返回兜底响应、关闭次要功能
- 隔离:线程池 / 信号量隔离
5. 服务通信
- 同步:REST、gRPC
- 异步:Kafka、RabbitMQ、RocketMQ
- 选型:核心链路用同步,非核心 / 解耦 / 削峰用异步
六、答题模板
题型:为什么要从单体改造为微服务?
三段式:
- 单体痛点:代码膨胀、迭代慢、技术栈固化、单点故障
- 微服务收益:独立部署、独立扩展、故障隔离、技术栈自由、易于团队并行
- 风险与对策:分布式复杂度 → 用 K8s / 服务网格;数据一致性 → 用 Saga / 消息;运维 → DevOps + CI/CD
题型:微服务拆分原则是什么?
- 按业务能力(DDD 限界上下文)
- 单一职责、高内聚低耦合
- 合适粒度
- 独立数据存储
- 团队自治(亚马逊"两个披萨"原则)
七、必背口诀
6 大特征:单·独·去·轻·治·弹
6 大组件:网关 · 注册 · 配置 · 熔限降 · 链路 · 日志
分布式事务:2PC · TCC · Saga · 消息表 · 事件驱动
容错三宝:熔断 + 限流 + 降级
📝 论文得分点
论文中谈微服务,务必带上 具体技术栈(Spring Cloud / K8s / Nacos / Sentinel),并给出 量化数据(QPS 提升 N 倍、上线频次提升)。
📗 高频专题 · 微服务架构 完