分布式 ID 生成算法 -- Snowflake
Snowflake 是 Twitter 采用的一种分布式 ID 生成算法。
核心
Snowflake 算法生成的 ID 包含四个部分:
-
最高一位
占用
1 bit
,值始终是0
,没有实际作用 -
时间戳
默认占用
41 bit
,精确到毫秒,总共可以容纳约 69 年的时间 -
工作机器 ID
占用
10 bit
,高位5 bit
是数据中心 ID,低位5 bit
是工作节点 ID,最多可以容纳1024
个节点。 -
序列号
占用 12 bit,这个值在同一毫秒同一节点上从
0
开始不断累加,最多可以累加到4095
因此 SnowFlake 算法在同一毫秒内在单一节点上可以生成 4096
个全局唯一 ID,考虑到最大 1024
个节点,因此 SnowFlake 算法在同一毫秒内可以生成 1024 * 4096
个全局唯一 ID。
除最高位外,其余三组占位均可浮动,视具体业务需求而定。
与 UUID 的对比
- UUID(Universally Unique Identifier),通用唯一识别码,占用 32 位的无序字符串,入库性能较差