知识卡片

正常运行时不存在CP或AP的取舍,可以同时满足CA

普通读书笔记卡

内容

CAP理论说分布式系统只能选CP或AP,但这个结论的前提是系统确实发生了”分区”现象。如果节点间网络连接一切正常、P这个条件根本不存在,那就没有必要放弃C或A中的任何一个——正常情况下应该C和A都能同时保证,这意味着架构设计不能只考虑”分区发生时该选CP还是AP”这一半问题,还必须同时考虑”分区没有发生时如何做到CA”这一半问题,两者缺一不可。而且即便是同一个系统,不同类型的数据实现CA的具体方式也可能完全不同:还是以用户管理系统为例,用户账号数据可以用”消息队列”来实现CA——因为消息队列能比较好地控制实时性,虽然实现起来相对复杂;用户信息数据则可以用更简单的”数据库同步”来实现CA——虽然数据库同步在某些场景下延迟可能偏高,但实现和维护成本要低得多。这说明CAP落地不是一次性的”选CP还是AP”的抉择,而是要针对具体数据类型,同时规划好”正常时如何保证CA”和”异常分区时该牺牲C还是牺牲A”两套预案,两者是同一份架构设计里不可分割的两部分。

参考来源

- 位置:《从零开始学架构》第23讲《想成为架构师,你必须掌握的CAP细节》"CAP关键细节点"之"正常运行情况下,不存在CP和AP的选择,可以同时满足CA"(源文件:_epub-src/OEBPS/text00002.html) - 结论依据:原文说明"如果系统没有发生分区现象,也就是说 P 不存在的时候……我们没有必要放弃 C 或者 A,应该 C 和 A 都可以保证,这就要求架构设计的时候既要考虑分区发生时选择 CP 还是 AP,也要考虑分区没有发生时如何保证 CA",并以用户账号数据(消息队列)与用户信息数据(数据库同步)两种不同的CA实现方式为例,直接支撑本卡片结论。 - 原始内容:如果系统没有发生分区现象,也就是说 P 不存在的时候(节点间的网络连接一切正常),我们没有必要放弃 C 或者 A……用户账号数据可以采用"消息队列"的方式来实现 CA……而用户信息数据可以采用"数据库同步"的方式来实现 CA。