架构师训练营 week6 - CAP 原理

用户头像
devfan
关注
发布于: 2020 年 07 月 15 日

CAP历史

CAP 定理(CAP theorem)又被称作布鲁尔定理(Brewer's theorem),是加州大学伯克利分校的计算机科学家埃里克·布鲁尔(Eric Brewer)在 2000 年的 ACM PODC 上提出的一个猜想。2002 年,麻省理工学院的赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)发表了布鲁尔猜想的证明,使之成为分布式计算领域公认的一个定理。对于设计分布式系统的架构师来说,CAP 是必须掌握的理论。

CAP理论

在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,另外一个必须被牺牲。

一致性(Consistency)

每次读取的数据都应该是最近写入的数据或者返回一个错误(Every read receives the most recent write or an error),而不是过期数据,也就是说,数据是一致的

可用性(Availability)

每次请求都应该得到一个响应,而不是返回一个错误或者失去响应,不过这个响应不需要保证数据是最近写入的(Every request receives a (non-error) response, without the guarantee that is contains the most recent write),也就是说系统需要一直都是可以正常使用的,不会引起调用者的异常,但是并不保证响应的数据是最新的。

分区容忍性(Partition Tolerance)

即使因为网络原因,部分服务器节点之间消息丢失或者延迟了,系统依然应该可以操作的(The system continues to operate despite an arbitrary number of messages being dropped (or deplayed) by the network between nodes)。

CAP理论的几个点

  • 当网络分发失效的时候,我们要么取消操作,这样数据就是一致的,但是系统却不可用;要么我们继续写入数据,但是数据的一致性就得不到保证。

  • 对于一个分布式系统而言,网络失效一定会发生,也就是说,分区耐受性是必须要保证的,那么在可用性和一致性上就必须二选一。

  • 当网络分区失效,也就是网络不可用的时候,如果选择了一致性,系统就可以返回一个错误码或者干脆超时,即系统不可用。如果选择了可用性,那么系统总是可以返回一个数据,但是并不能保证这个数据是最新的。



关于CAP理论,在分布式系统必须要满足分区耐受性的前提下,可用性和一致性无法同时满足。



用户头像

devfan

关注

还未添加个人签名 2017.11.12 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 week6 - CAP 原理