雪花算法源码

Posted

tags:

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

参考技术A (1)开源ID:Twitter开源开源的分布式ID生成算法
(2)64 bit自增:使用一个64位的long型数字作为一个全局ID,且引入了时间戳概念,基本上保证自增的
(3)64位中,第一位是不用的,其中的41位作为毫秒数,10位(5+5)作为机房机器id,剩下的12位作为序列号

第一个部分,是 1 个 bit: 如果是 1,那么都是负数,但是我们生成的 id 都是正数,所以第一个 bit 统一都是 0。
第二个部分是 41 个 bit: 表示的是时间戳。41 bit 可以标识 2 ^ 41 - 1 个毫秒值,换算成年就是表示 69 年的时间。
第三个部分是 5 个 bit: 表示的是机房 id,10001。
第四个部分是 5 个 bit: 表示的是机器 id,11001。部署在 2^10 台机器上,也就是 1024 台机器。
第五个部分是 12 个 bit: 表示的序号,就是某个机房某台机器上这一毫秒内同时生成的 id 的序号,0000 0000 0000。记录同一个毫秒内产生的不同 id

(1)请求:某个微服务service需要生成一个全局唯一Id,那就可以给部署了snokeFlake算法的系统发送一个请求来生成唯一Id
(2)二进制生成:接着会用"二进制位运算"来生成一个64位的long型id,并且64位第一个bit无意义,算法系统当然知道当前的时间戳,自己的机房和机器
(3)毫秒内累加序号:最后在判断下这是这个毫秒下的第几个请求,给这次生成的Id的请求累加一个序号,作为最后的12个bit
(4)算法保证唯一:在同一毫秒下,同一个机房下的一台机器,生成一个唯一的id(12位=4096个), 如果一毫秒生成的Id数量超过了4095,就知会等待下一个毫秒在生成!但是估计没有请求能有这么频繁!

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

PHP实现生成唯一id的雪花算法

SnowFlake(雪花算法)

ID号生成 雪花算法

spring boot中使用雪花算法生成雪花ID

雪花算法(SnowFlake)

雪花算法