08.02 借用Snowflake在JAVA代码生成不重复唯一ID

说说Snowflake思想,来自Twitter吧

Snowflake算法

snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。

借用Snowflake在JAVA代码生成不重复唯一ID

这个算法单机每秒内理论上最多可以生成1000*(2^12),也就是409.6万个ID。

Java代码

借用Snowflake在JAVA代码生成不重复唯一ID

Snowflake算法稍微调整下位段:

  • sign(1bit)
  • 固定1bit符号标识,即生成的畅途分布式唯一id为正数。
  • delta seconds (38 bits)
  • 当前时间,相对于时间基点"2017-12-21"的增量值,单位:毫秒,最多可支持约8.716年
  • worker id (15 bits)
  • 机器id,最多可支持约3.28万个节点。
  • sequence (10 bits)
  • 每秒下的并发序列,10 bits,这个算法单机每秒内理论上最多可以生成1000*(2^10),也就是100W的ID,完全能满足业务的需求。

大佬公司

百度 ------- uid-generator产生就是基于这种情况做的(每次取一批回来,很好的思想,性能也非常不错)https://github.com/baidu/uid-generator。

美团 ------ Leaf 点评分布式ID生成系统(https://tech.meituan.com/MT_Leaf.html)

源码:私信咯。


分享到:


相關文章: