知识卡片
从强一致性到最终一致性的BASE理论重新定义一致性
内容
[[CAP三选二对应的三类真实系统选择]]里”AP without C”是分布式系统的主流 选择,但这意味着事务本来追求的”一致性”恰恰成了通常被牺牲的那一项,这 显然不能是终点——系统终究要保证结果在最终交付时是正确的,只是允许中间 过程短暂出错。为此,人们把CAP/ACID里讨论的一致性重新命名为”强一致性” (也叫线性一致性),把纯粹放弃一致性的状态叫”弱一致性”,并在弱一致性 里总结出一个更有实用价值的特例——”最终一致性”:只要数据在一段时间内 不再被其他操作更改,最终会收敛到与强一致性相同的结果(这类算法也被称为 “乐观复制算法”)。这套思路被系统化总结为BASE理论:基本可用性(Basically Available)、柔性事务(Soft State)、最终一致性(Eventually Consistent), 与ACID形成”ACID vs BASE(酸vs碱)”的对照。相应地,使用ACID的事务被称为 “刚性事务”,而放弃强一致性、追求最终一致性的几种分布式事务做法(可靠 事件队列/TCC/SAGA)统称”柔性事务”——这标志着分布式事务处理彻底从”追求 不出错”转向”允许出错但保证收敛”的设计哲学。
参考来源
- 位置:《凤凰架构:构建可靠的大型分布式系统》第3章"事务处理"3.4.1节
"CAP与ACID"(源文件:_epub-src对应OEBPS/Text/chapter31.xhtml)
- 结论依据:原文说明CAP中的一致性被重新称为强一致性/线性一致性,弱
一致性中的特例被称为最终一致性,并引用Dan Pritchett的BASE理论
(基本可用性/柔性事务/最终一致性)作为最终一致性的系统化总结,直接
支撑本卡片结论。
- 原始内容:人们又重新给一致性下了定义,将前面我们在CAP、ACID中讨论
的一致性称为"强一致性"……把牺牲了C的AP系统又要尽可能获得正确结果的
行为称为追求"弱一致性"……在弱一致性里,人们又总结出了一种稍微强一点
的特例,被称为"最终一致性"。