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