2013-03-14 14 views
2

我目前正在做POC开发distributed, fault tolerant, ETL ecosystem。我已选择Hazelcast作为我的clustering (data+notification)的用途。通过Hazelcast资源搜索需要我to this link,它完全符合我的想法,使用基于地图的解决方案。Hazelcast通过直接写入地图存储启动前的预计

我需要理解一点。在此之前,请允许我给出我们架构的典型概念:

we have 2 nodes A,B running our server instance clustered through hazelcast。其中之一是听众接受请求(但可以在故障转移时更改),请说A.

A获取请求并将其放到分布式映射中。该映射是由持久性存储支持的直写式写入,并且在节点上配置单个内存备份。

每个实例都有一个本地地图条目侦听器,该条目侦听器在条目添加事件时会处理该条目,然后将其从分布式映射中删除。

这是按预期工作。

问:

说10名的请求已经收到,每个节点上有5分发。每个节点上的2个条目已经被处理,现在两个实例都崩溃了。

因此,现在在支持数据存储中共有6个条目。

现在我们调出两个实例。按照文件 - “As of 1.9.3 MapLoader has the new MapLoader.loadAllKeys API. It is used for pre-populating the in-memory map when the map is first touched/used"

我们通过简单地加载所有存在于存储中的键值实现loadAllKeys()

  1. 这是否意味着有可能在那里,这两个实例中,现在将加载6。项并处理它们(从而导致重复处理)?或者是它在一个同步的方式处理,以便装载在集群做一次?

  2. On server startup I need to process the pending entries(如果有的话)。我看到的数据是加载,但entryAdded事件不会被触发。如何使entryAdded事件触发(或其他任何优雅的方式,通过这种方式,我将知道启动时有未决的条目)?

请求建议。

感谢, Sutanu

+0

对于到目前为止的第二个问题,我有一个方法可以“获得”“本地”keySet并处理它们。这是Hazelcast初始化后的一次调用。我想知道这是否是我能做的最好的。 – 2013-03-14 10:12:01

回答

1
  1. 上初始化,loadAllKeys()将被调用,这将返回所有6个键在持久性存储。然后每个节点将选择它拥有的密钥并仅加载它们。所以A可能加载2个条目,而B加载剩余的4个。

  2. store.load不会触发条目侦听器。这样如何:在初始化之后,在注册侦听器之后,您可以获取localEntries并处理现有的。

+0

感谢您在1上进行确认。对于2,是的,现在我正在做一些类似的事情,正在考虑您是否会采用这种方式。 – 2013-03-14 13:21:13

+0

我还有一个问题。如果我在这样的体系结构下将备份计数保持为0,那么在这种情况下,如果一个节点失败,那么尽管该条目仍将存在于数据存储中,但不会故障转移到任何其他节点(除非新增节点启动)。这是一个正确的理解?基本上我有兴趣了解具有数据存储的群集如何支持映射,但没有备份会表现出来。谢谢你的帮助。 – 2013-03-14 14:16:17