我目前正在POC
为开发一个distributed, fault tolerant, ETL ecosystem
. 我Hazelcast
为我的clustering (data+notification)
目的选择了。谷歌搜索 Hazelcast 资源将我带到这个链接,它完全符合我的想法,使用基于地图的解决方案。
我需要明白一点。在此之前,请允许我对我们的架构给出一个规范的想法:
说we have 2 nodes A,B running our server instance clustered through hazelcast
。其中之一是接受请求的侦听器(但可以在故障转移时更改),例如 A。
A 获取请求并将其放入分布式地图。此映射由持久存储支持直写,并且在节点上配置单个内存备份。
每个实例都有一个本地映射条目监听器,它在条目添加事件时会(asynchronous/queuing)
处理该条目,然后将其从分布式映射中删除。
这按预期工作。
问题:
假设已收到 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()
通过简单地加载存储中存在的所有键值来实现。
那么这是否意味着有可能两个实例现在都将加载 6 个条目并处理它们(从而导致重复处理)?还是以同步方式处理,以便在集群中仅加载一次?
On server startup I need to process the pending entries
(如果有的话)。我看到数据已加载,但未触发 entryAdded 事件。如何使 entryAdded 事件触发(或任何其他优雅的方式,通过它我将知道启动时有待处理的条目)?
请求建议。
谢谢, 苏塔努