第六周 cap 原理
第一版的解释:对于一个分布式操计算系统,不可能同时满足一致性(Consistence),可用性,分区容错性的三个设计约束
第二版解释:在一个分布式计算系统(相互连接并共享数据的集合节点)中,当设计读写操作的时候,只能保证一致性,可用性,分区容错性三者中的两个,另一个必须牺牲。
第二版强调两点:相互连接并共享数据,因为分布式事物中并一定会互联和共享数据
cap关注的是对数据的读写操作,而不是分布式所有的功能。比如zookeeper的选举机制就不是cap关注内容
一致性:所有节点的同一时刻都能看到相同的数据
第二版解释:对某个指定的客户端来说,读操作保证能够返回最新的写操作结果
区别:第一版从node节点来看,第二版从client的角度描述
可用性:每个请求都能得到成功或者失败的响应
第二版解释:非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)
分区容错性:出现消息丢失或者分区错误时系统能够继续运行
第二版解释:当出现网络分区后,系统能够继续履行职责
虽然CAP理论定义是三个要素只能取两个,但放到分布式环境下来思考,我们发现必须选择P(分区容忍)要素,因为网络本身无法做到100%可靠,有可能出现故障,所以分区一个必然新乡,如果选择CA而放弃P,当发生分区现象时,为了保证C,系统禁止写入,当有写入请求的时候,系统返回error,这有A冲突,A要求返回no error和no timeout,因此,分布式系统理论上不可能选择CA框架,只能选择CP或者AP框架
CP模型:
发生分区现象后,比如P1和P2数据不一致的时候,比如P1的更新了一个数据,P2没有同步到。当访问P2的时候,提示数据错误,不可用。
AP模型:
发生分区现象后,比如P1和P2数据不一致的时候,比如P1的更新了一个数据,P2没有同步到。当访问P2的时候,返回一个旧的数据,可用,不一致。
BASE原则
BASE是指基本可用(basically Avaible),软状态(soft state),最终一致性(Eventual Consistency)核心思想无法做到强一致性(CAP强调的强一致性),但可以采用合适的方式达到最终一致性
1、基本可用
在分布式系统出现故障时,允许损失部分可用性,即保证核心功能可用
2、软状态
允许系统中保存中间状态,而中间状态不会影响系统的整体可用性。
3、最终一致性
系统中的所有数据副本经过一定时间后,最终达到一致性的状态。一定时间和数据的特性是强关联的,不同的数据能够容忍的时间是不同的。
其实BASE原则是AP原则的延伸
评论