从群集范围的Hazelcast ID生成器中保留价值

时间:2014-02-20 23:23:07

标签: hazelcast

我的问题在本质上与Java: Unique 10 digit ID非常相似,我需要在数据库中断的情况下生成10位数序列的子集,并且我无法使用其序列生成器。

我想使用this feature,但我的用例要求我跟踪生成的最后一个ID,以免造成冲突。这需要以容错方式完成 - 并且该值应该在从一个DC进行故障转移后继续存在,因此如果Hazelcast群集出现,我们将从最后使用的值开始。

我在查看Hazelcast文档时的想法是配置后备持久性并将延迟设置为接近DB-SLA以进行意外中断(大约几个小时但是我觉得这可能不会是可取的)。然后尝试检索群集启动时使用的最新ID,值为0 - 表示整个群集已重新启动。

有什么想法吗?

编辑听起来this answer可能会出现问题 - 使用共享文件系统并序列化为平面文件。如果我无法获得在我的环境中配置的共享文件系统,该怎么办?还有其他选择吗?

3 个答案:

答案 0 :(得分:1)

我们将在不久的将来实施类似的功能,但这并不能解决您今天的问题。

我将看看IAtomicLong和IdGenerator实现。您可以根据具有存储空间的代码示例轻松创建自己的IdGenerator实现。

答案 1 :(得分:0)

我使用this article来帮助我弄清楚如何将MapStore写入本地文件系统。然后我使用IdGenerator的init()方法从最后使用的序列号开始(通过last写入)。最后,每当有人要求输入一个号码时,他们就会从一个抓取nextId()的服务中获取它,然后将其放入我的Hazelcast MapStore并将其存储在本地文件系统中以实现容错。

我还有更多测试要做,但这种方法似乎有效。

答案 2 :(得分:0)

这就是你如何在没有持久性的情况下做到这一点:

hazelcastInstance.getFlakeIdGenerator("name_you_want_to_give_it").newId()