在学习分布式系统时,“写一致性”与“双写一致性”这两个术语经常被混淆。虽然它们都关乎“写”,但所属的维度完全不同。


核心区别对比

维度写一致性双写一致性
本质分布式系统的理论模型缓存架构中的工程实践
关注点多个副本间的顺序与原子性不同存储介质间的数据同步
操作对象同一数据的多个副本(如 Redis 集群节点)。数据库(DB)与缓存(Cache)。
解决的问题如何给并发请求定序?如何防止缓存中出现脏数据?
典型手段Raft、Paxos、2PC。Cache Aside、延迟双删、Binlog 订阅。

深度辨析

1. 理论与实践的关系

  • 写一致性是“道”,它定义了系统能提供的保障级别(如强一致、最终一致)。
  • 双写一致性是“术”,它是为了在 MySQL+Redis 这种特定场景下,实现“写一致性”目标而采取的具体手段。

2. 解决冲突的方式不同

  • 写一致性中,我们通过共识算法(如多数派投票)来决定谁先谁后。
  • 双写一致性中,我们通常通过操作顺序(如先更后删)或异步补偿来确保最终一致。

3. 性能侧重不同

  • 追求高等级的写一致性(如强一致)通常会显著增加延迟。
  • 双写一致性方案的设计初衷往往是为了在不牺牲太多性能的前提下,尽可能减少脏数据的存在时间。

总结建议

  • 当你讨论 Raft、分布式锁、操作顺序 时,你在谈论 写一致性
  • 当你讨论 Redis 缓存失效、先更库还是先删缓 时,你在谈论 双写一致性