这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
系统设计实战第 14 卷
系统设计实战
系统设计 - 分布式 ID 生成器
机器1ID:001
机器2ID:002
机器3ID:003
雪花算法时间戳+机器ID+序列号
从订单号和主键生成出发,构建覆盖 UUID、数据库自增、Redis、雪花算法、号段模式和生产治理的分布式 ID 系统
系统演进路线
从数据库自增到多策略 ID 平台
第 1 版
数据库自增
单体应用只有一张订单表,主键自增最简单。
AUTO_INCREMENT单库单表唯一索引
简单可靠,但分库分表和多服务写入会让全局唯一失效。
第 2 版
中心化发号
多个业务都要 ID,需要把发号从业务表中抽出来。
发号表Redis INCR业务 key批量取号
发号能力服务化,但中心依赖和高可用成为新问题。
第 3 版
本地生成
核心链路不能每次远程取号,需要低延迟、高吞吐。
Snowflake机器号序列号时钟治理
性能提升后,机器身份和时钟回拨必须被治理。
生产版
多策略 ID 平台
不同业务需要不同 ID 语义,不能用一个算法覆盖所有场景。
策略路由号段模式规则配置监控告警容量规划
生产级 ID 平台要按业务选择方案,并能解释每个 ID 的生成规则。
架构演进
ID 平台四个阶段
数据库自增
单体应用只有一张订单表,主键自增最简单。
发号方式
AUTO_INCREMENT
数据库主键自增
单库单表
数据库唯一索引保证
验收标准:简单可靠,但分库分表和多服务写入会让全局唯一失效。
课程简介
系统总览
分布式 ID 系统总览
围绕唯一性、趋势递增、吞吐、可用性和时钟风险比较不同方案。
需求
唯一性
趋势递增
高吞吐
方案
UUID
数据库号段
Snowflake
治理
机器号分配
时钟回拨
监控告警
欢迎来到”系统设计 - 分布式 ID 生成器”课程!
本课程通过真实的业务场景,带你从零开始设计一个全局唯一、有序、高可用的分布式 ID 生成器。我们会深入分析多种主流方案,包括 UUID、数据库自增、Redis、雪花算法和号段模式,理解它们的适用场景和权衡取舍。
学习路线
- 开始:从订单号、用户 ID、消息 ID 等场景理解为什么单机自增会失效。
- 基础概念:建立唯一性、趋势递增、可用性、吞吐、可读性和安全性的评价标准。
- UUID 方案:学习最简单的无中心生成方式,以及它在索引、排序和可读性上的代价。
- 数据库自增方案:从单库自增演进到步长和集群模式,理解中心化方案的瓶颈。
- Redis 方案:用原子递增获得高性能 ID,并处理集群、持久化和可用性问题。
- 雪花算法:拆解时间戳、机器号和序列号,设计趋势递增的 64 位 ID。
- 雪花算法优化:处理时钟回拨、机器号分配、跨机房部署和异常恢复。
- 号段模式:通过批量取号和双 Buffer 降低数据库压力。
- 系统架构设计:整合多方案选型、服务化接入、监控告警和容量规划。
读完后,你应该能根据业务规模、排序需求、可用性要求和运维成本,选择或组合合适的分布式 ID 方案,而不是只记住某一个算法。
第一章 / CHAPTER 01
