⚙ 生成配置
0 ~ 31(5 bit)
0 ~ 31(5 bit)
1 ~ 20 条
📋 生成结果
1319890352469315584
2319890352469315585
3319890352469315586
4319890352469315587
5319890352469315588
🧊 算法结构(64 位)
符号位1
时间戳41
数据中心5
机器ID5
序列号12
  • 符号位(1 bit):始终为 0,保证结果为正整数
  • 时间戳(41 bit):毫秒级精度,可用约 69 年
  • 数据中心(5 bit):支持 0 ~ 31 个数据中心
  • 机器 ID(5 bit):每个数据中心支持 0 ~ 32 台机器
  • 序列号(12 bit):每毫秒支持 4096 个 ID

雪花ID生成器 - 在线生成分布式唯一ID标识

什么是雪花ID?

雪花ID(Snowflake ID)是Twitter开源的分布式唯一ID生成算法,能够在不依赖数据库的情况下生成全局唯一、趋势递增的64位长整型数字标识。它由时间戳、数据中心ID、机器ID和序列号四部分组成,广泛应用于订单编号、用户ID、文件编码等需要唯一标识的场景。

无论是电商平台的订单号、企业系统的会员编号,还是分布式架构中的消息标识,"永不重复"都是最核心的需求。雪花ID算法通过精巧的位运算设计,让每一台机器在每一毫秒都能独立生成不冲突的唯一编号。

雪花ID的结构组成

一个64位的雪花ID由以下四个部分拼接而成:

  • 1位符号位:始终为0,保证ID为正整数
  • 41位时间戳:精确到毫秒级,约可使用69年,这是ID趋势递增的根本原因
  • 10位机器标识:分为5位数据中心ID和5位工作机器ID,最多支持1024个节点
  • 12位序列号:同一毫秒内的自增序号,每毫秒最多生成4096个ID

这种设计的精妙之处在于:它不依赖任何中心化的数据库来查重,仅靠规则本身就能保证唯一性,同时因为时间戳占主体部分,ID天然按时间排序。

雪花ID的核心优势

全局唯一

多台机器同时生成,ID也不会冲突,无需中央协调

趋势递增

新ID总是大于旧ID,便于数据库索引和按时间排序

高性能

单机每毫秒可生成4096个ID,完全满足高并发需求

如何使用雪花ID生成器

  1. 设置数据中心ID(0-31),不同机房使用不同值
  2. 设置工作机器ID(0-31),同一机房内不同机器使用不同值
  3. 选择需要生成的ID数量
  4. 点击"生成"按钮,即可获得一批唯一的雪花ID
  5. 复制结果用于订单号、用户标识等业务场景

典型应用场景

  • 电商订单系统:为每个订单分配唯一编号,即使高并发也不会重复
  • 分布式消息队列:为每条消息生成全局唯一ID,确保消息可追溯
  • 文件管理系统:用雪花ID作为文件名前缀,自动按时间排序且永不冲突
  • 用户注册系统:生成唯一的用户ID,无需依赖数据库自增
  • 日志追踪:为每条日志分配唯一标识,方便跨服务追踪

技术原理说明

雪花ID算法的核心是位运算。通过将时间戳左移22位、数据中心ID左移17位、机器ID左移12位,再将序列号放在最低12位,最终通过按位或运算拼接成一个64位整数。

需要注意的是,雪花ID依赖系统时钟。如果时钟回拨(即系统时间被调回),可能导致ID重复。生产环境中通常需要加入时钟回拨检测机制来规避此问题。

常见问题

雪花ID和UUID有什么区别?

雪花ID是64位整数,趋势递增,适合数据库索引;UUID是128位字符串,无序且较长,索引性能较差。在需要排序和高性能查询的场景下,雪花ID更优。

数据中心ID和机器ID怎么分配?

建议按机房编号分配数据中心ID,按机器编号分配机器ID。例如:北京机房=0,上海机房=1;机房内第1台机器=0,第2台=1。只要全局不重复即可。

雪花ID会用完吗?

41位时间戳可用约69年,12位序列号每毫秒可生成4096个ID。按每毫秒4096个的极限速度计算,一年可生成约1.29万亿个ID,完全满足绝大多数业务需求。

时钟回拨会导致ID重复吗?

是的,时钟回拨是雪花ID算法的已知风险。如果系统时间被调回,可能生成与之前相同的ID。生产环境建议加入回拨检测,回拨时抛出异常或等待时钟追上。

雪花ID可以用于分库分表吗?

可以。雪花ID的趋势递增特性使其非常适合分库分表场景,既能保证全局唯一,又不会像UUID那样导致索引性能下降。可以取ID的末尾几位作为分表键。

这个工具生成的ID安全吗?

所有ID在浏览器本地生成,不会上传到任何服务器。生成的ID完全符合雪花算法规范,可直接用于生产环境。

本文介绍了雪花ID生成器的原理、使用方法和应用场景,帮助你快速生成分布式唯一标识。