系统设计实战第 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、雪花算法和号段模式,理解它们的适用场景和权衡取舍。

学习路线

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

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

第一章 / CHAPTER 01

开始 - ID 生成器概述

开始阅读