分布式系统与架构

面试官翻到简历上"负责过高并发分布式系统设计"这一行,开口问道:

"你们用的是什么一致性方案?强一致还是最终一致?为什么不用 2PC?"

候选人小张支支吾吾说了句"看场景",面试官眉头一皱,继续追问:"那你知不知道 2PC 有什么问题?为什么 Seata 选择了 AT 模式而不是 2PC?"

小张卡住了。

【架构权衡】 这道题背后考的不是背书,是候选人有没有真正在生产环境里权衡过一致性和可用性的取舍。能说清楚"为什么不用"而不是"用什么",才是 P7 和 P6 的分水岭。

分布式系统是现代后端工程师的核心战场,也是面试官最爱深挖的领域。从理论到实践,从方案选型到生产避坑,这一模块覆盖分布式系统的全链路知识。

一、内容总览

本模块围绕分布式系统的四大核心方向展开,每个方向都是从生产事故和架构评审中沉淀出来的实战经验:

1.1 分布式事务 🔴

命中率最高、踩坑最多的领域。

覆盖 2PC、3PC、TCC、Saga、本地消息表等主流事务模式,以及 Seata 在阿里的工程实践。

方案一致性性能侵入性适用场景
2PC强一致同库操作、不允许妥协
TCC最终一致跨服务、需要业务补偿
Saga最终一致长链路、补偿链路清晰
本地消息表最终一致可接受最终一致的场景

1.2 分布式理论 🟡

CAP、BASE、PACELE 三大理论的正确理解与工程落地。

理论核心观点常见误解
CAP三选二:C/A/P 不可能同时满足误以为 CAP 是三选一
BASE弱化可用性,接受最终一致误以为 BASE 就是不要一致性
PACELECA 和 CP 之间的权衡忽略可用性与一致性的动态关系

1.3 分布式锁 🔴

生产环境里用过 Redis 锁但没踩过坑的,不算真正用过。

覆盖 Redis 分布式锁、RedLock、ZooKeeper 锁、etcd 锁、数据库悲观锁与乐观锁的完整选型对比。

1.4 高可用设计 🟡

SRE 视角:怎么让系统在故障面前保持可用。

覆盖限流、熔断、降级、多活、单元化、混沌工程、容量规划等高可用核心手段。

二、学习路径指引

第一阶段:打牢理论基础(1-2 周)

CAP 理论 入手,搞清楚"一致性、可用性、分区容错性"三选二的真正含义。别急着背结论,先理解为什么这是一个权衡问题。

接着看 BASE 理论,理解现实生产环境里为什么最终一致比强一致更实用。然后可以补充 PACELE 理论 进一步加深对 CA/CP 权衡的理解。

理论阶段的关键问题:为什么 Redis Cluster 选择弱化一致性?为什么 Zookeeper 不适合做注册中心?

第二阶段:掌握事务模式(2-3 周)

分布式事务是最容易翻车的领域,建议按这个顺序啃:

  1. 先看 2PC 协议3PC 协议,理解二者的差异和各自缺陷
  2. 重点看 2PC 的问题分析,这是面试高频深水区
  3. 再学 TCC 模式,结合 Seata TCC 看阿里工程实践
  4. 最后看 Saga 模式本地消息表

事务模式的选择没有银弹,关键看你愿意为一致性付出多少性能和复杂度代价。

第三阶段:搞定分布式锁(1-2 周)

分布式锁看似简单,但生产环境的坑多到令人发指:

  1. 先看 Redis 分布式锁RedLock
  2. 接着看 RedLock 的争议与批评,理解为什么不是所有人都信任它
  3. 对比 ZooKeeper 锁etcd 锁
  4. 最后看 锁的选型对比 做出工程决策
💡

分布式锁的学习重点不在于记住谁比谁快,而在于理解每种锁在节点故障、网络分区、时钟漂移等异常场景下的行为。

第四阶段:高可用工程实践(持续)

高可用是运维经验和架构设计的结合,需要持续积累:

  1. 先从 限流熔断降级 入手
  2. 理解 多活架构单元化架构
  3. 补充 混沌工程 理念,学会用故障注入验证系统韧性

三、核心能力矩阵

能力维度入门要求进阶要求高级要求
理论理解 CAP/BASE 含义能解释为什么不能三选二能结合业务场景做权衡取舍
事务说出 2PC/TCC/Saga 流程能分析各方案的性能和一致性代价能为业务场景选择最优事务方案
知道 Redis 锁怎么用能分析锁的边界条件和异常场景能设计满足业务的锁方案
高可用知道限流/熔断概念能设计完整的高可用方案能用混沌工程验证系统韧性

四、生产避坑速查

翻车场景根因解决方案
Redis 锁过期但任务还在执行锁 TTL 设置不合理用看门狗(Redisson)续期
2PC 协调者宕机,数据永久阻塞单点协调者无超时机制升级到 TCC 或 Saga
TCC 空回滚/悬挂网络超时导致 Try 和 Confirm/Cancel 顺序错乱幂等 + 状态机控制
分布式事务最终不一致补偿链路断裂本地消息表 + 定时对账
限流后用户体验崩塌限流阈值拍脑袋基于历史数据 + 压测确定阈值

五、面试高频考点

分布式系统模块的面试核心在于三个追问

第一追问:这个方案在节点宕机时还能正常工作吗?

考察候选人对故障模型的理解。说到任何方案,必须能讲清楚在节点故障、网络分区、时钟漂移等异常场景下的行为。

第二追问:性能和一致性你怎么权衡的?

考察候选人的工程决策能力。能说出"我们选择了最终一致,因为业务可以接受"还不够,要能说清楚这个选择背后的业务约束和技术代价。

第三追问:你踩过什么坑?怎么排查和修复的?

考察候选人的实战深度。没有踩过坑的方案选型是纸上谈兵,能讲清楚排障过程和修复方案的才是真正做过的人。

本模块持续更新中,涵盖从理论到生产实践的全链路知识。每个方向都是从真实架构评审和生产事故中提炼出来的经验,没有空话,只有干货。