加载并保留Hazelcast分布式地图

时间:2018-03-01 08:50:20

标签: java hazelcast

我在我的应用程序中使用 Hazelcast(3.8.1)作为缓存服务。经过hazelcast documentation之后,我对此几乎没有疑问:

  1. 如果我们使用 Write-Behind Persistence ,这是对其本地队列的异步调用,最终我们将其持久保存到db。 我的问题是,如果所有节点都关闭,那么这种情况会不会有数据丢失?
  2. 注意:我知道队列的一个副本也在备份节点中维护。但我的情况是,当所有节点都关闭时,我们可以丢失数据吗?

    1. hazelcast在关闭时是否保持脱机持久性并在启动时加载[对于所有节点]?
    2. 欣赏回应。

2 个答案:

答案 0 :(得分:1)

1 的答案很明显,适用于任何具有异步写入的内存系统。如果群集中的所有节点都出现故障,那么可能会导致数据丢失,因为系统最终会保持一致。

问题 2 :Hazelcast是一个内存缓存,其主要优势在于它。写入或加载来自持久存储应该是次要的,因为它与缓存系统的一些主要属性冲突(速度,我猜......)。

话虽如此,它允许你load from and write to persistent storage,同步(直写)或异步(后写)

如果您使用Hazelcast的主要原因是复制和分区(持久,一致的数据),那么您最好使用Mongodb等NoSql数据库。这很大程度上取决于您的使用模式,因为如果您期望读取的次数远远多于写入,那么它仍然有意义。

另一方面,如果你使用它的主要原因是速度,那么你需要的是更好地管理容错,这更多地与你的集群拓扑有关(也许你应该有跨数据中心复制)而不是持久性。除非您具有很强的一致性或交易要求,否则关注DC中“所有节点死亡”是非常典型的。

答案 1 :(得分:1)

是的,如果数据尚未持久保存到数据库,您将丢失内存中的数据。

OTOH,Hazelcast在企业版中持久化到磁盘Hot Restart。这有助于计划关闭整个群集或突然发生集群范围内的崩溃,例如断电。