分布式系统一致性模型笔记


✅ 分布式系统一致性模型笔记


一、CAP 理论中的一致性(Consistency)

📌 定义

CAP 理论中的“C”指的是 线性一致性(Linearizability),即:

所有节点在同一时刻看到的数据是完全一致的,每次读取都能读到最新的写入。

  • 强一致性的代价是牺牲系统的可用性(例如发生网络分区时)。


二、工程实践中常见的一致性模型(从强到弱)

1. 强一致性(Strong Consistency / Linearizability)

  • ✅ 每次读取都返回最新写入的结果。

  • 📌 就像访问单机内存一样,一致性最强。

  • ❌ 通常需要分布式锁、Raft/Paxos 等协议,性能开销大。

  • ✅ 常见于分布式数据库的强事务(如 Google Spanner、Zookeeper)


2. 顺序一致性(Sequential Consistency)

  • ✅ 所有操作按某个全局顺序执行。

  • ❗但不一定是实时的(即不是线性化的时间顺序)。

  • ✅ 所有节点观察到的顺序相同,但不一定是提交顺序。

  • 应用于:共享内存模型、多线程 CPU 操作顺序。


3. 因果一致性(Causal Consistency)

  • ✅ 如果操作 A 发生在 B 之前(有因果关系),所有节点都保证看到 A 在 B 前。

  • ❌ 无因果关系的操作,顺序可能不同步。

  • 实现方式:版本向量、逻辑时钟(如 Lamport Clock)

  • 应用于:社交网络(先发动态、再点赞)


4. 会话一致性(Session Consistency)

  • ✅ 同一客户端在一个会话中,写入的数据读操作能立即读到。

  • ❌ 不对不同客户端或会话做保证。

  • 常用于:移动 App、浏览器 Session 缓存。


5. 单调读一致性(Monotonic Read Consistency)

  • ✅ 如果客户端读到某个值,则之后不会再读到更旧的值。

  • ❌ 不保证能立即读到最新值,但至少“值越来越新”。

  • 常用于:缓存层、分布式只读副本系统。


6. 最终一致性(Eventual Consistency)

  • ✅ 写入的数据最终将传播到所有节点。

  • ❌ 不保证操作顺序,不保证多久同步完成。

  • ✅ 但最终一定会同步成功

  • 应用于:DNS、社交平台内容同步、Cassandra、DynamoDB。


7. 弱一致性(Weak Consistency)

  • ❌ 不保证数据一定能被读到。

  • ❌ 不保证顺序、不保证传播、不保证成功。

  • ✅ 性能极高,延迟极低。

  • 应用于:缓存系统(如 Memcached)、CDN 边缘节点


三、对比总结表格

模型是否保证可读是否保证实时最新是否保证顺序适用场景
强一致性✅ 一定✅ 一定✅ 一定金融交易、Zookeeper
顺序一致性✅ 一定❌ 不一定✅ 一定多线程/多副本模型
因果一致性✅ 一定❌ 不一定✅ 部分(有因果)社交平台
会话一致性✅ 一定✅ 会话内移动应用
单调读一致性✅ 一定❌ 不一定✅ 趋势新弱一致缓存
最终一致性✅ 最终❌ 不一定DNS、Dynamo
弱一致性❌ 不一定❌ 不一定缓存系统、CDN

四、常见系统中一致性模型实现

系统一致性模型
Zookeeper强一致性(线性化)
Cassandra最终一致性 + 可调一致性
Redis弱一致性(主从)/ 强一致性(哨兵+事务)
Kafka顺序一致性(分区内)
MongoDB会话一致性 + 可调一致性
DynamoDB最终一致性(默认)/ 强一致性(可选)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值