当只有部分节点能够填充地图数据时,如何配置Hazelcast直读映射?

时间:2017-01-06 17:17:24

标签: hazelcast

假设我在群集上运行了两种类型的Hazelcast节点:

  • " Leader" 节点 - 这些节点可以加载和填充Hazelcast地图M。领导者还将不时更新M中的值(基于外部资源)。
  • "关注者" 节点 - 这些节点需要阅读M

我的目的是让 Follower 节点触发将缺失的元素加载到M中(因此需要在 Leader 方面加载)。

粗略地说,从地图中获取元素的步骤可能如下所示:

IMap m = hazelcastInstance.getMap("M");
Object element = m.get(k);
if (iAmLeader()) { 
    Object fresh = loadByKey(k); // loading from external resource 
    return m.put(k, fresh);
} else {
    makeSomeLeaderPopulateValueForKey(k);
    return m.get(k);
}

你能提出什么方法?

注释

  1. 我希望关注者充当节点,而不仅仅是客户端,因为追踪者实例的数量远远超过领导者,我希望他们参与负载分配。
  2. 我可以构建另一个级别的服务,该服务仅在 Leader 节点上运行,并提供用于使用请求的密钥填充地图的界面。但这意味着要增加额外的通信和配置层,我希望上面提到的那种要求可以在单个Hazelcast集群中解决。

1 个答案:

答案 0 :(得分:0)

我想我可能已经以MapLoader的形式找到了答案(自从最初发布以来是编辑的,我已经确认这确实是这样做的方法)。

[2, 3, 2, 2]