雪花算法原理

雪花算法是Twitter开源的分布式ID生成算法。

 雪花算法使用一个64bit的long型的数字作为全局唯一ID。在分布式系统中的应用十分广泛,且ID引入了时间戳,基本上保持自增的。

64bit的long型数字组成如下:

  • 第一部分:1bit,0,无意义的数字

 因为二进制里第一个bit如果为1,那么都是负数,但是我们生成的ID都是正数,所以第一个bit统一都是0

  • 第二部分:41bit,表示的是时间戳

毫秒的时间戳,41bit可以表示的数字多达2^41-1个毫秒值,换成年就是表示69年的时间

  • 第三部分:5bit,表示机房ID,10001

 代表最多可以配置2^25个机房(32个机房)

  • 第四部分:5bit,表示机器ID,11001 

 代表每个机房可以配置2^25个机器,根据实际情况配置

  • 第五部分:12bit,表示的序号,就是莫个机房某机器上这一毫秒内同事生成的ID的序号, 0000 00000000

 12 bit 可以代表的最大正整数是 2 ^ 12 - 1 = 4096,也就是说可以用这个 12 bit 代表的数字来区分同一个毫秒内的 4096 个不同的 ID。

 

这个算法可以保证,一个机房的一台机器上,在同一毫秒内生成了一个唯一的 ID。可能一个毫秒内会生成多个 ID,但是有最后 12 个 bit 的序号来区分开来,

记录这台机房的这台机器上这一毫秒内,这是第几个请求,给这次生成 ID 的请求累加一个序号,作为最后的 12 个 bit。

生产的64bit数字类似于:0 | 0000100 10100010 10100010 10100010 00 | 10001 | 1 1001 | 0000 00000001

雪花算法的优点:

  1. 高性能高可用:生产时不依赖数据库,在内存中生存。
  2. 容量大:每秒钟能生成数百万的自增ID。
  3. ID顺序增长:存入数据库中,索引效率高。

雪花算法的缺点:

  1. 依赖于系统时间的一致性:如果系统时间被回调或改变,可能造成ID冲突或者重复。
  2. 机房和机器ID需要配置:如果机房和机器ID在多个都节点中都采用一样的值,会加大冲突的概率。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值