Id Seq Generation
分布式 ID / 序列号生成方案技术选型 1. 方案概述 1.1 UUID 128 位随机数(V4)或基于时间+MAC(V1)。无需中心节点,生成即唯一。 完全无序、不连续,无法用于排序或范围查询 36 字节字符串存储开销大,随机值导致 B+Tree 页分裂,写入性能差 1.2 数据库自增 ID MySQL AUTO_INCREMENT 主键,单表内严格递增且连续。 每次发号伴随磁盘写(INSERT/UPDATE),单机上限约 1000-3000 TPS 强依赖单点数据库,宕机即停;分库后各库独立递增,全局不连续 1.3 Snowflake(雪花算法) 64 位 = 1 bit 符号 + 41 bit 时间戳 + 10 bit 机器 ID + 12 bit 序列号。纯内存计算,单机 400 万+/秒。 趋势递增但不连续,两个 ID 的差值无业务含义 依赖机器时钟,时钟回拨可能导致 ID 重复 1.4 Leaf-Segment(美团 Leaf 号段模式) 从数据库批量预取号段(如 1000 个),应用内存中顺序分发。当前号段消耗到阈值时异步预加载下一号段,避免切换时阻塞。 号段内连续,但进程重启时未消费的号段被浪费,产生空洞 多实例部署时各进程持有不同号段,同一业务维度内 ID 交叉,无法保证连续 1.5 Leaf-Snowflake Snowflake 变体,用 ZooKeeper 管理 workerID 并解决时钟回拨。本质仍是 Snowflake,不连续的缺陷不变。 ...