基于snowflake算法实现发号器

一、背景:

清分系统需要一套id生成器服务,保证分布式情况下全局唯一。

二、算法描述:

1、原始算法:

(1)snowflake是twitter开源的分布式ID生成算法,其核心思想是:一个long型的ID,使用其中43bit作为毫秒数,3bit作为机房编号,5bit作为机器编码,12bit作为毫秒内序列号。这个算法单机每毫秒内理论上最多可以生成2^12,也就是4096个ID,完全能满足业务的需求。


(2)snowflake的结构如下(每部分用-分开):

0 - 0000000000 0000000000 0000000000 0000000000 000 - 000 - 00000 - 000000000000

一共加起来刚好64位,为一个Long型。(转换成字符串长度为18)

snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。

2、算法变形:

(1)long类型最大值是9,223,372,036,854,775,807(2^63 -1),即19位十进制数。取前13位作为毫秒数,1位作为毫秒内序列号,2位作为机器编号,3位作为数据库表尾号。这个算法单机每毫秒内理论最多可以生产10个id(每秒内理论最多可以生产1w个id),完全满足业务需求。

(2)结构如下(每部分用 - 分开):

0000000000000 - 0 - 00 -000

加起来正好19位。生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞。

3、清分系统中的id样例:

(1)服务器分配机器编码

#server_host=server_number( 0 ~
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值