返回知识库

软考

在游戏中攻打此考点

微服务与分布式系统深化

微服务拆分 DDD / 注册发现 Eureka·Nacos·Consul·ZooKeeper / 网关 / 熔断 Hystrix·Sentinel / 限流(令牌桶·漏桶·滑动窗口)/ 负载均衡(一致性哈希)/ 分布式事务 7 方案 + Seata 4 模式 / 消息队列 / Service Mesh

软考微服务分布式限流熔断分布式事务SeataService Mesh真题论文

一句话定位

2024-2025 真题显示微服务 + 分布式事务 + 秒杀限流是案例与论文新主战场——本篇把限流算法、Seata 4 模式、一致性哈希等细节落成可默写的对比表 + 答题套路。

NOTE

本篇是 05-new-tech-web-arch.mdx 的”微服务深化版”。事实据教材第 2 版 + 2020-2025 真题核对(2026-07-29)。

A. 微服务拆分原则(论文级深度)

A1 单体 vs 微服务对比

维度单体微服务
部署一个包多个独立服务
扩展整体复制按需独立扩展
技术栈统一灵活(每服务一栈)
数据共享 DB每服务独立 DB
团队大团队小团队自治(2-pizza)
故障一处故障全局故障隔离
复杂度业务复杂度分布式复杂度(运维/网络/一致性)
测试简单难(端到端)

A2 DDD 战术设计

概念含义
限界上下文 Bounded Context模型边界,每个微服务对应一个
子域 Subdomain核心子域(业务核心)/ 支持子域(辅助)/ 通用子域(通用如认证)
上下文映射 Context Mapping多上下文关系:合作 Partnership / 共享内核 Shared Kernel / 客户-供应商 Customer-Supplier / 防腐层 ACL

A3 拆分原则

  • 单一职责:一个服务一个业务能力
  • 限界上下文:明确边界,避免跨服务调用爆炸
  • 业务能力:按业务流程拆(如订单/支付/库存)
  • 数据自治:每服务独立 DB
  • 粒度权衡:过粗 = 单体;过细 = 运维爆炸(“纳米服务”反模式)

A4 适用 vs 不适用

适用不适用
业务边界清晰业务简单(CRUD)
团队规模 > 10团队 < 5
需独立扩展(部分服务高负载)全系统低负载
多技术栈需求单一技术栈足够

B. 服务注册与发现(必考 1 题)

B1 客户端发现 vs 服务端发现

模式说明代表
客户端发现客户端查注册中心,自己负载均衡Netflix Ribbon + Eureka
服务端发现客户端请求路由器/网关,由其转发Nginx + Consul / K8s Service

B2 主流注册中心对比(必考)

注册中心CAP一致性算法特点适用
ZooKeeperCPZAB强一致;不适合大规模服务发现(性能瓶颈)Hadoop/Kafka 协调
EurekaAPPeer-to-Peer 复制高可用;自我保护模式;Spring Cloud 默认大规模服务发现
ConsulCPRaft强一致 + 健康检查 + KV + 多 DC多数据中心
NacosAP/CP 可切换(默认 AP)Distro + Raft注册 + 配置中心一体化;阿里开源Spring Cloud Alibaba
etcdCPRaftK8s 底层存储K8s 生态

B3 关键机制

  • 心跳:服务定期发送心跳(默认 30s)
  • 自我保护模式(Eureka):15 分钟内心跳丢失 > 85%,Eureka 不再剔除实例(防止网络分区误删)
  • 健康检查:Consul HTTP/TCP/Script
  • 服务下线:主动注销 + 超时被动剔除

B4 真题举一反三

2022-11 综合:Eureka 属于哪类 CAP?

  • 解:AP(高可用优先)

2025-11 综合:某电商需高可用注册中心,网络分区时仍可查询服务,应选?

  • 解:Nacos(AP 模式)Eureka

C. API 网关(高频)

C1 核心功能

功能说明
路由转发按路径转发到后端服务
鉴权 AuthenticationJWT / OAuth2 校验
限流 Rate Limiting令牌桶 / 漏桶
熔断 Circuit BreakerHystrix / Sentinel
日志监控访问日志 + 调用统计
协议转换HTTP ↔ gRPC ↔ WebSocket
负载均衡集成 Ribbon / LoadBalancer
响应聚合多服务结果合并(BFF 模式)

