分布式 ID 生成器

设计全局唯一、有序、高可用的分布式 ID 生成器

系统设计 分布式 ID 唯一 ID

系统演进路线

从数据库自增到多策略 ID 平台

第 1 版

数据库自增

单体应用只有一张订单表,主键自增最简单。

AUTO_INCREMENT单库单表唯一索引

简单可靠,但分库分表和多服务写入会让全局唯一失效。

第 2 版

中心化发号

多个业务都要 ID,需要把发号从业务表中抽出来。

发号表Redis INCR业务 key批量取号

发号能力服务化,但中心依赖和高可用成为新问题。

第 3 版

本地生成

核心链路不能每次远程取号,需要低延迟、高吞吐。

Snowflake机器号序列号时钟治理

性能提升后,机器身份和时钟回拨必须被治理。

生产版

多策略 ID 平台

不同业务需要不同 ID 语义,不能用一个算法覆盖所有场景。

策略路由号段模式规则配置监控告警容量规划

生产级 ID 平台要按业务选择方案,并能解释每个 ID 的生成规则。

课程简介

系统总览
分布式 ID 系统总览
围绕唯一性、趋势递增、吞吐、可用性和时钟风险比较不同方案。
需求
唯一性
趋势递增
高吞吐
方案
UUID
数据库号段
Snowflake
治理
机器号分配
时钟回拨
监控告警

欢迎来到”系统设计 - 分布式 ID 生成器”课程!

本课程通过真实的业务场景,带你从零开始设计一个全局唯一、有序、高可用的分布式 ID 生成器。我们会深入分析多种主流方案,包括 UUID、数据库自增、Redis、雪花算法和号段模式,理解它们的适用场景和权衡取舍。

学习路线

  1. 开始:从订单号、用户 ID、消息 ID 等场景理解为什么单机自增会失效。
  2. 基础概念:建立唯一性、趋势递增、可用性、吞吐、可读性和安全性的评价标准。
  3. UUID 方案:学习最简单的无中心生成方式,以及它在索引、排序和可读性上的代价。
  4. 数据库自增方案:从单库自增演进到步长和集群模式,理解中心化方案的瓶颈。
  5. Redis 方案:用原子递增获得高性能 ID,并处理集群、持久化和可用性问题。
  6. 雪花算法:拆解时间戳、机器号和序列号,设计趋势递增的 64 位 ID。
  7. 雪花算法优化:处理时钟回拨、机器号分配、跨机房部署和异常恢复。
  8. 号段模式:通过批量取号和双 Buffer 降低数据库压力。
  9. 系统架构设计:整合多方案选型、服务化接入、监控告警和容量规划。

读完后,你应该能根据业务规模、排序需求、可用性要求和运维成本,选择或组合合适的分布式 ID 方案,而不是只记住某一个算法。

章节