分布式理论之CAP

CAP定理是计算机科学家Eric Brewer在2000年提出的一个猜想。在2002年时,CAP被麻省理工学院的Seth Gilbert和Nancy Lynch所证明,成为了分布式计算领域的公认的一个定理。

CAP理论是什么?

对于一个分布式计算系统(指相互连接并共享数据的节点的集合),当涉及到读写操作时,不可能同时满足Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容忍性)三个设计约束,只能保证它们之间的两个共存。

一致性:

对于某个指定的客户端,读操作保证能够返回最新的写操作结果。

可用性:

非故障的节点在合理的时间内返回合理的响应。

分区容忍性:

当出现网络分区后,系统能够继续正常执行。

什么是网络分区?

在分布式系统中,不同的节点分布在不同的子网络中,由于一些特殊的原因,这些子节点之间出现了网络不通的状态,但他们的内部子网络是正常的。从而导致了整个系统的环境被切分成了若干个孤立的区域。

CAP应用

CAP理论定义是三要素只能取两个,那组合起来就是:CA、CP、AP。但是在分布式环境下,分区容忍性是必须要选择的,因为网络不可能保证100%可靠,所以肯定会出现分区的现象。因此,分布式系统理论上不能选择CA架构,只能选择CP或者AP架构。

CP架构

如下图,当发生网络故障时,Node1和Node2之间不能正常通信,为了保证Node1和Node2数据的一致性,Node1会拒绝Client1新数据的写入,导致写入失败。
当Client2向Node2发起读数据请求时,Node2会返回网络故障之前保存的数据,是整个系统最后一次成功写入的数据。这样就保证了数据的一致性(C)和分区容忍性(P),但是放弃了可用性(A)。
CP架构

AP架构

如下图,当发生网络故障时,Node1和Node2之间不能正常通信,当Client1发起写入新数据请求,Node1允许写入,写入新数据成功,但此时Node1和Node2不能通信,所以Node2的数据还是旧数据。
当Client2发起读数据请求时,Node2的数据与Node1的数据不一致,但是却正常的响应请求,返回了合理的数据。所以保证了可用性(A)。但是却放弃了数据一致性(C)。
在这里插入图片描述

CAP最佳实践?
  1. CAP 关注的粒度是数据,而不是整个系统。因为每个系统不可能只处理一种类型的数据,比如一些订单数据,是需要强一致性的,就必须保证CP;而一些商品数据,就不一定需要保证CP,保证AP就足够了。如果整个系统不考虑数据去保证CP或者AP,无论怎么设计都会有问题。
  2. CAP忽略了网络延迟。
  3. 正常运行情况下,不存在 CP 和 AP 的选择,可以同时满足CA。如果系统没有发生分区,P也不会存在。在架构设计时,既要考虑分区发生时选择 CP 还是 AP,也要考虑分区没有发生时如何保证 CA。
  4. 放弃并不等于什么都不做,需要为分区恢复后做准备。

参考资料

https://time.geekbang.org/column/article/9390

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值