【发布时间】:2022-03-23 22:10:43
【问题描述】:
我在阅读 CAP 定理时感到困惑。对于 CA,我以 Oracle 为例。 一致性:Oracle 是一致的,因为我们没有多个节点并达成一致。 可用性:它只有一个节点,为什么它是高可用的,如果它崩溃了怎么办?
【问题讨论】:
标签: cassandra cap-theorem
我在阅读 CAP 定理时感到困惑。对于 CA,我以 Oracle 为例。 一致性:Oracle 是一致的,因为我们没有多个节点并达成一致。 可用性:它只有一个节点,为什么它是高可用的,如果它崩溃了怎么办?
【问题讨论】:
标签: cassandra cap-theorem
Oracle 拥有真正的应用集群 (RAC) 技术,有助于在多个节点(服务器)上保持高可用性。我不确定 RAC 集群中服务器的限制,但可以有很多(2、3、5、8 等)。如果 DBA 设计正确,他们可以为应用服务分配多个节点(主动-主动或主动-被动)。如果一个节点变得不可用、计划内或计划外,服务将故障转移(主动被动)或继续在其他节点上运行(主动-主动)。 Oracle 还拥有非常先进的技术,可以在节点不可用时继续读取活动甚至写入活动。如果设计正确,在某些情况下用户甚至不会知道节点不可用。 RAC 的“症结”是存储。 Oracle RAC 使用共享存储。如果存储出现问题,那么 RAC 集群中的所有节点都会受到影响。它不像 Cassandra 那样分发。硬件有许多功能可以防止存储问题(例如 RAID)。但是,最重要的是,无论出于何种原因,如果存储受到影响,RAC 也会受到影响。 Oracle 确实提供了分片,这是他们对分布式系统的回答,但它并不那么优雅。没有它,你就没有其他分布式系统所拥有的分布式部分(分区)。
说了这么多,希望能回答您关于 Oracle 高可用性的问题。
-吉姆
【讨论】:
如果单节点集群崩溃,您就不再拥有集群 - 推理 CAP 定理是否仍然有意义?
我相信只有当您至少有一个节点并且确实发生分区时才有意义。有多个节点,一个接收到消息但无法到达集群的其余部分,它可以做什么?它可以: 1)回复并成为A而不是C; 2) 不回复,变成C而不是A。
如果您只有一个节点,则没有“集群的其余部分”可以到达,因此您既是 C 又是 A - 您不是 P,因为您通过避免分区而不是容忍分区来“解决”问题。
更多示例请参见this answer。
【讨论】: