先放一个数字:69 年。
雪花算法的 41 bit 时间戳可承载约 69.7 年(2^41 / (1000 * 60 * 60 * 24 * 365))。起始时间建议 2025-01-01 08:00:00(1735660800000L)——意味着这个算法从现在算,能用到你孙子辈。
RFC-001 这篇文档拆的是生产级 ID 生成策略的迁移:从 Redisson RAtomicLong(网络往返 1-5ms,Redis 单点)换成雪花算法(本地生成,无网络开销)。核心动机是五个生产风险:单点故障(Redis 不可用时 ID 完全无法生成)、性能瓶颈(高并发下 1-5ms 累加)、数据一致性(Redis 数据丢失序列重置导致 ID 重复)、跨区域延迟、扩展性限制。
但更精彩的迁移设计:零停机、可回滚、数据兼容。阶段 2 用 HybridIdGeneratorService 双写(snowflake + redis)但只读 snowflake,阶段 3 灰度发布(10% → 30% → 50% → 100%),阶段 4 一周后清理旧代码。回滚预案就是改 strategy: redis 5 分钟内恢复。
workerId 分配是真正的分布式难题:静态配置简单但要手动管理,Redis 自动分配依赖 Redis,ZooKeeper 持久但增加依赖,MAC 地址哈希无需配置但可能冲突。短期推荐静态配置 + MAC 兜底,长期用 Redis 分布式锁自动分配并缓存到本地。
时钟回拨是雪花算法的阿喀琉斯之踵:检测到回拨就抛异常,等待时钟追上,或用本地序列号补偿——三种应对组合。
下一根钉子:雪花算法把"ID 是全局唯一的"这个隐含假设变成了"ID 是本地生成的、跨实例不冲突、跨数据中心有序"的工程契约。前提是 workerId 分配纪律。