知识卡片
CAP理论的真实狭窄含义与历史文物评价
内容
CAP常被通俗地理解为”一致性、可用性、分区容错性三者只能同时满足两个”,但这个流传甚广的”三选二”说法其实是对原始理论的误传。CAP的严格表述其实只是一个二选一:网络分区确实会发生(这不是可选项,不能被”放弃”),所以真正的选择只在分区发生时——要么放弃线性一致性(保持可用)、要么放弃可用性(保持线性一致);网络正常时,一致性和可用性完全可以同时拥有。而且CAP里的”一致性”特指线性一致性这一种很窄的定义,”可用性”也是一个特定的形式化定义,跟日常语境里”高可用”的含义并不完全对等。原作者Eric Brewer后来自己也承认”三选二”的框架具有误导性,学界现在普遍认为CAP定义过窄、适用范围有限,更多被当作历史文物而非实际系统设计的指导原则。发散:讨论系统一致性权衡时,与其套用CAP的简化口号,不如直接问”这个系统在网络分区时具体牺牲了什么保证”。
参考来源
- 位置:《数据密集型应用系统设计》第九章《一致性与共识》"线性一致性的代价""CAP,一个误导性的概念"(源文件:_epub-src/ch9_split_000.html)
- 结论依据:原文说明CAP的正式定义狭窄(一致性=线性一致性),网络分区不可避免因而不是真正的可选项,真正的取舍只发生在分区期间,并引用作者对CAP框架具有误导性的反思,直接支撑本卡片结论。
- 原始内容:CAP有时候是这样表述的:一致性、可用性、分区容忍性:三选二……CAP如今被认为对系统设计的用处不大,它有许多含糊不清的地方,因此这个理论在现在实际上没有太大用处……现在CAP更多的被认为是一个历史文物。