分布式-CAP

举报
object 发表于 2024/04/15 16:23:42 2024/04/15
【摘要】 CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。一致性(Consistency):所有节点访问同一份最新的数据副本可用性(Availability):非故障的节点在合理的时间内返回合理的响应(不是错误或者超时的响应)分区容错性(Partition Tolerance):分布式系统...

CAP 

也就是 Consistency(一致性)Availability(可用性)Partition Tolerance(分区容错性) 这三个单词首字母组合。

  • 一致性(Consistency):所有节点访问同一份最新的数据副本
  • 可用性(Availability):非故障的节点在合理的时间内返回合理的响应(不是错误或者超时的响应)
  • 分区容错性(Partition Tolerance):分布式系统出现网络分区的时候,仍然能够对外提供服务。
    • ps:“网络分区”即多个节点本来是网络互通,但某些节点因为故障导致无法连通,整个网络就分成了几块区域,即网络分区

CAP的选择

大部分针对CAP的描述,仅简单表述为:一致性、可用性、分区容忍性三者只能同时达到其中两个。实际这是错误的。

当发生网络分区的时候,如果我们要继续服务,那么一致性和可用性只能2选1。也就是说当网络分区之后P是前提。

简而言之:CAP理论中分区容错性P是一定要满足的,再次基础上满足可用性A或者一致性C。因此,分布式系统理论上不可能选择CA架构,只能选择CP或者AP架构。比如ZooKeeper、HBase就是CP架构,Cassandra、Eureka就是AP架构,Nacos不仅支持CP架构也支持AP架构。

为啥不可能选择CA架构呢?举个例子:若系统出现“分区”,系统中的某个节点在进行写操作。为了保证C,必须要禁止其他节点的读写操作,也就和A发生了冲突。如果为了保证A,其他节点的读写操作正常的话,那就和C发生冲突了。选择CP还是AP的关键在于当前的业务场景,没有定论,比如对于需要确保强一致性的场景如银行一般会选择保证CP。

另外,需要补充说明的一点是:如果网络分区正常的话(系统在绝大部分时候所处的状态),也就说不需要保证P的时候,C和A可以同时保证。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。