简单单词布鲁尔的CAP定理

当您开始讨论分布式体系结构时,很可能会遇到这种CAP理论(或Brewer定理)。CAP代表一致性,可用性和分区容忍度。它希望系统设计师在最终设计中在以上三个竞争保证之间做出选择。据说不可能在系统中实现所有三个保证,并且您必须在系统的三个保证中最多选择两个。

好。定义似乎简单快捷。可是等等 !!您所说的一致性,可用性和分区容忍度是什么意思?让我们在分布式计算环境中定义这些术语。

  1. 一致性

    一致的服务将完全运行或根本不运行。在非分布式系统中,ACID属性中的一致性为“ C”,这适用于数据库事务的理想属性,这意味着数据将永远不会持久保存(回滚),从而打破了某些预设约束。

    在分布式环境中,一致性意味着所有正在从群集中读取数据的客户端程序在任何给定时间点都可以看到相同的数据。从两个节点获取数据的两个客户端应该根本看不到不同的数据。

  2. 可用性

    可用性意味着– 无论集群内部发生什么,您都应该能够检索存储在分布式系统中的数据。如果发出请求,则必须从系统得到响应;即使集群中的一个节点(或多个节点)发生故障。

  3. 分区容限

    分区容限意味着即使两个节点(两个节点都在上,但无法通信)之间存在“分区”(通信中断),群集(作为一个整体)仍可以继续运行。

    不允许出现少于总网络故障的一组故障,从而导致系统无法正确响应。

因此,CAP定理使您可以选择想要添加到系统中的3个保证中的任意两个。您不能保证单个分布式系统中的全部3个,例如,为了获得可用性和分区容限,您必须放弃一致性。

CAP定理例子

不管您读过什么,大部分都是定义部分,对于初学者来说有点复杂。因此,让我们用更简单的英语来理解。

您需要设计一个由4个数据节点组成的分布式集群。复制因子为2,即任何写入集群的数据都必须写入2个节点上;因此,当发生故障时,一秒钟即可提供数据。现在,尝试对此要求应用CAP定理。在分布式系统中,随时可能发生两件事,即节点故障(硬盘崩溃)或网络故障(两个节点之间的连接断开)[ 分布式计算的谬误 ]。

我们将尝试根据这些事实/假设来设计我们的系统。

CP [一致性/分区容差]系统

在分布式系统中,在读取数据时,一致性是由一种投票机制决定的,在该机制中,所有拥有数据副本的节点都同意他们拥有所请求数据的“相同副本”。现在,假设我们请求的数据存在于两个节点N1和N2中。客户端尝试读取数据;而且我们的CP系统也可以容忍分区,因此发生了预期的网络故障,并且将N2检测为DOWN。现在系统无法确定N1的数据副本是否为最新;它也可能是陈旧的。因此,系统决定将ERROR事件发送给客户端。在这里,系统选择了数据一致性而不是数据可用性。

同样,如果复制因子为2,则在写入数据时,系统可能会拒绝写入请求,直到找到两个运行状况良好的节点以一致的方式完全写入数据为止。

AP [可用性/分区容限]系统

如果在上述情况下系统而不是发送错误(如果N2处于关闭状态)怎么办?它发送从N1接收的数据。客户端得到了数据,但是过去存储在系统中的是最新数据副本吗?你不能决定。您选择可用性而不是一致性。这些是AP系统。

CA [一致性/可用性]系统

在分布式环境中,我们无法避免CAP的“ P”。因此,我们必须在CP或AP系统之间进行选择。如果我们希望拥有一个一致且可用的系统,那么我们就必须忽略分区容忍度,只有在非分布式系统(例如oracle和SQL Server)中才有可能。

CAP定理例子
CAP定理例子
在当今世界中,我们可以在分布式系统中实现这三个目标(如果不是全部,则至少是部分)。例如,Cassandra中的可调一致性

CAP定理就像关于软件项目的古老玩笑一样:您可以在TIME,BUDGET或CORRECT中使用它。选择任意两个🙂

学习愉快!

参考http : //www.julianbrowne.com/article/viewer/brewers-cap-theorem

saigon has written 1440 articles

Leave a Reply