《分布式系统中的ID生成策略与唯一性设计》

41 阅读1分钟

在分布式架构中,生成全局唯一的ID是一项基础能力。它直接影响数据一致性、可追踪性与系统性能。

1. 唯一 ID 的核心要求

  • 全局唯一:不同节点生成的ID不能重复。
  • 有序性:部分业务需要按时间有序。
  • 高性能:高并发下仍能快速生成。
  • 可扩展性:节点增减不影响生成逻辑。

2. 常见方案

  1. 数据库自增ID

    • 简单易用,但无法跨库唯一。
    • 主从架构下存在同步延迟。
  2. UUID

    • 通过MAC地址、时间戳生成,保证唯一性。
    • 缺点:不连续、存储占用大、索引性能差。
  3. 雪花算法(Snowflake)

    • 64位长整型结构:

      | 1bit符号位 | 41bit时间戳 | 10bit机器ID | 12bit序列号 |
      
    • 支持高并发,每毫秒生成数千条。

    • 常用于订单号、日志追踪ID。

  4. Redis / ZooKeeper 分布式序列

    • 利用原子自增(INCR)保证唯一。
    • 可扩展但存在网络瓶颈。
  5. 号段模式(Segment)

    • 从数据库批量申请一段号段,内存生成。
    • 性能高、低耦合,适合大规模系统。

3. 实践经验

  • 对于订单号等业务ID,可拼接时间 + 随机 + 序列。
  • 对于数据库主键,推荐雪花算法或号段模式。
  • ID生成服务要独立部署,并保证高可用。

结论:分布式ID是所有系统的基础设施。选择方案时要在性能、顺序性与稳定性之间平衡。