雪花算法(Snowflake)

雪花算法(Snowflake)

Content #

雪花算法(Snowflake)是 Twitter 公司分布式项目采用的 ID 生成算法。

这个算法生成的 ID 是一个 64 位的长整型,由四个部分构成:

  1. 第一部分是 1 位的符号位,并没有实际用处,主要为了兼容长整型的格式。

  2. 第二部分是 41 位的时间戳用来记录本地的毫秒时间。

  3. 第三部分是机器 ID,这里说的机器就是生成 ID 的节点,用 10 位长度给机器做编码,那意味着最大规模可以达到 1024 个节点(2^10)。

  4. 最后是 12 位序列,序列的长度直接决定了一个节点 1 毫秒能够产生的 ID 数量,12 位就是 4096(2^12)。

这样,根据数据结构推算,雪花算法支持的 TPS 可以达到 419 万左右(2^22*1000),我相信对于绝大多数系统来说是足够了。

但实现雪花算法时,有个小问题往往被忽略,那就是要注意时间回拨带来的影响。机器时钟如果出现回拨,产生的 ID 就有可能重复,这需要在算法中特殊处理一下。

Viewpoints #

From #

17 | 为什么不建议你使用自增主键?