雪花算法

主要学习 Twitter 开源的雪花算法

介绍

雪花算法是 Twitter 公司开源的 64 bit 整数组成的分布式 ID, 并且在单机上递增!

snowflake-64 bit 如下图所示:
snowflake

如图,
1、雪花算法默认左起第一位应该是 0, 第一位在实际中并无任何作用。

2、从第一位之后的 41 位都是时间戳,单位为 ms, 能容纳 69 年的时间。以某个时间点为基准, 基准可以自行设置, 偏移量为其中的 41 位的数值。

3、第 43 - 52 位, 十位是工作机器的 ID 号, 因为是分布式的算法, 所以应该支持多台机器。从左开始的五位表示数据中心的 ID, 后五位表示工作节点的 ID, 最多容纳 1024 个节点。

4、剩下 12 位为序列号, 记录同毫秒内产生不同的 ID。每个节点每毫秒从 0 开始不断累加, 最多累加 4095。

故 1 ms 内最多产生 1024 x 4096 = $2^{22}$ 个不同的 ID 号

实现

1、bwmarrin/snowflake

Go 语言的原生雪花算法实现

2、sony/sonyflake

sony 公司实现的 sonyflake, 在 sonyflake 的基础上进行修改,基本实现的原理跟 snowflake 差不多,如下图

sonyflake

sonyflake 主要是修改了时间戳,计量单位变为了 10 ms,所以可记录的时间延长为 174 年,sequence ID 跟之前的定义一致,Machine ID 即是节点的 ID 值。


雪花算法
https://chaggle.github.io/2022/04/11/middleware/snowflake/
作者
chaggle
发布于
2022年4月11日
许可协议