C2 典型实现

网关类型特点
Spring Cloud GatewayJavaSpring 生态主流;基于 Reactor
ZuulJavaNetflix;Zuul 1 同步、Zuul 2 异步
KongLua + Nginx插件丰富;高性能
Nginx + LuaC + Lua灵活;高并发
APISIXLua + Nginx国内开源;动态路由

C3 BFF(Backend for Frontend)

为不同前端(Web/Mobile/IoT)提供专属网关层,避免业务服务为多端适配。

D. 熔断降级(必考 1 题)

D1 熔断器三态

图 D1:熔断器三态转换
状态行为
Closed 闭合正常请求;统计错误率
Open 断开直接返回 fallback(不调下游);等待休眠期
Half-Open 半开允许少量试探请求;成功 → Closed,失败 → Open

D2 Hystrix vs Sentinel vs Resilience4j

工具厂商隔离方式特点
HystrixNetflix(已停止维护)线程池 / 信号量老牌;fallback 机制
Sentinel阿里信号量流控 + 熔断 + 系统自适应 + 实时监控;Spring Cloud Alibaba
Resilience4j开源函数式风格受 Hystrix 启发,推荐替代

D3 熔断 vs 降级 vs 限流

IMPORTANT

三者区分 callout(必考)

  • 熔断 Circuit Breaker:依赖服务故障时断开保护本服务(不调下游,避免级联雪崩)
  • 降级 Degradation:本服务整体过载或非核心功能故障,牺牲非核心保核心(如关闭推荐/评论,保留下单)
  • 限流 Rate Limiting:请求超过阈值,拒绝部分请求(保系统不崩)

关系:熔断是降级的一种触发方式;限流是预防,熔断是事后保护。

D4 真题举一反三

2024-05 综合:Hystrix 熔断器在错误率达多少时打开?

  • 解:默认 50%(可配置)

2025-11 综合:某系统依赖服务故障,断开连接保护本服务,称为什么?

  • 解:熔断

E. 限流算法(必考 1 题)

E1 四种限流算法

算法原理优点缺点
固定窗口计数时间窗口内计数简单临界点双倍流量问题
滑动窗口 Sliding Window细化窗口降低临界平滑内存稍多
漏桶 Leaky Bucket恒定速率流出 + 桶满丢弃平滑输出不允许突发
令牌桶 Token Bucket恒定速率生成令牌 + 桶满丢弃允许突发实现略复杂

E2 漏桶 vs 令牌桶(高频对比)

IMPORTANT

漏桶 vs 令牌桶 callout

  • 漏桶:以恒定速率流出(处理请求),桶满则丢弃新请求 → 平滑输出,不允许突发
  • 令牌桶:以恒定速率生成令牌,请求必须取到令牌才处理;桶可累积令牌 → 允许突发流量(累积的令牌一次性消耗)

关键差异:突发流量处理能力。令牌桶更适合实际业务(秒杀等突发场景)。

E3 实现

实现说明
Nginx limit_req漏桶
Sentinel滑动窗口 + 令牌桶
Guava RateLimiter令牌桶
Redis + Lua分布式限流

E4 真题举一反三

2021-11 综合:限流算法中允许突发流量的是?

  • 解:令牌桶

2024-11 综合:滑动窗口相比固定窗口的优势?

  • 解:降低临界点双倍流量问题

F. 负载均衡(必考 1 题)

F1 客户端负载 vs 服务端负载

类型说明代表
客户端负载客户端从注册中心拉取实例列表,自己选Ribbon / Spring Cloud LoadBalancer
服务端负载客户端请求负载均衡器,由其转发Nginx / F5 / LVS

F2 算法对比

算法原理优缺点
轮询 Round Robin依次轮流简单;不考虑性能差异
加权轮询 Weighted RR按权重分配适合异构集群
最少连接 Least Connections选当前连接最少适合长连接
源地址哈希 IP Hash同 IP 固定后端会话保持;不均
一致性哈希 Consistent Hash环空间 + 虚拟节点节点增减影响小;缓存友好
最短响应时间选响应最快性能最优;监控开销

