1

我正在考虑持久性的故障转移方案,并且正在考虑应如何正确实施它。根据以前的经验,我认为如果底层持久性无法存储实体,它应该能够在问题得到解决后尽快存储它。就缓存在地图中的 Hazelcast 实体而言,具有管理其与 MapStore 关系的状态。

如果 MapStore 实现无法存储会发生什么?如何使实体重新应用于 MapStore 业务?

更新:

除非底层持久化业务可用,否则在 MapStore 本身中实现故障转移以将条目保留在队列中不是问题,但这打破了分布式内存的想法。另一方面,如果出现在 MapStore 中的数据将被放回缓存,则可能会导致不一致,不是吗?

4

1 回答 1

6

可以配置持久性

  • 写通
  • 后面写。

在 write through 的情况下,如果 MapStore 由于某种原因失败,您将在 map.put 上得到异常。

在写入延迟的情况下,每 10(默认)秒 Hazelcast 会将所有脏条目作为批量保存。如果 MapStore 抛出异常,这些条目将被标记为脏,并且在下一次运行时,它们会再次传递给 MapStore。基本上 Hazelcast 将继续存储它们,直到 MapStore.storeAll() 成功。据我了解,您的案例属于此类,Hazelcast 确实提供了故障转移。

于 2013-05-07T02:08:56.323 回答