知识卡片
CAP的"牺牲"不等于什么都不做
内容
CAP理论说分区期间必须”牺牲”C或A之一,这容易被误解为什么都不用做。实际上只要分区期间把未同步操作记录成日志,恢复后即可重放找补——CP场景把被拒绝的写请求补录,AP场景把冲突修改按规则(如最后修改优先)合并,系统最终仍能回到CA状态。发散:”牺牲”应理解为”延后处理”而非”永久放弃”——4个9可用性一年故障不过50分钟,为这短暂窗口设计事后补偿机制,比强求分区期间也完美一致更现实。
参考来源
- 位置:《从0开始学架构》第27章《23|想成为架构师,你必须掌握的CAP细节》(源文件:_epub-src/OEBPS/Text/part0026_split_002.html)
- 结论依据:原文明确"'牺牲'只是说在分区过程中我们无法保证C或者A,但并不意味着什么都不做……例如,99.99%可用性(俗称4个9)的系统,一年运行下来,不可用的时间只有50分钟……分区期间放弃C或者A,并不意味着永远放弃C和A,我们可以在分区期间进行一些操作,从而让分区故障解决后,系统能够重新达到CA的状态",并举例CP场景记日志补录、AP场景按"最后修改优先"规则合并冲突。
- 原始内容:CAP理论的"牺牲"只是说在分区过程中我们无法保证C或者A,但并不意味着什么都不做……99.99%可用性(俗称4个9)的系统,一年运行下来,不可用的时间只有50分钟……我们可以在分区期间进行一些操作,从而让分区故障解决后,系统能够重新达到CA的状态。