CAP 原理
一致性(consistency):数据在访问任何节点读取的结果是一致的,要么是最近写入的数据,要么是返回一个错误。
可用性(availability):系统提供的服务必须一直处于可用状态,对每一个操作的请求必须在有限时间内返回一个正常的结果,而不是返回错误或失去响应
分区耐受性(Partition tolerance):系统即使部分服务器节点之间消息丢失或者有延迟,但不影响整个系统的可用性。
假设有三个数据节点,我们同时往节点A和节点B写数据,当网络分区A失效发生的时候,我们要么取消操作,这样数据就是一致的,但是系统却不是可用的;要么我们继续写入数据,但是数据的一致性就得不到保证。
对于一个分布式系统而言,网络失效是一定会发生,也就是说,分区耐受性是必须要保证的,那么在可用性和一致性上就必须二选一。 当网络分区失效,也就是网络不可用的时候,如果选择了一致性,系统就可能返回一个错误码或者干脆超时,即系统不可用。
如果选择了可用性,那么系统总是可以返回一个数据,但是并不能保证这个数据是最新的。 所以,关于CAP 原理,更准确的说法是,在分布式系统必须要满足分区耐受性的前提下, 可用性和一致性无法同时满足。
但是也并不是说,保证了其中2点后,就要完全抛弃另外一点。只是相对的要做一些牺牲。比如在保证CP的情况下,虽然没办法保证高可用性,但这不意味完全放弃可用性,我们可以通过合理的设计尽量的提高可用性,比如允许响应时间延迟或者放弃部分功能。同理,在AP的情况下,也可以尽量的保证数据的一致性,或者实现弱一致性,即最终一致性。
评论