说说Snowflake思想,来自Twitter吧
Snowflake算法
snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。
这个算法单机每秒内理论上最多可以生成1000*(2^12),也就是409.6万个ID。
Java代码
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)
源码:私信咯。
閱讀更多 碼農筆記Day 的文章