在分布式架构中,生成全局唯一的ID是一项基础能力。它直接影响数据一致性、可追踪性与系统性能。
1. 唯一 ID 的核心要求
- 全局唯一:不同节点生成的ID不能重复。
- 有序性:部分业务需要按时间有序。
- 高性能:高并发下仍能快速生成。
- 可扩展性:节点增减不影响生成逻辑。
2. 常见方案
-
数据库自增ID
- 简单易用,但无法跨库唯一。
- 主从架构下存在同步延迟。
-
UUID
- 通过MAC地址、时间戳生成,保证唯一性。
- 缺点:不连续、存储占用大、索引性能差。
-
雪花算法(Snowflake)
-
64位长整型结构:
| 1bit符号位 | 41bit时间戳 | 10bit机器ID | 12bit序列号 | -
支持高并发,每毫秒生成数千条。
-
常用于订单号、日志追踪ID。
-
-
Redis / ZooKeeper 分布式序列
- 利用原子自增(INCR)保证唯一。
- 可扩展但存在网络瓶颈。
-
号段模式(Segment)
- 从数据库批量申请一段号段,内存生成。
- 性能高、低耦合,适合大规模系统。
3. 实践经验
- 对于订单号等业务ID,可拼接时间 + 随机 + 序列。
- 对于数据库主键,推荐雪花算法或号段模式。
- ID生成服务要独立部署,并保证高可用。
结论:分布式ID是所有系统的基础设施。选择方案时要在性能、顺序性与稳定性之间平衡。