码迷,mamicode.com
首页 > 其他好文 > 详细

初识CAP

时间:2020-03-17 19:52:18      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:通信   art   namenode   uri   特征   操作   fifo   automic   ade   

记录一下对CAP的理解,CAP理论是分布式系统的基本理论,已得到证明,分布式系统最多只能满足其中的两个。

CAP基本概念

CAP是三个特性关键字的简写。

(1)C:Consistency,一致性

(2)A:Availability,可用性

(3)P:Partition tolerance,分区容忍性

一致性:对某个节点写操作后,其他节点可以读取到最新的数据,这个写操作的更新需要对其他节点可见。

可用性:任意一个没有发生故障的节点,需要在有限的时间返回一个合理的结果。

分区容忍性:分布式系统中,就算部分节点宕机或者无法与其他节点通信时,系统整体依然可以对外提供服务。

不能同时满足

CAP是不能同时满足的,最多只能满足其中的2个特性。

如果满足了CA,意味着一致性和可用性同时满足,这种情况只有一个节点才能满足,即对单个节点的写操作,对外读取时可以立即生效。

在CA的基础上,在增加一个P会是什么情况?如果增加一个节点,一定保证分区一致性的话,CA就只能留下其中的一个。

如果留下C,保证了CP,就意味着数据必须要保证各个节点的一致,在节点通信进行数据同步时,会存在节点等待而无法对外提供合理的数据,这就不能满足A。

如果留下A,保证了AP,意味着需要在有限的时间返回一个合理结果,但是在这个时间范围数据可能还没有在节点间同步结束,导致返回的数据不同节点会有不一致的可能,这样就不能满足C。

因此CAP只能满足其中的两个,一般分布式系统中,是满足CP,如Hadoop、HBase、Zookeeper、Kafka等都满足CP。

一致性实现的方法

要实现一致性,有多种选择。

(1)ZAB

ZAB(ZooKeeper Automic Broadcast)原子广播协议,就是实现一致性的一种方式,zab来自raft(共识算法),而raft来自paxos,zookeeper就是用的zab,实现分布式一致性。

参考文末博文,消息广播的大致步骤如下:

a.客户端发送给zookeeper的写请求,请求会被leader先转化成事务proposal提案,并为proposal提供一个全局的txid。

b.leader会将proposal提案发送给所有的follower,但是不是直接发送给follower,而是先让一个队列先接收着,其中每个follower都会有一个队列。队列采用FIFO的策略,先发给队列再处理可以实现异步解耦,提升性能。

c.当follower处理完proposal成功后会返回一个ack信号给leader,当过半的follower都返回了ack,leader就认为可以commit这个proposal了,除了自己会提交事务会外,还会给每个follower广播这个commit信息,follower随后也都会提交事务。

有了消息广播还不能保证一致,还不够健壮,ZAB还有两个特征,可以保证一致性:

a.当leader提交了proposal,这样每个follower也需要完成commit提交。

b.当leader提出proposal后就挂掉了,这个proposal会被丢弃。

这样,就算leader挂掉了,可以做到"对应该提交的proposal不会漏过,对不该提交的proposal绝不留存"。

(2)主从模式

主从模式也是一种实现方式,如Hadoop有一个主节点namenode,多个从节点datanode,如果给集群写入数据,会先将请求发送namenode,主节点通过心跳机制得到各个从节点的信息,选出合适写入数据的节点后,数据会在多个从节点间建立pipeline进行平行复制,保证数据同步。

(3)WNR

可以按照理解抽屉原理来理解WNR,其中W代表每次写操作能保证的最少成功副本数,R代表每次读操作能确保读取到的副本数,N代表副本总数。当W+R>N时,这样可以保证每次读取到的数据,有一个副本是最新的数据,这样也可以实现一致性。数据库Cassandra就是采用这种策略,使用WNR比较耗费资源,通俗一点说是属于"牺牲资源,换心安"。

参考博文

(1)https://www.cnblogs.com/mingorun/p/11025538.html CAP

(2)https://www.jianshu.com/p/2bceacd60b8a ZAB

(3)https://www.cnblogs.com/yaohaitao/p/8907022.html

(4)https://www.jianshu.com/p/8e4bbe7e276c paxos和raft

初识CAP

标签:通信   art   namenode   uri   特征   操作   fifo   automic   ade   

原文地址:https://www.cnblogs.com/youngchaolin/p/12512565.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!