Skip to content

Latest commit

 

History

History
15 lines (9 loc) · 1.19 KB

雪花算法.md

File metadata and controls

15 lines (9 loc) · 1.19 KB

雪花算法

雪花算法是 64 位的二进制,包含四部分:

  • 1位是符号位,也就是最高位,始终是0,没有任何意义,因为要是唯一计算机二进制补码中就是负数,0才是正数。
  • 41位是时间戳,具体到毫秒,41位的二进制可以使用69年,因为时间理论上永恒递增,所以根据这个排序是可以的。
  • 10位是机器标识,可以全部用作机器ID,也可以用来标识机房ID + 机器ID,10位最多可以表示1024台机器。
  • 12位是计数序列号,也就是同一台机器上同一时间,理论上还可以同时生成不同的ID,12位的序列号能够区分出4096个ID。

雪花算法在分布式场景下发生时间回拨问题怎么解决?

  1. 回拨时间小的时候,不生成 ID,循环等待到时间点到达。
  2. 如果间隔过大,阻塞等待肯定不可取,要么超一定大小的回拨直接报错拒绝服务,或者利用拓展位,回拨后在拓展位上加1就可以了,这样ID依然可以保持唯一。但是这个要求我们提前预留出位数,要么从机器id中,要么从序列号中,腾出一定的位,在时间回拨的时候,这个位置 +1