【问题标题】:Does Hazelcast store MultiMap values in the local instance when backup is disabled?禁用备份时,Hazelcast 是否将 MultiMap 值存储在本地实例中?
【发布时间】:2019-03-07 09:42:35
【问题描述】:

我正在配置一个没有备份的 Hazelcast Multimap(故意):

    config.getMultiMapConfig(SESSIONS_MAP)
            .setBackupCount(0)
            .setAsyncBackupCount(0)
            .setValueCollectionType(MultiMapConfig.ValueCollectionType.SET);

我的目标是每个实例在 MultiMap 中存储自己的值,这样当服务器消失时,这些值也会丢失。以上配置正确吗?

示例:集群中的服务器实例托管用户会话。我想将用户存储在 MultiMap 中,以便每个用户物理存储在本地实例上,但其他实例可以查找用户会话存在的位置。当服务器崩溃时,用户会话消失,MultiMap 中的条目也会消失。 [用户实际上存储在房间中,例如MultiMap<roomId, Set<userId>>,其中一个房间可能跨越多个实例。如果一个实例出现故障,房间可能会存活,但我希望当前实例上的用户在 MultiMap 中也变得不可用。]

只有在保证上述条件的情况下:在受控关闭中,是否值得在关闭前清理本地条目,还是让实例消失更便宜?

https://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#configuring-multimap 的手册并没有清楚地说明实际发生的情况(或者我太盲目而无法找到它)。

【问题讨论】:

    标签: java hazelcast multimap


    【解决方案1】:

    如果您将备份计数设置为零,则意味着每个条目将仅存储在一个分区(主分区)中。但这并不意味着分区将托管在“本地”集群节点上。

    存储任何条目的分区由散列算法确定,但分区到集群节点的映射会随着集群成员的变化(添加或删除节点)而改变。所以我不认为试图操纵哈希码是一个好方法。

    由于您提到“本地实例”,我猜您是在嵌入式模式下使用 Hazelcast,并且 Hazelcast 集群节点位于托管“房间”的同一台服务器上。你可能想要配置一个 MembershipListener;每当节点离开集群时,都会通知此侦听器,然后侦听器可以删除与托管在该节点上的房间中的用户会话相关的地图条目。

    【讨论】:

      【解决方案2】:

      对于基于分区的分布式系统来说,这是一个错误的用例。当您存储在分区分布式数据结构(例如 Map 或 MultiMap)中时,您无法控制哪个分区将托管您的键值数据。数据的主机分区由应用于密钥的一致散列算法确定。这既适用于写入操作,也适用于读取操作。启用备份后,数据会复制到每个节点的备份分区中,以便在节点故障时恢复数据。

      因此,在您的情况下,您甚至不知道某个特定条目是否确实是您的实例的本地条目(除非您使用 Hazelcast API 手动记录此键分区映射)。您正在查找一个条目,希望它是该实例的本地条目,因为您从同一节点执行了该条目的写入操作,但实际上,该条目可能存储在集群中某个其他节点的分区中。

      我相信您想要的是NearCache,换句话说,它也可以作为 L1 缓存来寻址 - 您的应用程序本地。如果您丢失了应用程序实例,您将丢失 NearCache 并且 MultiMap 不可用。但即使使用 NearCache,您也永远不会收到“null”或“data not found”,因为 NearCache 原则上,如果在 NearCache 中找不到数据,则从分区所有者(集群节点)加载数据。

      您也可以关闭备份,但这意味着丢失节点上的数据可能不在您的应用程序本地。

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        • 2012-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-15
        • 1970-01-01
        相关资源
        最近更新 更多