Skip to content

一致性模型

强一致到最终一致的谱系、线性一致性、实现机制。

Updated View as Markdown
For humans

一致性模型

一致性模型是分布式系统的“契约”:读能看到多新的写。面试主线:谱系、各模型语义、实现机制。

一致性谱系

从强到弱: 性能与一致性的权衡

模型 语义 例子
线性一致 读必见最新写(全局实时序) 单机数据库、etcd
顺序一致 各进程看到相同顺序(不一定实时) 部分分布式系统
因果一致 有因果关系的操作有序 分布式会话
最终一致 无新写后,副本收敛到相同 DNS、缓存、异步复制

线性一致性(必考):系统表现得像单机一样,所有操作有全局实时顺序。实现代价高(要共识协议同步),但语义最简单(“读到了刚写的”)。

为什么难

  • 副本延迟:写主节点,读从节点可能读旧(复制延迟)
  • 时钟问题:无全局时钟,无法定义“最新”
  • 冲突:并发写不同副本,谁赢?(见下面)

实现机制

机制 提供 代价
共识协议(Raft/Paxos) 线性一致(写入经多数派) 延迟(每次写等多数确认)
同步复制 主备都确认 延迟,主备一致
异步复制 低延迟 读旧、可能丢
版本向量/时间戳 冲突检测 需要合并逻辑
读己之写 会话内读最新 部分保证

读己之写(考点):用户提交后刷新页必须看到自己的写入。实现:会话路由到主节点、版本号检查、Cookie 标记。

强一致 vs 最终一致的选型

场景 需要 方案
订单、支付、库存扣减 强一致 主库读写 + 事务
排行榜、计数 可容忍最终一致 异步 + 对账
缓存 最终一致 Cache Aside(见缓存一致性篇)
配置、分布式锁 强一致 etcd(Raft)

面试话术:先定业务需要哪个模型,再选机制。强一致贵(延迟/复杂度),只在数据正确性攸关处用。

面试追问

  1. 一致性谱系? 线性(实时序)→ 顺序 → 因果 → 最终。由强到弱
  2. 线性一致是什么? 系统表现得像单机:所有操作全局实时序,读必见最新写。etcd 级别
  3. 怎么实现强一致? 共识协议(多数派确认)或同步复制。代价是延迟
  4. 读己之写? 用户必须看到自己刚写的。会话路由主节点或版本检查
  5. 什么时候容忍最终一致? 数据正确性不攸关、可对账的场景。强一致只在必须处用
Navigation

Type to search…

↑↓ navigate↵ selectEsc close