节点间通信机制

Internode Communication mechanism

我正在尝试制作一个 Java 集群用于学习目的。我将使用 TCP 进行节点间通信。我遇到的问题是我不确定如何连接到节点。

也就是说,假设我有一个 10 节点集群:是否每个节点都必须连接到所有其他节点?如果没有,这是怎么做到的?它有多可靠?

在我看来,与每个节点建立套接字连接效率很低。

谁能告诉我正确的路径?

避免每个节点通过单播连接连接到所有其他节点。如果你这样做,所需的连接数等于 (n²-n).

你可以做的是组播通信,例如Apache Tribes。 多播有缺点,例如所有主机都必须在同一个子网中(除非你想弄乱 TTL 字段,我建议避免这种情况)。

另一种选择是使用像 RabbitMQ or ActiveMQ. See also JMS 这样的消息代理。在这种情况下,每个节点都与消息代理建立常规的单播连接,并读取和写入消息队列。在这种情况下,节点可能位于不同的子网中。我建议仔细看看这个选项。