雪花算法
主要学习 Twitter 开源的雪花算法
介绍
雪花算法是 Twitter 公司开源的 64 bit 整数组成的分布式 ID, 并且在单机上递增!
snowflake-64 bit 如下图所示:
如图,
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 主要是修改了时间戳,计量单位变为了 10 ms,所以可记录的时间延长为 174 年,sequence ID 跟之前的定义一致,Machine ID 即是节点的 ID 值。
雪花算法
https://chaggle.github.io/2022/04/11/middleware/snowflake/