1. 分布式ID的核心需求
- 全局唯一性:确保分布式系统中生成的ID全局唯一。
- 有序性:ID通常需要递增有序,以提升存储和查询效率(如数据库索引)。
- 附加要求:
- 有意义性:可包含时间、业务信息等。
- 高可用性:支持分布式环境下的容错与扩展。
- 紧凑性:ID长度需适应存储和计算限制(如数据库索引性能)。
2. 主流分布式ID方案
1. 数据库自增序列
- 优点:简单、严格递增。
- 缺点:扩展性差(依赖数据库写入)、性能瓶颈、容灾复杂。
- 优化:结合中间件(如美团Leaf-Segment),通过批量预分配ID减少数据库压力。
2. Snowflake算法
- 结构:64位 =
1位符号位 + 41位时间戳(毫秒级) + 10位WorkerID(5位数据中心+5位机器) + 12位序列号
。 - 优点:无中心化依赖、高性能(Twitter峰值超10万/s)、天然有序。
- 缺点:
- 时钟回拨:若系统时间倒退,可能导致ID重复。
- 解决方案:禁用NTP回调(stepback=0)、缓存历史时间戳检测回拨、触发等待或报错。
- 可预测性:不适合安全敏感场景(如令牌生成)。</
- 时钟回拨:若系统时间倒退,可能导致ID重复。