首页 > 编程知识 正文

如何理解cap理论,cap定理详解

时间:2023-05-06 13:27:12 阅读:189984 作者:51

本文为原创文章,欢迎转载。 转载时附上正文的原文链接

前言众所周知,CAP理论是架构师在设计分布式系统的过程中,在处理数据完整性问题时必须考虑的基础级理论((圣经级别的,) v ) )。 这意味着,在分布式网络分区环境中,数据一致性、可用性和分区可接受性这三者之间最多只能保证两者,而不能同时保证三者。 关于CAP理论,我个人感觉刚接触就很容易理解,在分散环境中鱼和熊掌不可兼得的问题不是吗? 确实,从直观的角度来看,在多节点网络环境中,如果对数据一致性要求很高,可用性必然会受到损害。 反之亦然。

但是,在最近的公司内部技术共享会上,同事能顺便向我通俗易懂地说明一下CAP理论是如何理解的吗? 我问了一下在场的其他几个同事,大家也觉得可以好好说话。 为什么这么说呢,因为大家理解CAP理论,基本上是不知道是否知道的情况。 我问的第一个问题是,关系数据库似乎多采用CA,NoSql多采用AP,为什么很多关系数据库都支持主表式的分区复制功能关系数据库是CAP理论的例外吗?

理解的第一步:要彻底解释方差前提下的这个问题,首先需要理解的是CAP理论的主要场景是方差环境下,单体环境下几乎不考虑CAP问题。 如果您不知道什么是分布式场景,请参阅下图。 (此图借用自如何正确理解CAP理论。 图中顶部显示为“客户端”的电脑以外的部分(包括横向粗线和ABC三个节点)一起构成了分布式系统。

理解第二步: c、a、p的准确定义接下来,需要明确Eric Brewer大神对CAP三方的准确定义。 现在我们来借用维基百科CAP理论文中的c、a、p三者的定义。 (实际上,外国人的某个百科全书也曾试图参考,但似乎还不清楚。

consistencyavailabilitypartitiontoleranceeveryreadreceivesthemostrecentwriteoranerroreveryrequestreceivesa (responsewithoue ) ostrecentwritethesystemcontinuestooperatedespiteanarbitrarynumberofmessagesbeing ed (或)

一致性:一致性。 从原文翻译过来,从客户端到分布式系统,对数据的读取请求要么是读取最新的数据,要么是失败。 换句话说,一贯性是从分散系统的观点出发,对访问本系统的客户端的约定之一。 你很容易就会明白,是我向你回复错误,还是我向你回复绝对一致的最新数据,那是在强调数据是正确的。

Availability:的可用性。 翻译原文时,从客户端到分布式系统的数据读取请求都一定会接收数据,不会接收错误,但并不保证客户端接收到的数据一定是最新的。 换句话说,可用性是站在分布式系统的角度上对访问本系统的客户的另一个承诺。 我一定会把数据还给你。 我不会向你回复错误。 但是,我不保证数据是最新的。 我强调的是没有错误。

Partition tolerance:分区可接受性,这句话有点奇怪,直接看中文确实有点难懂。 那么,从原文的翻译来看,分布式系统应该一直保持运行,即使在不同节点之间同步数据,也会出现大量的数据丢失和数据同步延迟。

(PS:^V^,你看,包容度有多高,简直是打不完的帅气蚂蚁。 现在你可以理解为什么要使用tolerance容许度这个词了吧。 )

换句话说,分区的可接受性是从分布式系统的角度出发,对访问本系统的客户端的另一个约定。 我强调无论内部发生什么样的数据同步问题,都不会挂起。

理解步骤3 :连接起来,So easy在理解了三个字母的确切含义后,结合上图,应该很容易理解。

对于分布式系统来说,p是前提,必须保证。 为什么这么说呢,因为只要有网络的相互作用就一定会有延迟和数据丢失,必须接受这种情况,必须保证系统不能中断。 想想看。 如果出现了一点数据丢包,我们整个系统都挂起了,为什么我们还要分散呢? 因此,根据CAP理论,三者中最多只能同时保证两者的论断,对于任何分布式系统,设计时架构师可以选择的是c还是a,是保证数据的完整性,还是保证可用性,以免系统出错

PS:其实在维基百科的原文中也有这样一段。 说的也是上述意思。 我不翻译:

capisfrequentlymisunderstoodasifonehastochoosetoabandoneofthethreeguaranteesatalltimes.infact,thechoiceisreallybetwencon at all other times,no trade-off has to be made。

最后,回答开头我同事关于关系数据库的问题。 对我个人来说,如果关系数据库同时保证CA,这意味着它是一个独立的环境,而不是分布式环境。 在Master-Slave类的复制分布式环境中,缺省情况下有CP保障。 使用Mysql Master-Slave或Mssql复制订阅模型的同事应该知道,如果在复制主从数据时发生错误,导致数据不一致,则必须手动干预或重新同步

注:如有更多疑问,欢迎与私人朋友一起考虑学习。 我的联系方式可以在大脑链网上找到

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。