架构师训练营 week6 作业

用户头像
Up
关注
发布于: 2020 年 07 月 15 日

1、请简述CAP原理

CAP理论指的是一个分布式系统最多智能满足一致性、可用性和分区容错性这三项中的两项。

例子:

图中有两个节点N1和N2,他们之间网络可以连通,N1中有一个应用程序A和一个数据库V,N2也有一个应用程序B2和数据库V,现在,A和B是分布式系统的两个部分,V是分布式系统的两个子数据库。现在问题来了,突然有两个用户小明和小华分别同时访问了N1和N2。我们理想中的操作是下面这样的。

1)、小明访问N1节点,小华访问N2节点。同时访问的。

2)、小明把N1节点的数据V0变成V1。

3)N1节点一看自己的数据有变化,立马执行M操作,告诉了N2节点。

4)、小华读取到的就是最新的数据,也是正确的数据。



上述是最理想的情景,它满足了CAP理论的三个特性。现在我们看看如何来理解满足的这三个特性。



一致性(Consistency):

一致性是指所有的节点在同一时间的数据完全一致,就好比刚刚的例子,小明和小华读取的数据都是一致的。因此,对于一致性,可以分为客户端和服务端两个不同的视角来理解。

1)、客户端:主要指的是多并发访问时更新过的数据如何获取的问题。

2)、服务端:更新如何分布到整个系统,保证数据的一致性。也就是多个节点如何通信保持数据的一致性。



由于以上两种情况,有了强一致性和弱一致性、最终一致性的说法。

  • 强一致性:对于关系型数据库,要求更新过的数据能被后续的访问都能看到。

  • 弱一致性:如果能容忍后续的部分或者全部访问不到,则是弱一致性。

  • 最终一致性:经过一段时间后要求能访问到更新后的数据,则是最终一致性。



可用性(Availability)

可用性是指服务一直可用,而且是正常响应时间。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超市等用户体验不好的情况。



分区容错性(Partition Tolerance)

分区容错性是指在遇到某节点或者分区网络故障的时候,仍然能够对外提供满足一致性和可用性的服务。

理想情况下,CAP理论是可以同时满足的,但是由于现实的种种因素,我们智能在CP和AP中选择其中一种方案。

证明:

N1节点更新了V0到V1,想通过M操作通知N2节点,但是发生了网络故障,这时候用户如果想同时访问这个数据,该怎么办呢?

1)系统发生了故障,但是系统依然可以访问,因此具有容错性。

2)A在访问节点N1的时候更改了V0到V1,想要B访问节点N2的V数据库的时候是V1,就需要等待网络故障恢复,讲N2的节点进行更新才可以。

3)、在网络故障恢复的这段时间内,想要系统满足可用性,是不可能的。因为可用性要求随时随地访问系统都能得到正确的响应,这就出现了矛盾。



此时就出现以下两种取舍:

1)、牺牲数据一致性,也就是A看到的是V1,但是B看到的仍然是V0;

2)、牺牲可用性,也就是A看到的是V1,但是B想要获取最新的V1的话,就需要一直等待阻塞,一直到网络故障恢复。

由此可见,CAP只能满足其中两个。



CAP特性的取舍:

既然CAP只能满足其中两个,那么满足哪两个呢?

1)、满足CA舍弃P,也就是满足一致性和可用性,舍弃容错性。但是这也意味着你的系统不是分布式了。

2)、满足AP舍弃C,也就是满足可用性和容错性,舍弃一致性,这也就是意味着你的系统在并发访问的时候,可能会出现数据不一致的情况。

3)、满足CP舍弃A,也就是满足一致性和容错性,舍弃可用性。如果你的系统允许有段时间的访问失效等问题,这个是可以满足的,就好比个人并发买票,后台网络出现故障,你买的时候系统就崩溃了。

实践证明,我们只能满足AP或者CP。



用户头像

Up

关注

代码,思考,架构,阅读,旅行。 2018.11.02 加入

一起来进步吧,持续学习的小白!

评论

发布
暂无评论
架构师训练营week6作业