雪花算法(SnowFlake)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了雪花算法(SnowFlake)相关的知识,希望对你有一定的参考价值。

参考技术A 解决方法:

首先,SnowFlake的末尾12位是序列号,用来记录同一毫秒内产生的不同id,同一毫秒总共可以产生4096个id,每一毫秒的序列号都是从0这个基础序列号开始递增。假设我们的业务系统在单机上的QPS为3w/s,那么其实平均每毫秒只需要产生30个id即可,远没有达到设计的4096,也就是说通常情况下序列号的使用都是处在一个低水位,当发生时钟回拨的时候,这些尚未被使用的序号就可以派上用场了。
因此,可以对给定的基础序列号稍加修改,后面每发生一次时钟回拨就将基础序列号加上指定的步长,例如开始时是从0递增,发生一次时钟回拨后从1024开始递增,再发生一次时钟回拨则从2048递增,这样还能够满足3次的时钟回拨到同一时间点。

改变原来的末尾sequence生成方法:

snowflake算法给workerId预留了10位,即workId的取值范围为[0, 1023],事实上实际生产环境不大可能需要部署1024个分布式ID服务,所以:将workerId取值范围缩小为[0, 511],[512, 1023]这个范围的workerId当做备用workerId。workId为0的备用workerId是512,workId为1的备用workerId是513,以此类推……

以上是关于雪花算法(SnowFlake)的主要内容,如果未能解决你的问题,请参考以下文章

雪花算法原理介绍及基于php的雪花算法(snowflake)

php雪花算法SnowFlake生成唯一ID

ID生成算法-雪花算法(SnowFlake)及代码实现

雪花算法SnowFlake

SnowFlake 雪花算法详解与实现

snowflake 雪花算法 唯一ID