F3 一致性哈希

IMPORTANT

一致性哈希原理 callout

  1. 环空间:哈希值 0 ~ 2³²⁻¹ 排成环
  2. 节点入环:每节点哈希到环上某位置
  3. 数据路由:数据 key 哈希 → 顺时针找最近节点
  4. 虚拟节点:解决数据倾斜(节点少时不均);每物理节点对应 100~200 个虚拟节点
  5. 节点增减:只影响相邻段数据,其他不动(vs 简单哈希需全部重新映射)

F4 L4 vs L7 负载

基于代表特点
L4 传输层IP + 端口LVS / F5性能高;不解析协议
L7 应用层HTTP 头 / URL / CookieNginx / HAProxy灵活;解析开销

F5 真题举一反三

2023-05 综合:一致性哈希相比简单哈希的优势?

  • 解:节点增减时只影响相邻段,不全部重新映射

2025-05 综合:某场景需保持用户会话与同一后端绑定,应选?

  • 解:IP Hash 或 一致性哈希

G. 分布式事务(论文最高频)

G1 理论基础

详见 云原生大数据AI深化 §K CAP/BASE

  • CAP:C/A/P 三选二
  • BASE:基本可用 / 软状态 / 最终一致

G2 分布式事务 7 方案对比表(核心必背)

方案一致性性能复杂度业务侵入适用场景
2PC 两阶段提交强一致数据库 XA
3PC 三阶段提交强一致减阻塞
TCC Try-Confirm-Cancel最终一致(需 3 方法)高并发金融
Saga 长事务最终一致中(补偿)长流程业务
本地消息表最终一致跨服务异步
事务消息(RocketMQ)最终一致消息驱动
最大努力通知最终一致第三方回调

G3 2PC(强一致)

两阶段

  1. Prepare:协调者问所有参与者”能否提交”,参与者锁资源回 Yes/No
  2. Commit/Rollback:全部 Yes → Commit;任一 No → Rollback

缺点

  • 同步阻塞
  • 协调者单点
  • 脑裂(部分参与者 Commit 部分未收到)

G4 TCC(业务侵入)

  • Try:预留资源(如冻结余额)
  • Confirm:实际提交(扣减冻结)
  • Cancel:回滚(解冻)

优点:性能好(无全局锁) 缺点:业务侵入大(每接口需写 3 版本)

G5 Saga(长事务)

  • 把长事务拆为一系列短事务 T1, T2, …, Tn
  • 每个短事务有对应补偿事务 C1, C2, …, Cn
  • 失败时反向执行已成功事务的补偿

适用:旅行预订(订机票→订酒店→租车,任一失败都需补偿)

G6 本地消息表

业务表更新 + 消息表插入(同一本地事务)→ 消息发送(异步)
失败重试 → 消息接收方幂等处理

优点:实现简单、可靠 缺点:消息表需维护

G7 Seata 4 模式(必考)

模式原理一致性业务侵入适用
AT 模式(默认)自动二阶段 + undo_log 回滚最终一致(弱)(自动)大多数业务
TCC 模式手动 Try/Confirm/Cancel最终一致高并发金融
Saga 模式长流程 + 补偿最终一致业务流程长
XA 模式依赖 DB XA强一致数据库层

G8 Seata 三角色

角色说明
TC Transaction Coordinator事务协调者(独立部署,Seata-Server)
TM Transaction Manager事务管理器(发起方,标注 @GlobalTransactional)
RM Resource Manager资源管理器(每个微服务,管理本地资源)

G9 选型决策树

IMPORTANT

分布式事务选型决策树 callout

强一致 → XA / 2PC(性能差,少用)
高并发金融最终一致 → TCC(业务侵入大)
长流程业务 → Saga(补偿)
简单跨服务异步 → 本地消息表 / 事务消息
第三方回调 → 最大努力通知
默认推荐 → Seata AT(无侵入)

G10 真题举一反三

2024-11 论文:论分布式事务及其解决方案

  • 解:需覆盖 2PC、TCC、Saga、本地消息表、Seata

2025-11 综合:Saga 相比 TCC 的特点?

  • 解:Saga 无需冻结状态,靠补偿;适合长流程

H. 消息队列

H1 主流 MQ 对比

