CAP为什么不能兼得

原文链接 : http://www.bugclosed.com/post/9

什么是CAP

所谓CAP原则,是指在分布式系统中Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)三者不能同时得到。

  • 一致性:在分布式系统中,一个数据存在多个副本的情况下,各个副本的值是否一致。
  • 可用性:当系统收到一个请求后,在一定时间之内,总是可以反馈一个结果给用户,无论成功还是失败。
  • 分区容错性:当网络出现分割后,系统仍然可以提供服务。

CAP拆解

在当今的基础网络中,存在不同的网络运营商,不同地域,不同的骨干线路等情况。比如在CDN厂商会按照运营商和地域将整个网络分成不同的“覆盖”,每个“覆盖”可以作为一个独立的服务节点提供覆盖内的用户访问。为了进行细分拆解,可以将“覆盖”看做分区隔离性中的“区”;

CA

假设不考虑分区(P)的情况下,只有一个分区(副本),副本的一致性自不必说,自然是一致的;可用性方面,一个节点的写入不需要同步到其他节点,可以高效完成。如果增加多个分区(提高分区容错性),数据的写入需要同步到多个节点(强一致性,所有节点同步成功后再返回用户),增加了同步时间和同步失败的可能性,降低了可用性;如果采用弱一致性,即写入操作在主节点成功后即返回用户结果,再通过异步方式同步到多个分区,那么会增加同步失败和数据丢失的几率,降低了一致性。

CP

假设不考虑可用性(A)的情况下,多个分区之间可以采用强一致性的机制,保证数据的高度一致性(要么都成功要么都失败)。比如某个分区出现了故障或者分隔,分区没有了响应,由于放弃了可用性,所以可以无限等待并不断重试直到网络恢复,分区可用后将副本数据同步到所有节点。

AP

假设不考虑一致性(C)的情况下,多个分区和副本可以提供高可用性。分区越多,用户越能就近访问,提供响应速度;放弃了一致性后,副本的写入操作可以写入主节点成功后即可返回成功,获得搞可用性,然后通过异步的方式将副本同步到多个分区节点上。

由此可见,CAP三者确实不能同时满足,只能根据具体的分布式业务场景做取舍和折中;比如银行系统可以牺牲可用性从而保障CP,响应慢一点(甚至网络故障暂停服务)总比账户资金出现错误更优。而很多提供互联网服务可以一定程度牺牲一致性来保障AP,因为互联网竞争激烈,追求的是用户体验和效率,希望用户随时随地能够高效获得服务,而一致性则通过一系列的措施做到最终一致性即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 分布式系统面临的第一个问题就是数据分布,即将数据均匀地分布到多个存储节点。另外,为了保证可靠性和可用性,需要将数据...
    olostin阅读 4,626评论 2 26
  • CAP理论断言任何基于网络的数据共享系统,最多只能满足数据一致性、可用性、分区容忍性三要素中的两个要素。但是通过显...
    他山之石头阅读 1,389评论 1 4
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,917评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,924评论 18 139
  • 走进大学新时代的大门之后,就意味着你要完完全全独立自主,你已经远离家长,远离曾经“热爱”你的老师。 虽然家里每个月...
    武越阅读 464评论 1 2