实战:10 分钟掌握分布式 ID 之雪花算法
实战:10 分钟掌握分布式 ID 之雪花算法 一个在生产每天经过1亿+数据量验证的id生成器 背景 1.为什么要使用雪花算法生成 ID -- 保证 id 全局唯一 -- 保证 id 自增长 -- uuid 无序且过长 雪花算法 ID 组成 1: 1位标识部分: --- 在 java 中由于 long 的最高位是符号位,正数是 0,负数是 1,一般生成的 ID 为正数,所以为 0; 2: 41 位时间戳部分: --- 这个是毫秒级的时间,一般实现上不会存储当前的时间戳,而是时间戳的差值(当前时间-固定的开始时间),这样可以使产生的 ID 从更小值开始;41 位的时间戳可以使用 69 年,(1L<< 41) / (1000L _ 60 _ 60 _ 24 _ 365) = 69 年; 3: 10 位workid: Twitter 实现中使用前 5 位作为数据中心标识,后 5 位作为机器标识,可以部署 1024 个节点。我这里的实现根据服务名生产的,意思就是说每个服务只要不超过 1024 个节点就不会有问题,实际生产中我也没有见过某个服务有 1024 个节点的。 4: 12 位序列号部分: --- 支持同一毫秒内同一个节点可以生成 4096 个 ID。意思就是说某个服务 1ms 能生成 4096 个 id,如果你单表的 TPS 超过 4096\*60s,那可能就会出问题了