如果我正确理解了 CAP 定理,可用性意味着即使节点出现故障,集群也会继续运行。
我见过很多人(http://blog.nahurst.com/tag/guide)将RDBMS列为CA,但我不明白RBDMS是如何可用的,好像一个节点宕机,集群必须宕机保持一致性。
我对此唯一可能的答案是大多数 RDBMS 都是单个节点,因此没有“非故障”节点。但是,这似乎是一个技术问题,而不是真正的“可用性”,也绝对不是高可用性。
谢谢你。
如果我正确理解了 CAP 定理,可用性意味着即使节点出现故障,集群也会继续运行。
我见过很多人(http://blog.nahurst.com/tag/guide)将RDBMS列为CA,但我不明白RBDMS是如何可用的,好像一个节点宕机,集群必须宕机保持一致性。
我对此唯一可能的答案是大多数 RDBMS 都是单个节点,因此没有“非故障”节点。但是,这似乎是一个技术问题,而不是真正的“可用性”,也绝对不是高可用性。
谢谢你。
首先,让我澄清一下,RDBMS 中的一致性不同于分布式系统中的一致性。RDBMS(单一系统)将一致性应用于事务一致性,而在分布式系统中,一致性意味着系统中任何地方的视图(从任何节点读取)都是一致的。因此,不能就 CAP 定理讨论 RDMBS 单节点。这就像将苹果与橙子进行比较。
可以将具有主从的 RDBMS 与分布式系统进行比较。这里 RDBMS 可以配置为 CA/CP 或 AP。例如,MySQL 提供了一种配置系统的方法,即如果出现仲裁丢失(没有足够的辅助节点可用于提交日志复制),则集群不可用(CP 系统)。MySQL 还提供了一种配置,允许集群在 master 可用(CA 系统)时运行,但可能会丢失数据。SQL Server AlwaysOn 是一个 AP 系统,因为提交日志复制是异步的(即使在同步副本上)。
因此,RDBMS 可以是分布式世界中的任何 CA、CP 或 AP。
我相信您误解了 CAP-Availability 和 node-UP/DOWN 之间的关系。可用性是关于为每个收到的查询提供答案 - 当节点关闭时,它无法接收查询,因此如果您关闭部分或整个集群,CAP-Availability 属性将成立。尽管乍一看这听起来可能违反直觉,但通过关闭节点,您将保留 CAP-Availability 并改为放弃 CAP-Partition 容差。我最近发布了一个答案,其示例提供了一些说明。
简而言之:出现一个隔离节点 N 的分区。如果 N 收到请求,它可以:ii) 不回复以避免回复过时的结果,从而导致可用性下降,因为我们收到了请求但未发出回复。
或者,我们可以在 N 与集群的其余部分断开连接后立即关闭它,这允许我们保留 C 和 A,但删除 P,因为: i) N 不会收到任何请求;ii) 所有接收到的请求都将执行到全连接且一致的集群,因此它们都将以一致的值得到答复;iii) 集群不能容忍分区,因为它不能容忍分区——而是关闭分区节点。
在 CAP Theorem P 中,P 代表分区容差,即系统处理分区的能力(分区是孤立的集群 - 由于网络故障或任何其他原因......)。
在处理分区的分布式网络中,系统必须选择一致性或可用性。
在 RDBMS 的情况下,没有分区的机会(假设不是分布式的,这是正常情况),所以那些总是 CA。