分布式cap理论

2019-03-26  本文已影响0人  Reykjavik_8ce1

cap理论

对于一个分布式计算系统,不可能同时满足一致性,可用性,分区容错性三个设计约束;

在一个分布式系统中,当涉及读写操作时,只能保证一致性,可用性,分区域容错性三者中的两个,另一个必须牺牲;

一致性

对于某个指定的客户端来说,读操作保证返回最新的操作结果;

可用性

非故障节点在河里的时间内返回河里的响应(不是错误和超时的响应)

分区容忍性

当出现网络分区后,系统能够继续陆行职责

一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区。

当你一个数据项只在一个节点中保存,那么分区出现后,和这个节点不连通的部分就访问不到这个数据了。这时分区就是无法容忍的。

提高分区容忍性的办法就是一个数据项复制到多个节点上,那么出现分区之后,这一数据项就可能分布到各个区里。容忍性就提高了。

然而,要把数据复制到多个节点,就会带来一致性的问题,就是多个节点上面的数据可能是不一致的。要保证一致,每次写操作就都要等待全部节点写成功,而这等待又会带来可用性的问题。

总的来说就是,数据存在的节点越多,分区容忍性越高,但要复制更新的数据就越多,一致性就越难保证。为了保证一致性,更新所有节点数据所需要的时间就越长,可用性就会降低。

这段话引用自知乎     作者:邬江

cap应用

在分布式环境下,p(分区容忍)必须选择,因为网络无法做到100%可靠,可能出现故障,所以分区必然选择

如果选择CA放弃P,当发生系统分区后,为了保证C,系统需要禁止写入,系统返回error,这又和A冲突了,因为A要求系统返回no error和no timeout,因此分布式系统理论上不能选择ca架构,只能选择CP或者Ap

CP

为了保证一致性,当发生分区现象后,N1节点上的数据已经更新数据到y,但由于网络分区,N1和N2中间的复制通道中断,数据y无法同步到N2,N2节点的数据还是x,这时客户端访问N2时,需要返回error,这种处理方式违反了可用性,因此CAP三者满足CP;

AP

客户端访问N2,N2把自己的数据x返回给客户端,但实际上最新数据已经是y了,这就不满足一致性要求,因此CAP中满足了AP,这里N2返回的数据虽然不是一个正确的数据,但是是一个合理的结果,x是旧数据,并不是错乱的值,只不过不是最新而已;

CAP关健细节

C与A之间的取舍可以在同一系统内衣非常细小的粒度反复发生,而每一次的决策可能以为具体的操作,乃至因为牵涉到特定的数据或用户而有所不同;

每个系统中都有多种数据,有的数据必须选择CP,有的数据必须选择AP,要减小选择的粒度,比如用户账号数据通常选择CP,而用户信息数据通常选择AP;

每年系统发生不可用的时间累积可能有几十分钟,我们不是永久放弃C或者A,要在分区发生时做一些操作,让分区故障恢复后,系统能恢复CA状态,最典型的方法就是分区故障后,系统根据日志进行恢复,重新达到CA,

上一篇下一篇

猜你喜欢

热点阅读