我在我的应用程序中使用 Hazelcast(3.8.1)作为缓存服务。经过hazelcast documentation之后,我对此几乎没有疑问:
注意:我知道队列的一个副本也在备份节点中维护。但我的情况是,当所有节点都关闭时,我们可以丢失数据吗?
欣赏回应。
答案 0 :(得分:1)
1 的答案很明显,适用于任何具有异步写入的内存系统。如果群集中的所有节点都出现故障,那么可能会导致数据丢失,因为系统最终会保持一致。
问题 2 :Hazelcast是一个内存缓存,其主要优势在于它。写入或加载来自持久存储应该是次要的,因为它与缓存系统的一些主要属性冲突(速度,我猜......)。
话虽如此,它允许你load from and write to persistent storage,同步(直写)或异步(后写)
如果您使用Hazelcast的主要原因是复制和分区(持久,一致的数据),那么您最好使用Mongodb等NoSql数据库。这很大程度上取决于您的使用模式,因为如果您期望读取的次数远远多于写入,那么它仍然有意义。
另一方面,如果你使用它的主要原因是速度,那么你需要的是更好地管理容错,这更多地与你的集群拓扑有关(也许你应该有跨数据中心复制)而不是持久性。除非您具有很强的一致性或交易要求,否则关注DC中“所有节点死亡”是非常典型的。
答案 1 :(得分:1)
是的,如果数据尚未持久保存到数据库,您将丢失内存中的数据。
OTOH,Hazelcast在企业版中持久化到磁盘Hot Restart。这有助于计划关闭整个群集或突然发生集群范围内的崩溃,例如断电。