SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的,后面的代码中有详细的注解。

传统的分布式id

一、数据库和UUID方案的不足之处

采用数据库自增序列:

UUID随机数:

雪花算法生成分布式id

这 64 个 bit 中,其中 1 个 bit 是不用的,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。

  1. 1bit,不用,因为二进制中最高位是符号位,1表示负数,0表示正数。生成的id一般都是用正数,所以最高位固定为0。
  2. 41bit-时间戳,用来记录时间戳,毫秒级。
  1. 10bit-工作机器id,用来记录工作机器id。
  1. 12bit-序列号,序列号,用来记录同毫秒内产生的不同id。