StackSense ← 回到地图
系统基础 / DIST

分布式系统

分布式系统是讨论「当机器、网络、时钟都可能骗你时,还能得到什么保证」的学问。这个模块的目标是建立词汇表:一致性模型、共识、复制、故障模型,让你在读论文、设计存储或排查线上诡异故障时有共同语言。

分布式系统是讨论「当机器、网络、时钟都可能骗你时,还能得到什么保证」的学问。这个模块的目标是建立词汇表:一致性模型、共识、复制、故障模型,让你在读论文、设计存储或排查线上诡异故障时有共同语言。

学完后你应该能回答

一致性模型 & 理论

  1. 为什么 CAP 的 C 和 ACID 的 C 不是同一个 C?分区发生时实际工程里如何权衡 A 与 C?
  2. FLP 不可能性说的是”异步系统无法共识”,Raft 为什么又能工作?它到底绕过了哪个假设?
  3. 线性一致性、顺序一致性、因果一致性、最终一致性,请给出四个能区分它们的具体反例。
  4. BFT vs CFT 的阈值差异(n ≥ 3f+1 vs n ≥ 2f+1)?区块链之外还有哪些场景必须上 BFT?
  5. PACELC 相比 CAP 多补了什么维度?它更贴近实际系统选型的哪一面?

共识 & 复制

  1. Raft 选举时为什么要求候选人日志”至少和大多数一样新”?否则会出什么问题?
  2. 一个 5 节点集群能容忍几台故障?把集群扩到 7 台能获得什么、失去什么?
  3. 2PC 的阻塞问题具体是什么场景?Paxos / Raft 如何避免这种阻塞?
  4. Raft 的 read index 和 lease read 分别怎么实现线性一致读?代价各是多少?
  5. Joint consensus(共同一致)是什么?为什么 Raft 用它做配置变更而不直接切换?
  6. Raft snapshot + log compaction 解决了什么问题?follower 落后太多时 install snapshot 的流程是什么?
  7. Multi-Paxos、EPaxos、Raft 三者在跨地域部署时延迟模型有什么差别?

事务 & MVCC

  1. 事务隔离级别(RC / RR / SI / SSI / Serializable)各自允许哪些异象?为什么 Snapshot Isolation 不是可串行的?
  2. Percolator / Omid 等跨分片事务模型的核心思路是什么?和 2PC 有什么差异?
  3. MVCC 下一次事务看到的快照是怎么确定的?vacuum / GC 为什么是 MVCC 系统逃不开的代价?
  4. 悲观锁 vs 乐观锁在跨分片事务里的 tail latency 差异?OCCC 在冲突率高的工作负载下为什么会崩?
  5. Deterministic database(Calvin / FaunaDB)相比两阶段提交减少了什么?代价是什么?

时钟 & 时序

  1. Spanner 的 TrueTime 给出什么保证?没有 GPS+原子钟的团队该怎么近似实现外部一致性?
  2. Lamport 时钟、向量时钟、HLC 各自能给出什么保证?HLC 在 CockroachDB 里起什么作用?
  3. 在最终一致的系统里,如何用版本向量或 CRDT 合并并发写,而不靠时钟?
  4. NTP 偏移 50ms 会让典型分布式 DB 出什么问题?leader lease 最小能设多短?

工程实践 & 故障

  1. 一致性哈希 vs range 分片的取舍?虚拟节点(vnode)解决了什么问题?
  2. Split brain 发生的条件?lease + fencing token 如何组合防止”两个 leader”同时写?
  3. Jepsen 报告里最常见的五类一致性 bug 是什么?为什么早期 MongoDB 屡屡中招?
  4. Gray failure(半死节点)相比 crash failure 为什么更难处理?哪些系统有针对性设计?
  5. Chaos engineering 在生产做成常态化有哪些前置条件?和 Jepsen-style 模型检查的互补点?

核心概念

Lab

资料

工具