gpt4 book ai didi

hazelcast - hazelcast 使用什么算法来寻找主节点

转载 作者:行者123 更新时间:2023-12-03 06:55:08 27 4
gpt4 key购买 nike

我正在研究hazelcast用于以多播方式查找主节点的算法。首先我找到了查找主节点的函数:com.hazelcast.cluster.MulticastJoiner.findMasterWithMulticast()

private Address findMasterWithMulticast() {
try {
if (logger.isFinestEnabled()) {
logger.finest("Searching for master node. Max tries: " + maxTryCount.get());
}
JoinRequest joinRequest = node.createJoinRequest();
while (node.isActive() && currentTryCount.incrementAndGet() <= maxTryCount.get()) {
joinRequest.setTryCount(currentTryCount.get());
node.multicastService.send(joinRequest);
if (node.getMasterAddress() == null) {
//noinspection BusyWait
Thread.sleep(PUBLISH_INTERVAL);
} else {
return node.getMasterAddress();
}
}
} catch (final Exception e) {
if (logger != null) {
logger.warning(e);
}
} finally {
currentTryCount.set(0);
}
return null;
}

该函数的作用只是向同一集群中的其他节点发送 joinRequest。函数 com.hazelcast.cluster.MulticastJoiner.onReceivedJoinRequest(JoinRequest) 处理 joinRequest。

public void onReceivedJoinRequest(JoinRequest joinRequest) {
if (joinRequest.getUuid().compareTo(node.localMember.getUuid()) < 0) {
maxTryCount.incrementAndGet();
}
}

它只是增加了trycount。这是什么意思?如何选择主节点?希望得到帮助。

最佳答案

在多播发现中,每个节点在启动加入过程之前计算自己的maxTryCount。 maxTryCount 是该特定节点在声明自己为主节点之前将发布的加入消息的最大数量。

它是使用一些参数计算得出的,例如多播超时、IP 地址和节点端口等。请参阅 MulticastJoiner.calculateTryCount() 。因此,这里的主要目的是每个节点(很可能)将具有不同的最大尝试计数。

此外,当节点收到加入请求时,如果 pure functionmaxTryCount 会增加 1。在 MulticastJoiner.onReceivedJoinRequest() 内定义返回 true:

joinRequest.getUuid().compareTo(node.localMember.getUuid()) < 0

这是为了使两边的 maxTryCount 数字发散。

一旦节点发布 maxTryCount 加入消息,它就会声明自己为主节点(最老的成员)并开始接受/响应加入请求。

关于hazelcast - hazelcast 使用什么算法来寻找主节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41776429/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com