雪花算法
· 阅读需 7 分钟
雪花算法(Snowflake)是 Twitter 开源的分布式 ID 生成算法,核心目标是在分布式系统中生成全局唯一、趋势递增的 64 位整数 ID。它解决了传统 UUID 过长、数据库自增 ID 无法分布式部署的问题,广泛应用于微服务、分布式数据库、消息队列等场景。本文将从原理、特性、Go 实现三个维度带你掌握雪花算法。
一、雪花算法核心原理
1. 64位ID的结构设计
雪花算法将 64 位整数(int64)拆分为 4 个部分(不同实现的分段可能略有差异,以下是最经典的版本):
| 位段 | 位数 | 作用 |
|---|---|---|
| 符号位 | 1 | 固定为 0(保证 ID 为正数) |
| 时间戳 | 41 | 存储毫秒级时间戳(相对于某个起始时间),可支持约 69 年(2^41/1000/3600/24/365 ≈ 69) |
| 机器/节点 ID | 10 | 标识分布式节点(可拆分为 5 位数据中心 + 5 位机器,支持 1024 个节点) |
| 序列号 | 12 | 同一毫秒内的自增序列(支持每个节点每毫秒生成 4096 个 ID) |
计算验证:1 + 41 + 10 + 12 = 64,刚好占满 int64 位空间。
