System Design Core Concepts
Consistency 模式
弱 consistency、最终 consistency 与强 consistency
当同一份数据存在多个 replicas 时,我们需要在 consistency 和 availability 之间做选择,确保客户端看到的数据尽可能一致。回想 CAP 理论 对 consistency 的定义:每次访问都能看到最新数据,但可能会牺牲可用性。
弱 consistency(Weak Consistency)
写入后,读取可能看到也可能看不到新数据。系统会尽力优化让客户端尽快看到最新数据。
这类模式在 memcached 等系统里常见。弱 consistency 在 VoIP、视频通话和实时多人游戏等场景表现不错:比如通话中短暂断线,重连后不会补齐那几秒的内容。
最终 consistency(Eventual Consistency)
写入后,读取最终能看到新数据(通常是毫秒级)。数据通过 async replication 传播。
DNS 和 email 等系统常用该模式。最终 consistency 在高 availability 系统里更容易扩展。
强 consistency(Strong Consistency)
写入后,读取立即可见。数据同步复制。
文件系统和关系型 database(RDBMS)常用该模式。强 consistency 适合对准确性要求极高的场景,比如金融、交易记录等。
Trade-off 示例
- 银行转账:强 consistency,转账成功后余额必须立刻正确
- 社交 feed:最终 consistency,短暂延迟可接受但更强调 availability