首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用少于3个节点的Hazelcast的CPSubsystem?

如何使用少于3个节点的Hazelcast的CPSubsystem?
EN

Stack Overflow用户
提问于 2019-07-29 13:55:55
回答 2查看 1.9K关注 0票数 5

我看到Hazelcast 3.12已经为3-7节点的系统引入了CPSubsystem()。我明白理由。但是,如果我试图设计一个可以在1-n个节点之间运行的解决方案,是否需要使用不同的逻辑来验证是否启用了CPSubsystem?我该怎么查呢?

我想/希望只是打个电话

代码语言:javascript
复制
hazelcastInstance.getCPSubsystem().getLock()

不管节点数多少,都可以工作,但是如果少于3个节点,则会引发异常。我找不到任何方法可以让我检查是否启用了CPSubsystem

我的当前实现使用了不推荐的方法getLock()来获得分布式锁:

代码语言:javascript
复制
   LOG.debug("Creating a distributed lock on username for a maximum of 5 minutes {}", username);
    ILock usernameLock = hazelcastInstance.getLock(this.getClass().getName() + ":" + username);
    try {
        if (usernameLock.tryLock (5, TimeUnit.MINUTES)) {
            clearUserData(cacheEntryEvent);
        }
    } catch (InterruptedException e) {
        LOG.warn("Exception locking on : {} ", username, e);
        LOG.warn("Invoking clearUserData without synchronization : {}", username);
        clearUserData(cacheEntryEvent);
    } finally {
        usernameLock.unlock();
    }

我怎么能在不知道的情况下用黑兹尔卡斯特锁上锁呢?hazelcastInstance.getLock()被标记为不推荐使用,并在HC4中作为删除的目标。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-29 15:53:16

正如你已经知道的,CPSubsystemCAP定理方面是一个CP系统。它必须显式启用才能使用,因为它有一些限制和先决条件。其中之一是,应至少有3名哈泽尔卡斯特成员加入该专题组。实际上,2个成员就足够了,但是Hazelcast的CPSubsystem拒绝与2个成员一起工作,因为2个成员中的大多数是2,而且一旦其中一个成员崩溃,它很容易不可用。

HazelcastInstance.getLock()使用Hazelcast的异步复制,不能在失败时提供CP保证。对于某些系统/应用程序来说,这是可以接受的,但对所有系统/应用程序来说并不是这样。这就是为什么在最好的锁定机制和基于CP的锁定机制之间的选择应该是显式的,依赖锁的应用程序应该根据这种选择来设计。请参阅丹尼尔·阿巴迪的有条件的一致性保证的危险帖子中有关此选择的内容。这就是为什么当集群大小小于3时时,CPSubsystem().getLock()不会退回到尽最大努力/不安全锁定机制。

HazelcastInstance.getLock()在3.12中被弃用,在4.0中将被删除。但是Hazelcast将提供一个) CP数据结构的模式,它将与任意数量的成员一起工作,并且将基于类似于Hazelcast AP数据结构的异步复制。

票数 6
EN

Stack Overflow用户

发布于 2019-08-19 11:03:05

代码语言:javascript
复制
    HazelcastInstance hz1 = Hazelcast.newHazelcastInstance(config);
    HazelcastInstance hz2 = Hazelcast.newHazelcastInstance(config);
    HazelcastInstance hz3 = Hazelcast.newHazelcastInstance(config);

您可以在同一个JVM /节点/实例中添加3个成员,您应该能够在没有三个物理节点、实例或JVM的情况下运行CPSubsystem。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57255403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档