分布式基础-CAP定理的含义

分布式基础-CAP定理的含义

随着微服务的发展,分布式系统(distributed system)正变得越来越重要,java后端系统多是分布式系统,很少有单机部署了。

在引入分布式系统的同时,也带来了复制性,只有了解了分布式系统的基本定理,才会明白引入分布式系统会带来哪些问题?以及如何去解决。

可以这么说,CAP定理是理解分布式系统的起点。

如果想要更深入的了解,可以参考Seth Gilbert;Nancy A. Lynch 的论文 Perspectives on the CAP Theorem

一.分布式系统的三个指标

  • Consistency(一致性)
  • Availability(可用性)
  • Partition tolerance(分区容错)

取首字母分别为:C、A、P,CAP定理简单的说,就是分布式系统不能同时满足三个指标。

1.1 Partition tolerance(分区容错)

大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。

Partition tolerance 的含义是:区间通信可能失败,比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。

对于分布式系统,区间通信无法保证一定成功,分区容错无法避免。即CAP中的P一定存在,CAP定理告诉我们,剩下的C和A,无法同时成立。

1.2 Consistency(一致性)

Consistency的含义是:在写操作之后,在访问分布式系统中任一节点查询数据的时候,都是最新的数据。

假设分布式系统中有两个节点:S1和S2,每个节点都存储一个变量V0,这时候客户端client开始对S1进行写操作,更新V0 -> V1,然后S1更新完成会通知client。

这时候,很明显是不满足一致性的,由于S2节点变量value还是V0,假如client在write操作完成之后,read操作S2节点,value还是V0,不是最新的V1。

因此为了满足一致性,S1节点在将变量V0更新为V1之前,会先锁定S2节点的读写操作,在将S1节点变量更新为V1之后,会通知S2更新变量为V1,S2更新成功会通知S1,S1在确保S1、S2节点都更新成功之后,解锁S2节点的读写操作,并返回client更新成功。

具体操作如下图所示:

在这里插入图片描述

此时就是满足一致性的分布式系统。

1.3 Availability(可用性)

Availability的含义是:任何时候,client向任意一个节点S1或者S2发送请求,都能立马得到响应,不管获得的数据是V0还是V1。

二.分布式系统中Consistency 和 Availability 为啥不能同时满足

一致性和可用性,为什么不可能同时成立?答案很简单,因为可能通信失败(即出现分区容错)。

如果保证 S2 的一致性,那么 S1 必须在写操作时,锁定 S2 的读操作和写操作。只有数据同步后,才能重新开放读写。锁定期间,S2 不能读写,可用性无法满足。

如果保证 S2 的可用性,那么势必不能锁定 S2,所以一致性不成立。

综上所述,S2 无法同时做到一致性和可用性。系统设计时只能选择一个目标。如果追求一致性,那么无法保证所有节点的可用性;如果追求所有节点的可用性,那就没法做到一致性。即要么AP,要么CP。

引用:
1.https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/
2.https://www.ruanyifeng.com/blog/2018/07/cap.html
3.https://blog.csdn.net/hzygcs/article/details/86534670

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值