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