我们正在为我们的应用程序使用 Hazelcast 3。但是,我们需要升级到 Hazelcast 4,因为 Hazelcast 3 已停产。Hazelcast 4 放弃了对信号量等基于 AP 的数据结构的支持。我们使用信号量进行分布式进程协调。
与基于 CP 的替换相比,基于 AP 的信号量表现不同。基于 CP 的信号量与 CP 会话相关联。此会话的生存时间为 300 秒(默认值)。根据我们的经验,这意味着在集群收到 CP 会话的最后一次心跳后 5 分钟后,信号量才会自动释放。
这意味着在这 5 分钟过去之前,其他进程无法获取信号量。使用基于 AP 的信号量,我们可以设置更小的超时(在我们的例子中为 5 秒)。我们可以用 5 秒多一点的时间逃脱,但 5 秒和 5 分钟之间的区别在于 bug。
尽管可以将 CP 会话的生存时间设置为小于 5 分钟的值,但Hazelcast 在他们自己的网站上建议不要这样做。
我们正在寻找一种方法来安全地执行分布式过程控制,而不必依赖全局 CP 会话的生存时间。但是,我们无法在 Hazelcast 中找到它。有谁知道这样做的方法?
我们使用它来限制一次可以从远程系统读取的进程数为 1。尽管远程系统允许多个进程同时连接,但它实际上无法处理此问题,并且将开始以循环方式发送消息,即使这不应该发生。