CAP定理指出,在一个分布式系统中,对于一致性、可用性、分区容错这三个特性,不可能同时满足,而是必须有所舍弃。我们设计分布式系统时,必须在三者之间(尤其是一致性和可用性之间)有所取舍和平衡。
作者:王克锋
出处:kefeng.wang/2018/08/01/distributed-cap/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。
CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),是分布式系统中的一个基本定理。
它指出任何分布式系统(Distributed System)中,最多具有一致性、可用性、分区容错这三个特性中的两个。
也就是说,三个特性无法兼顾,必须有所取舍。
我们假定一个非常简易的、只有 G1/G2 两台服务器构成的分布式系统:
G1/G2 之间可以相互通信,两者都有相同的变量v,初始值都是v0。
客户端 C 与 G1/G2 都可以通信,读写操作可以从 G1/G2 中任选。
初始状态,如下图:
客户端读取,如下图:
客户端写入,如下图:
一致性是指,各节点的数据保证一致(每次成功写入之后,无论从哪个节点读取,都能读取到最新数据),相当于向所有节点的写操作是原子操作(要么全部失败要么全部成功)。一致性有三种策略(CAP指的是强一致性):
不一致的情形,写操作至G1,但未(或尚未)同步至G2,就从G2读读取。如下图:
一致的情形,写操作至G1,成功同步至G2之后,才允许进行读操作。如下图:
可用性是指,每次向未崩溃的节点发送请求,总能保证收到响应数据(允许不是最新数据)。
参照前面“一致性”中的两种情形,可见一致性和可用性无法兼顾:
分区容错是指,容许节点 G1/G2 间传递消息的差错(延迟或丢失),而不影响系统继续运行。
分布式系统中,必须满足 CAP 中的 P,此时只能在 C/A 之间作出取舍。
CAP 经常被误解为“三选二”,但实际上必须满足P,然后在 C/A 之间做出选择。
反证法。假设可以同时满足一致性、可用性、分区容错这三个特性,由于满足分区容错,可以切断 G1/G2 的连线,如下图:
CAP 理论,被看成分布式系统(尤其是分布式存储)的理论基础。
对于一个分布式系统来说,CAP三者中,
一个还不错的策略是:保证可用性和分区容错,舍弃强一致性,但保证最终一致性,比如一些高并发的站点(秒杀、淘宝、12306)。最终近似于兼顾了三个特性。
WikiPedia - CAP theorem
CAP理论十二年回顾:”规则”变了
An Illustrated Proof of the CAP Theorem
Gilbert and Lynch’s paper - Perspectives on the CAP Theorem
本文发布于:2025-02-21 20:29:00,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/1740140980579176.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |