标签:style 分区 write following car 客户 不可用 tail 产生
wiki上这样定义CAP:it is impossible for a distributed data store to simultaneously provide more than two out of the following three guarantees。
首先CAP是针对分布式数据存储系统来说的,然后该理论指出了系统最多只能保证CAP三项中的两项。
那么CAP是哪三项呢?
Consistency | Availability | Partition tolerance |
---|---|---|
Every read receives the most recent write or an error | Every request receives a (non-error) response – without guarantee that it contains the most recent write | The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes |
一致性,每一个读操作都会读到最新数据;
可用性,每一个请求(读或写)都会收到非错误响应(即操作成功),但不保证读请求读到的是最新数据;
分区容忍性,即便节点间无法正常通信(从而产生分区),整个系统仍然可以照常运行。
假设我们用一台服务器A对外提供存储服务,为了避免这台服务器宕机导致服务不可用,我们又在另外一台服务器B上运行了同样的存储服务。每次用户在往服务器A写入数据的时候,A都往服务器B上写一份,然后再返回客户端。一切都运行得很好,用户的每份数据都存了两份,分别在A和B上,用户访问任意一台机器都能读取到最新的数据(一致性)。
不幸的事情发生了,A和B之间的网络断开导致A和B无法通信,也就是说网络出现了分区,那么用户在往服务器A写入数据的时候,服务器A无法将该数据写入到服务器B。这时,服务器A就必须要做出一个艰难的选择:
CAP就是要在异常情况下做出抉择。
网络分区准确地说是指两台机器无法在期望的时间内完成数据交换。这不仅仅是指两台机器之间的网络完全断开了,还可能有其他情况产生网络分区,比如对方机器宕机了,网络延时等情况。分布式系统是基于网络的多节点系统,因此,在分布式系统中,通常是无法放弃Partition Tolerance的,也就只能在CP和AP之间做选择了。如果有个分布式系统号称是CA的,那一定是扯淡。
可用性和一致性之间的选择不是非此即彼的,而是根据业务的需求在它们两者之间做妥协。比如,我们可以放弃对强一致性的追求,让其变成最终一致性,也就是说当服务器A不能把数据传给服务器B时,它先将数据缓存在其本地,等到网络恢复以后再将数据传给服务器B。这样,服务还是可用的,只是在一定的时间窗口内两者的数据是不一致的。
对网络分区的处理有以下几个步骤:
参考:http://blog.csdn.net/jewes/article/details/43495639
https://www.zhihu.com/question/54105974?from=profile_question_card
标签:style 分区 write following car 客户 不可用 tail 产生
原文地址:http://www.cnblogs.com/holoyong/p/7629315.html