美文网首页程序员
使用zookeeper特性,创建SnowflakeIdWorke

使用zookeeper特性,创建SnowflakeIdWorke

作者: 石头人000 | 来源:发表于2020-10-13 14:14 被阅读0次

snowflake-plus

使用zookeeper特性,创建SnowflakeIdWorker

初衷:Twitter_Snowflake是个不错的分布式ID生成器,只需要配置workerId和datacenterId即可使用(相同服务不同机器配置的workerId不同)。通常会将workerId和datacenterId写入单独的配置文件。 但是在实际应用中,经常出现忘记配置文件,或者配置文件中的信息相同等问题,造成ID重复等问题。 为了方便使用,同时避免不同服务器配置的workerId相同的问题,snowflake-plus可以作为一种方案。

配置文件优缺点

优点:简单,无需依赖其他服务

缺点:

1、容易遗漏放置配置文件到服务器

2、易发生配置文件重复,导致ID重复

使用zookeeper优化雪花算法ID

设计思路:

1、利用zookeeper临时有序节点的特性(有序,客户端断开后自动删除),应用启动时创建临时有序节点

2、将临时有序节点转换为整数,并对32取模,得到值作为备用workerId

3、创建名称为workerId值的临时节点,如果创建成功,则表示workerId可用;如果创建失败,则表示workerId值已被占用,不可用,需要重新获取临时有序节点,重复步骤2,3

4、使用workerId和datacenterId构造SnowflakeIdWorker,可保证不同服务器之间产生的ID不同

5、应用停掉后,断开与zookeeper的连接,临时有序节点和临时节点被清除,又可以被后续应用使用。

6、当发生时钟回拨时,为防止ID重复,自动调整workerId,使用新的SnowflakeIdWorker来生成ID

ID生成效率 大于 4000000个/s

后续规划: 1、datacenterId(0~31)可以循环使用

源码地址:https://github.com/dongshilei/snowflake-plus

相关文章

网友评论

    本文标题:使用zookeeper特性,创建SnowflakeIdWorke

    本文链接:https://www.haomeiwen.com/subject/kisvpktx.html