CAP理论是分布式系统的思维根基;CAP指的是什么呢?
C : 一致性 > Consistency;
A : 可用性 > Availability;
P : 分区容错性 > Partition tolerance;
分布式系统对我们系统提出了三个要求,单进程三个都能够满足,因为单进程不存在网络分区;那么在分布式系统中面临这三个要求,那么我们能不能满足这三个要求呢?那么不能满足的话我们能不能舍弃谁,或者去对谁进行降级?
那么我们在分布式系统中来看,一致性 很重要,可用性 很重要 大家都很清楚、 那么分区容忍性是啥呢?
分区容忍性:就是指在我们网络出现分区的时候、我们系统能不能忍受。什么意思?就是我们系统对外提供的一个可用性或者对外整体的一个系统完整性。比如我们多进程的系统;如果出现某个进程挂了、或者进程之间网络不互通的时候;那么对外还能不能提供服务;这就是我们分区容忍性。
那么我们想想看;网络这东西可靠吗?网络是不可靠、这是个客观现实;网络分区是一定存在的;所以我们分区容错性(P)是必选项。
那么在这个时候我们就在想;就要么牺牲一致性、要么牺牲可用性了。
所以演变出只有CP框架 或者 AP框架 、因为你这个P没办法去牺牲和避免他。因为网络不可靠是一个客观存在的现实、所以网络是不可靠的、网络分区一定会存在!
那么这个时候我们怎么去选CP 还是AP ;不管是CP也好;还是AP并不是完全去放弃另外一个选择。 CP并不是完全放弃A 、AP也不是完全放弃 C 。
那么我们的AP 和CP 是满足我们的要求的情况下再去追求另一方;
CP在我们真实的场景的有个场景就过半写入;什么意思呢?我们现在不是系统多进程吗?例如:我们有A进程、B进程、C进程三个进程。正常情况下我们都会通知其他节点去同步数据。那么A进程修改数据就会去通知B、C如果是强一致性的话,是ABC都同步完成才能保证一致性,才能对外提供服务。如果我们不保证整体某有个进程写入成功;能不能保证一致性?是可以的;就是过半写入。
什么意思?我对一个数据修改;只要在一半的节点写入成功就可以了。比如我A、B、C三个节点只要A和B同步完了。就立刻对外提供服务。而C再慢慢同步。同步期间不可用,等同步完后再对外提供服务。如果是强一致性你得等所有节点同步完才能对完提供服务,如果节点多了同步耗时也会增加。而过半写入的方案耗时也会缩短。提高了可用性!
AP模型 最经典具有代表的 就是最终一致性;只要某个节点数据可用就对外提供服务;其他的节点经过漫长的同步只要能达到最终一致性就行了。
所以虽然他是AP模型,但他也是追求一致性了的;但他也是保证高可用的情况下去保证最终一致性。
所以呢?CAP并不是说他只有两个选项、我们并不会说CP模型 或者AP模型 完全放弃了另一方 ;而是进行一个选择而已。
那有没有三个都能够满足的呢?当然有!就是单体应用;因为没有网络分区了嘛。
网友评论