CAP理论

一、CAP简介

说到分布式系统就一定离不开CAP定理,CAP定理叫作布鲁尔定理。对于设计分布式系统来说(不仅仅是分布式事务)的架构师来说,CAP是一个很重要的理论。

  • C (一致性):对某个指定的客户端来说,读操作能返回最新的写操作。但如果因为消息丢失、延迟过高发生了网络分区,那么这个时候,当集群节点接收到来自客户端的读请求时,为了不破坏一致性,可能会因为无法响应最新数据,而返回出错信息

  • A (可用性):指非故障的节点,在合理的时间内返回自己当前的相对新的信息

  • P (分区容错性):当出现网络分区后,系统能够继续工作。比如集群有多台机器,有台机器网络出现了问题,但是这个集群仍然可以正常工作。

熟悉CAP的人都知道,三者不能共有,如果感兴趣可以搜索CAP的证明,在分布式系统中,网络无法100%可靠,分区其实是一个必然现象,如果我们选择了CA而放弃了P,那么当发生分区现象时,为了保证一致性,这个时候必须拒绝请求,但是A又不允许,所以分布式系统理论上不可能选择CA架构,只能选择CP或者AP架构。

对于CP来说,放弃可用性,追求一致性和分区容错性,比如Zookeeper、Etcd。

对于AP来说,放弃一致性(这里是强一致性),追求分区容错性、实现了服务的高可用,这是很多分布式系统设计时的选择,如Cassandra。

 

二、如何理解

个人认为这么理解,CAP必须有P才算分布式系统,丢了P就相当于单体系统了。首先分区容错性,是指允许部分节点出错;可用性是指既可读也可以写;一致性是指所有节点数据一致;

当发生分区错误时,系统在运行,那么如何运行呢?要在一致性C和可用性A中选择一个,这两个是不能同时满足的:

1.如果选择了一致性C,能一直读到新数据,但在分区错误发生时,可能因为系统无法响应最新数据,而读取数据失败;

2.如果选择了可用性A,每次读操作都会得到响应,但会读到旧数据。

所以,当其中一个节点出错时,才需要考虑C和A的选择。某个节点出错后,那么前面就有两种选择:

1. 需要等所有节点数据一致才可以继续使用;

2. 可以使用,但是数据是不一致的。

如果系统偏向不停机使用,也就是选择A的话,要么选择C。

以 KV 存储选型为例:

CP 模型:对业务数据比较敏感,不允许出错不一致,比如金融业务
AP 模型 :业务的可用性优先,可以允许数据有延迟,比如日志数据

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值