在 Erlang 集群管理中使用 gossip 协议

Posted

技术标签:

【中文标题】在 Erlang 集群管理中使用 gossip 协议【英文标题】:Use of gossip protocol in Erlang cluster management 【发布时间】:2015-11-19 22:44:26 【问题描述】:

我是 Erlang 以及分布式计算的新手。我们是一个小团队,正在尝试构建一个小型消息服务器。我们正在研究如何管理集群状态的一件事 - 我们在 Erlang 开源项目中遇到了一些自定义实现,例如 Riak、rabbitMq、ejabbered 和 Vernemq。

似乎 Erlang 社区正在转向使用 gossip 协议进行集群管理 - 我看到最近关于 RabbitMQ 的帖子 (https://groups.google.com/forum/#!searchin/rabbitmq-users/gossip$20protocol/rabbitmq-users/jvQQy30kLTI/hIDFw94SddQJ

我的问题是 - 除了 gossip 协议之外,还有其他方法可以进行集群管理吗?还有什么是八卦协议的开源erlang实现。在考虑 erlang 节点管理时需要考虑哪些因素?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

我也不是分布式计算专家,所以我的回答可能有问题,但无论如何。 一切都取决于您的集群状态是什么以及您有什么要求。

如果你必须保证每个集群参与者之间状态的一致性,你最终会得到某种分布式共识机制,比如 zk、paxos 或 raft。

如果您需要高可用性,您将需要一些基于 gossip 的协议,并让您的应用意识到可能的数据不一致(就像 Riak 对它的 CRDT 数据类型和矢量时钟所做的那样)。

如果您不知道自己需要什么,我会选择第一个选项,因为从开发人员的角度来看这很容易。如果我清楚地理解第一个选项不再是一个选项,我会选择第二个选项;)

【讨论】:

以上是关于在 Erlang 集群管理中使用 gossip 协议的主要内容,如果未能解决你的问题,请参考以下文章

cassandra gossip 协议和 phi_threshold 是如何工作的?

Cassandra教程---- 节点间交互(gossip)

Consul的使用一 之Consul的架构

了解 Gossip 协议

浅谈集群版Redis和Gossip协议

基础算法Gossip协议