当前位置: 首页 > 知识库问答 >
问题:

CAP定理-可用性和分区容差

季凡
2023-03-14

当我试图理解CAP中的“可用性”(A)和“分区容差”(P)时,我发现很难理解各种文章中的解释。

我觉得a和P可以同时进行(我知道事实并非如此,这就是我无法理解的原因!)。

简单地解释一下,A和P是什么,以及它们之间的区别?

共有3个答案

诸俊才
2023-03-14

以下是我讨论CAP的方式,特别是关于P。

CA只有在您对单一服务器数据库(可能有复制功能,但一个“故障块”上的所有数据——服务器不被视为部分故障)满意的情况下才可能实现。

如果您的问题需要横向扩展、分布式和多服务器——网络分区可能会发生。您已经需要P了。我处理的问题很少适合单服务器始终范式(或者,正如Stonebraker所说,“分布式是表赌注”)。如果您能找到CA问题,传统的非横向扩展RDBMS等解决方案会提供很多好处。

对我来说,罕见:所以我们继续讨论AP和CP。

只有在有分区的情况下,才能在AP和CP操作之间进行选择。如果网络

让我们来讨论AP/CP的区别。

AP——当有网络分区时,让独立部分自由运行。

CP——当存在网络分区时,关闭节点或不允许读写,因此存在确定性故障。

我喜欢可以两者兼而有之的架构,因为有些问题是AP,有些是CP——有些数据库可以两者兼而有之。在CP和AP解决方案中,也有微妙之处。

例如,在AP数据集中,您可能同时存在不一致的读取和生成写入冲突——这是两种不同的AP模式。您的系统是否可以配置为具有高读可用性但不允许写冲突的AP?或者,您的AP系统能否通过强大灵活的解决方案来接受写入冲突?你最终会需要两者吗?还是你能选择一个只做一件事的系统?

在CP系统中,如果有小分区(单台服务器),您会获得多少不可用性?更大的复制会增加CP系统中的不可用性,系统如何处理这些权衡?

这些都是CP vs AP要问的问题。

布鲁尔的“12年后”帖子是这方面的一个好读物。我相信这将清晰地推进CAP辩论,并高度推荐。

http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed

白才艺
2023-03-14

认为P与C和A相等是有点错误的,而C,A,P中“三取二”的概念是误导性的。我解释CAP定理的简洁方式是,“在分布式数据存储中,在进行网络分区时,您必须选择一致性或可用性,而不能同时获得两者”。较新的NoSQL系统正试图关注可用性,而传统的ACID数据库更关注一致性。

你真的不能选择CA,网络分区不是任何人都想要的,它只是分布式系统的一个不受欢迎的现实,网络可能会失败。问题是,当这种情况发生时,您会为应用程序选择什么样的权衡。这篇文章从第一个提出这个术语的人那里,似乎很清楚地解释了这一点。

宿嘉庆
2023-03-14

一致性意味着整个集群中的数据是相同的,因此您可以从任何节点读取或写入数据,并获得相同的数据

可用性意味着即使集群中的节点出现故障也能访问集群。

分区容差意味着即使两个节点之间存在“分区”(通信中断)(两个节点都已启动,但无法通信),集群仍能继续运行。

为了同时获得可用性和分区容忍度,您必须放弃一致性。考虑您是否有两个节点,X和Y,在主-主设置中。现在,X和Y之间的网络通信中断,因此它们无法同步更新。此时,您可以:

A) 允许节点不同步(放弃一致性),或

b)考虑集群被关闭(放弃可用性)

所有可用的组合包括:

  • CA——所有节点之间的数据都是一致的——只要所有节点都在线——您可以从任何节点读/写数据,并确保数据是相同的,但如果您在节点之间开发分区,数据将不同步(并且在分区解决后不会重新同步)

您应该注意到,CA系统实际上并不存在(即使有些系统声称存在)。

 类似资料:
  • 我被couchDB和MongoDB的不同答案弄糊涂了(例如http://blog.scottlogic.com/2014/08/04/MongoDB-vs-couchdb.html这个博客告诉MongoDB是CP,couchDB是AP),但是这个答案告诉MongoDB是AP,couchDB是CP。) 谁能解决我的困惑吗?

  • CAP 原理 CAP 原理最早由 Eric Brewer 在 2000 年,ACM 组织的一个研讨会上提出猜想,后来 Lynch 等人进行了证明。 该原理被认为是分布式系统领域的重要原理。 定义 分布式计算系统不可能同时确保一致性(Consistency)、可用性(Availablity)和分区容忍性(Partition),设计中往往需要弱化对某个特性的保证。 一致性(Consistency):任

  • 主要内容:1.一致性/可用性/分区容错性,2.该怎么理解,3.CAP该如何取舍CAP理论作为分布式系统的基础理论,它描述的是一个分布式系统在以下三个特性中: 一致性(Consistency) 可用性(Availability) 分区容错性(Partition tolerance) 最多满足其中的两个特性。也就是下图所描述的。分布式系统要么满足CA,要么CP,要么AP。无法同时满足CAP。 1.一致性/可用性/分区容错性 分区容错性P:指的分布式系统中的某个节点或者网络分区出

  • 私有不兼容与私有兼容许可证的最尖锐区别,也就是GNU GPL与其他许可证的区别。因为GPL作者的主要目标是提升自由软件,他们故意使它们的许可证不可能让GPL代码混入私有程序。具体说来,在GPL的要求中(见http://www.fsf.org/licensing/licenses/gpl.html的全文)有这样两点: 所有衍生作品—也就是任何包含非琐碎量GPL代码的作品—也必须在GPL下分发。 对于

  • 我到处都看到MongoDB是CP。但当我深入挖掘时,我发现它最终是一致的。当你使用safe=true的时候是CP吗?如果是的话,那是不是意味着当我用safe=true写的时候,在得到结果之前会更新所有的副本?

  • 我找不到任何关于什么Java版本可以用于Android Gradle“源兼容性”和“目标兼容性”的选择的信息。 我可以获得当前的Java JDK路径,比如:'c://Program Files/Java/jdk1.7.0_45'到'1.7',那么选择是'1.7'还是'1.6'? 或者,如果您有一个到'1.8'的路径:'1.8'、'1.7'和'1.6'? 我如何确定哪些选择是可用的? 谢了!