全局唯一性ID生成(雪花算法)

全局唯一性ID生成(雪花算法)_第1张图片

 雪花算法应用于分布式生成有序的全局唯一性ID,由64个bit位组成。

第一个部分,是1个bit:0,因为ID默认为整数,符号位为0代表为整数。

第二个部分,是41个bit:表示的是时间戳,单位是毫秒(ms),2^41-1ms等于69年

第三个部分,是5个bit:表示为机房ID

第四个部分,是5个bit:表示为机器ID

第五个部分,是12个bit:表示的是序号,2^12-1=4095

整体含义为:某一时刻(第二部分),在某一机房 (第三部分),在某一机器(第四部分),生成的ID序号(第五部分)

算法伪代码:

获取当前时间戳 a
    if(a < 上一次的时间戳)   
        抛出异常
    if(a == 上一次的时间戳)
    /**
    *代表是同一毫秒内的生成的雪花ID
    *当后12位bit生成到序列号为最大值4095时
    *源码中使用的是  sequence=(sequence+1)& MAX_SEQUENE 
    * sequence为当前序列号 MAX_SEQUENE为序列号最大值4095 此处都为二进制表示
    */
        if(sequence == 0L)
            获取下一个时间戳,赋值给当前时间戳
    else
        序列号sequence 设置为0L
    //最后 通过位运算 将各个部分组装起来

时钟回拨问题:

1.使用懒惰解决办法,等待<5ms的时间,再进行生成

2.备份服务器的使用

你可能感兴趣的:(算法)