一、背景:
清分系统需要一套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 -
0000000000
00
一共加起来刚好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)结构如下(每部分用 - 分开):
0000000000
000 - 0 - 00 -000
加起来正好19位。生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞。
3、清分系统中的id样例:
(1)服务器分配机器编码