我关注持久性的故障转移场景,我正在考虑应该如何正确实现它。根据之前的经验,我认为如果底层持久性无法存储实体,它应该能够在问题解决后立即存储它。在Hazelcast中,在地图中缓存的实体具有管理它与MapStore的关系的状态。
如果MapStore实现无法存储,会发生什么?如何让实体重新应用于MapStore业务?
更新
在MapStore本身实现故障转移以将条目保留在队列中不是问题,除非底层持久性业务可用,但这会打破分布式内存的想法。另一方面,如果MapStore中出现的数据将被放回缓存,它可能会导致不一致,不是吗?
答案 0 :(得分:6)
可以配置持久性
如果是直写,如果MapStore由于某种原因失败,你将在map.put上获得异常。
如果写入后面,每隔10(默认)秒Hazelcast会将所有脏条目保留为批量。如果MapStore抛出异常,那些条目将标记为脏,在下一次运行中,它们将再次传递给MapStore。基本上Hazelcast将继续存储它们,直到MapStore.storeAll()成功。根据我的理解,您的案例属于此类别,Hazelcast确实提供了故障转移。