17

如果我正确理解了 CAP 定理,可用性意味着即使节点出现故障,集群也会继续运行。

我见过很多人(http://blog.nahurst.com/tag/guide)将RDBMS列为CA,但我不明白RBDMS是如何可用的,好像一个节点宕机,集群必须宕机保持一致性。

我对此唯一可能的答案是大多数 RDBMS 都是单个节点,因此没有“非故障”节点。但是,这似乎是一个技术问题,而不是真正的“可用性”,也绝对不是高可用性。

谢谢你。

4

3 回答 3

14

首先,让我澄清一下,RDBMS 中的一致性不同于分布式系统中的一致性。RDBMS(单一系统)将一致性应用于事务一致性,而在分布式系统中,一致性意味着系统中任何地方的视图(从任何节点读取)都是一致的。因此,不能就 CAP 定理讨论 RDMBS 单节点。这就像将苹果与橙子进行比较。

可以将具有主从的 RDBMS 与分布式系统进行比较。这里 RDBMS 可以配置为 CA/CP 或 AP。例如,MySQL 提供了一种配置系统的方法,即如果出现仲裁丢失(没有足够的辅助节点可用于提交日志复制),则集群不可用(CP 系统)。MySQL 还提供了一种配置,允许集群在 master 可用(CA 系统)时运行,但可能会丢失数据。SQL Server AlwaysOn 是一个 AP 系统,因为提交日志复制是异步的(即使在同步副本上)。

因此,RDBMS 可以是分布式世界中的任何 CA、CP 或 AP。

于 2019-01-24T03:25:38.543 回答
1

我相信您误解了 CAP-Availability 和 node-UP/DOWN 之间的关系。可用性是关于为每个收到的查询提供答案 - 当节点关闭时,它无法接收查询,因此如果您关闭部分整个集群,CAP-Availability 属性将成立。尽管乍一看这听起来可能违反直觉,但通过关闭节点,您将保留 CAP-Availability 并改为放弃 CAP-Partition 容差。我最近发布了一个答案,其示例提供了一些说明。

简而言之:出现一个隔离节点 N 的分区。如果 N 收到请求,它可以:ii) 不回复以避免回复过时的结果,从而导致可用性下降,因为我们收到了请求但未发出回复。

或者,我们可以在 N 与集群的其余部分断开连接后立即关闭它,这允许我们保留 C 和 A,但删除 P,因为: i) N 不会收到任何请求;ii) 所有接收到的请求都将执行到全连接且一致的集群,因此它们都将以一致的值得到答复;iii) 集群不能容忍分区,因为它不能容忍分区——而是关闭分区节点。

于 2020-10-19T13:30:39.350 回答
-1

在 CAP Theorem P 中,P 代表分区容差,即系统处理分区的能力(分区是孤立的集群 - 由于网络故障或任何其他原因......)。

在处理分区的分布式网络中,系统必须选择一致性或可用性。

在 RDBMS 的情况下,没有分区的机会(假设不是分布式的,这是正常情况),所以那些总是 CA。

于 2016-03-11T07:44:15.963 回答