Mongo vs cassandra:单点故障

Mongo vs cassandra: single point of failure

在 Cassandra vs Mongo 的辩论中,据说 mongo 具有主从架构,因此它具有单点故障(master),因为当 master 发生故障时,slave 节点需要时间决定新主人,因此 window 停机时间。

使用 Cassandra,我们没有这个问题,因为所有节点都是平等的。 但是 Cassandra 也有一个系统,其中节点使用八卦协议来保持自身更新。在八卦协议中,需要最少数量的节点才能参与。假设如果其中一个参与节点出现故障,则需要一个新节点来替换它。但是产生一个新的替代节点需要时间,这种情况类似于mongo.

中的master故障。

那么2在单点故障方面有什么区别呢?

你对 Cassandra 的假设不正确,所以请允许我解释一下。

Gossip 不需要多个节点即可工作。有可能有一个 single-node 集群并且八卦仍然有效,所以这个说法是不正确的:

In gossip protocol a minimum number of nodes are needed to take part.

为了最佳实践,我们建议每个数据中心有 3 个副本(复制因子为 3),因此每个数据中心至少需要 3 个节点。复制因子为 3 时,您的应用程序可以在 ONELOCAL_ONE 或推荐的 LOCAL_QUORUM 一致性级别的节点中断中幸存下来,因此这些陈述也是不正确的:

Suppose if one of the participating node goes down, then a new node needs to replace it. But it would take time to spawn a new replacement node, and this is a situation similar to master failure in mongo.

将单个 points-of-failure 引入 Cassandra 集群的唯一方法是:

  • 在单个物理主机上部署多个实例(不推荐)
  • 对所有节点使用共享存储(例如 SAN、NAS、NFS)(不推荐)

作为旁注,这是一个友好的警告,其他用户可能会投票关闭您的问题,因为通常不赞成比较,因为答案通常是 based on opinions。干杯!

此外,您对 MongoDB 的假设也不正确。

Master-Slave 复制已在 MongoDB 4.0 版(当前版本为 5.0)中删除,现在它使用 Replica Sets

通常您连接到一个副本集而不是单个副本集成员。当前 PRIMARY 关闭时,新的 PRIMARY 将 elected 并且您的应用程序将自动 re-connect 并重试对新 PRIMARY 的写入操作。它可能会挂起几秒钟,但应该会继续 运行。