MQ厂商特点适用
KafkaLinkedIn/Apache高吞吐、日志、流处理、分区有序大数据、日志、流
RocketMQ阿里/Apache事务消息、金融级、低延迟电商交易
RabbitMQErlang路由丰富、AMQP业务消息、复杂路由
PulsarApache计算/存储分离、多租户云原生

H2 消息可靠性

维度机制
生产端同步发送确认 / 异步回调 / 失败重试
存储持久化(写盘 + 副本)
消费端手动 ACK;失败重试 / 死信队列 DLQ
顺序性单分区;业务 key 哈希到同分区

H3 三种消息语义

语义说明实现
at-most-once 至多一次可能丢失发即忘
at-least-once 至少一次可能重复ACK + 重试
exactly-once 精确一次不丢不重幂等生产 + 事务(Kafka 0.11+)

H4 MQ 三大作用

  • 削峰:突发流量入队,消费端按自己节奏处理
  • 解耦:生产者不需要知道消费者
  • 异步:非核心流程异步处理(发短信、记日志)

H5 真题举一反三

IMPORTANT

2023-11 案例:电商下单后库存扣减失败如何兜底 答:使用 RocketMQ 事务消息 + 本地消息表 + 消费者幂等;半消息 → 本库事务 → commit/rollback → 消费端失败重试 + 死信队列。

NOTE

2024-05 综合:以下关于 Kafka exactly-once 正确的是 B. 通过幂等 Producer + 事务实现。0.11+ 引入事务语义;其余选项常考分区有序、Consumer Group 再平衡。

I. 配置中心

I1 主流配置中心

实现厂商特点
Apollo携程实时推送(HTTP 长轮询)、多环境、灰度发布
Nacos阿里注册+配置一体化、AP/CP 切换
Spring Cloud ConfigPivotal基于 Git/SVN,需配合 Bus 推送

I2 配置推送机制

  • 长轮询 Long Polling(Apollo):客户端请求挂起,服务端有变更立即返回
  • 推送 Push:服务端主动推(需保持长连接)
  • 拉取 Pull:客户端定时拉取(延迟大)

I3 真题举一反三

IMPORTANT

2024-11 案例:微服务多环境配置热更新方案 推荐 Nacos/Apollo:①支持热更新(无需重启)②支持灰度/回滚 ③支持多环境隔离(dev/test/prod)④权限审计。

J. 链路追踪与可观测性

J1 OpenTracing / OpenTelemetry

  • OpenTracing:调用链标准(已合并入 OpenTelemetry)
  • OpenTelemetry:CNCF 标准,统一指标 + 日志 + 链路

J2 核心概念

概念含义
Trace一次完整请求链路
Span一次操作(Trace 含多 Span)
Context跨服务传播(HTTP Header / RPC Context)

J3 主流实现

实现特点
SkyWalking(Apache,国产)字节码注入、Java Agent、UI 强大
ZipkinTwitter 开源、轻量
JaegerCNCF、Uber 开源

J4 可观测性三支柱

  • 日志 Logging:事件记录(ELK / Loki)
  • 指标 Metrics:数值聚合(Prometheus)
  • 链路 Tracing:请求路径(SkyWalking)

J5 真题举一反三

NOTE

2024-05 综合:可观测性三支柱是 日志 + 指标 + 链路。三者配合实现”故障发现→定位→根因”闭环。

K. 服务网格 Service Mesh

K1 Sidecar 模式

Pod:
  ├─ 业务容器(应用代码)
  └─ Sidecar 容器(Envoy,代理所有进出流量)
  • 业务代码无感知网络(无 SDK)
  • 所有流量经 Sidecar,可统一治理

K2 数据面 + 控制面

平面实现职责
数据面 Data PlaneEnvoy / Linkerd-proxy实际流量代理(路由/负载/熔断)
控制面 Control PlaneIstiod / Linkerd配置下发、证书管理、策略

K3 Istio 核心能力

能力说明
流量管理路由规则、负载、灰度(VirtualService + DestinationRule)
安全mTLS 双向认证、授权策略
可观测指标、链路、访问日志
策略执行限流、熔断(与 SDK 解耦)

K4 Service Mesh vs SDK 模式

维度SDKService Mesh
侵入性高(业务代码依赖)(Sidecar)
语言单语言多语言
升级改业务代码重发改 Sidecar 即可
性能直接多一跳(Sidecar)

K5 真题举一反三

2025-05 综合:Service Mesh 的核心模式?

  • 解:Sidecar 模式(数据面与业务容器同 Pod)

L. 反查表

考点关键对比真题锚点
单体 vs 微服务部署/扩展/数据2024-11 论文§A
DDD 限界上下文服务边界2025-05 案例§A2
注册中心 CAPZK=CP / Eureka=AP2022-11, 2025-11§B
Eureka 自我保护心跳丢失 85% 不剔除2023-11§B
网关功能路由/鉴权/限流/熔断2023-11§C
熔断器三态Closed/Open/Half-Open2024-05, 2025-11§D
熔断 vs 降级 vs 限流断保护/牺牲非核心/拒部分2025-11§D3
漏桶 vs 令牌桶不允许突发 vs 允许2021-11, 2024-11§E
滑动窗口优势降低临界问题2024-11§E
一致性哈希环空间 + 虚拟节点2023-05, 2025-05§F
L4 vs L7端口 vs URL/Header综合§F
2PC 缺点阻塞/单点/脑裂2022-05§G3
TCC 业务侵入Try/Confirm/Cancel2024-11 论文§G4
Saga 补偿长流程反向补偿2025-11§G5
本地消息表业务+消息同事务2024-11 论文§G6
Seata 4 模式AT/TCC/Saga/XA2024-11 论文§G7
Seata 三角色TC/TM/RM2025-11§G8
Kafka vs RocketMQ高吞吐 vs 事务综合§H
三种消息语义at-most/least/exactly-once2024-05§H3
Apollo 长轮询实时推送综合§I
可观测三支柱日志/指标/链路2025-11§J4
SkyWalkingJava Agent 字节码注入综合§J3
Service Mesh Sidecar数据面与业务同 Pod2025-05§K
Istio 控制面Istiod综合§K2

记忆口诀 / 易错点汇总

  1. CAP 选型:ZK=CP,Eureka=AP,Nacos=AP/CP 可切
  2. 熔断 vs 降级 vs 限流:断/弃/拒
  3. 限流:固定→临界;滑动→平滑;漏桶→恒速;令牌桶→突发
  4. 一致性哈希:环 + 顺时针 + 虚拟节点
  5. 分布式事务:强一致→2PC/XA;最终一致→TCC/Saga/消息表
  6. Seata 4 模式:AT 默认 / TCC 高并发 / Saga 长流程 / XA 强一致
  7. Service Mesh:Sidecar + 数据面 + 控制面

TIP

避坑建议

  • 熔断 ≠ 降级 ≠ 限流——三者区分必考
  • 漏桶 vs 令牌桶核心差异是”是否允许突发”
  • TCC 业务侵入大,需为每接口写 3 版本
  • Saga 与 TCC 区别:Saga 无冻结状态,靠补偿

交叉引用

本系列笔记

主计划文档

详见 主计划 §3.9 新技术与 Web 架构 的对应内容。

外部延伸

  • 官方教材:《系统架构设计师教程(第 2 版)》§3.9
  • 经典著作:Sam Newman《Building Microservices》《Microservices Patterns》
  • 真题练习:2020-2025 综合+案例+论文

自测题

  1. CAP:ZooKeeper/Eureka/Nacos 分别属于哪类?(答:CP/AP/AP-CP 可切)
  2. 限流:突发流量应选漏桶还是令牌桶?(答:令牌桶)
  3. 熔断:Hystrix 熔断器三态及其转换条件?
  4. 分布式事务:TCC 三个阶段是什么?相比 Saga 的优劣?
  5. Seata:4 种模式与适用场景?
  6. Service Mesh:Sidecar 模式与 SDK 模式的区别?

IMPORTANT

如果只能”看着面熟”但说不出来,说明还没真正掌握,建议回看对应章节并多做真题。


下一篇导引云原生 + 大数据 + AI + 区块链深化 将讲述 Docker / K8s 全组件 / Serverless / Spark-Flink / 湖仓一体 / CAP / AI / 区块链,覆盖 2024-2025 命题新趋势。