在本文中,我们将简要介绍在 Apache Cassandra 数据库中实现的 Gossip 协议。在本文中,我们将讨论 Gossip 协议和 Cassandra 如何实现节点之间的协调以及节点如何保持同步。
在 Cassandra 中,所有节点都是相同的并且具有对等架构,并且没有主从节点的概念。在 Cassandra 中,所有节点都通过八卦协议相互通信。 Gossip 是 Cassandra 节点用来使它们的数据相互一致的消息系统。
什么是八卦协议?
Gossip 是 Cassandra 节点、虚拟节点用来使它们的数据相互一致的消息系统,用于强制执行集群中的复制因子。所以,让我们把 Cassandra 集群想象成一个环形系统,其中每个节点都包含数据库中每个表的某个分区。并且,只能与相邻节点通信。
Cassandra 如何实现节点间的协调?
让我们考虑一个集群中有 6 个节点的示例。一二三四五六,你可以看到第三个节点已关闭。所以,有一个问题,Cassandra 在这种情况下会如何表现。因此,Gossip 是一种点对点通信协议,在该协议中,节点定期交换有关它们自己和它们所知道的其他节点的状态信息。
Gossip 协议每秒运行一次,并与集群中最多三个其他节点交换状态消息。
在 Cassandra 中,Gossip 协议非常有用,因为节点交换关于他们自己和他们所谈论的其他节点的信息,因此所有节点都可以快速了解集群中的其他节点。
节点如何保持同步?
如果任何节点出现故障,这就是 Gossip 协议的工作方式。让我们讨论 Gossip 协议定义。 Gossip 消息有一个与之关联的版本,因此在 Gossip 交换期间,其他信息会被特定节点的最新状态覆盖。
当我们有四个节点的法定人数并且两个节点不会有问题时,我们可以拆分。当网络恢复时,我们再次拥有一个由六个节点组成的集群,因此一切都已连接。然后,我们需要对作为这两个节点中的样式的状态做一些事情。因此,我们需要将仲裁集群中的这些新状态与其他节点合并。并且,Gossip 协议会选择最新的状态,所以有可能会丢失状态。