知识卡片

最终一致把复杂度转嫁给了应用开发者

普通读书笔记卡 · 1626

内容

CAP理论不是说系统永远无法兼顾一致性、可用性与分区容忍,而是有前提的:一旦网络分区真的发生, 系统就必须在继续响应但可能读到不一致数据、与暂停部分节点访问以保证一致之间二选一。很多追求 高可用的多主复制系统在分区时选择最终一致(BASE),用最后写入为准处理冲突,代价是把数据可能 过期的复杂性甩给应用层——开发者为此耗费大量精力构建复杂易错的应对逻辑,这本应在数据库层解决。

参考来源

- 位置:《SRE:Google运维解密》第23章《管理关键状态:利用分布式共识来提高可靠性》(源文件:_epub-src/OEBPS/Text/0009_0014.xhtml) - 结论依据:原文CAP理论段落明确"该逻辑非常符合直觉:如果两个节点无法通信(因为网络出现了分区问题),那么整个系统要么……无法处理数据访问请求,要么……无法保障每个节点的数据具有一致性",说明取舍是在网络分区发生时才产生的;随后引用Jeff Shute的话说明最终一致把处理过时数据的复杂度转嫁给了开发者。 - 原始内容:该逻辑非常符合直觉:如果两个节点无法通信(因为网络出现了分区问题),那么整个系统要么在一个或多个节点上无法处理数据访问请求,要么可以照常处理请求,但是无法保障每个节点的数据具有一致性……我们发现开发者通常花费了大量的时间构建一个极为复杂和容易出错的机制来应对最终一致性下可能过时的数据。我们认为对开发者来说这是一种无法接受的负担,数据一致性的问题应该在数据库层解决。