分布式Id生成算法雪花算法

雪花算法是一种Twitter开源的分布式ID生成方法,利用64位长整数,包含时间戳、机器标识和序列号来保证唯一性和有序性。适用于订单号、用户ID等场景,并支持定制以适应不同系统需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

雪花算法(Snowflake Algorithm)是一种由Twitter公司开发并开源的分布式ID生成算法。其核心思想是将64位的long型ID分为四个部分,包括:符号位、时间戳、工作机器ID以及序列号。

snowflake 结构如下图所示:

  1. 符号位:占1位,由于生成的ID均为正数,因此这一位固定为0。
  2. 时间戳部分:占41位,用于记录生成ID的时间,这个时间戳是相对于一个固定的起始时间点的,一般是当前系统的启动时间。由于41位的时间戳可以表示的时间范围非常大,所以雪花算法可以在未来的几十年内持续生成唯一的ID。
  3. 工作机器ID:占10位,包括数据中心标识(5位)和机器标识(5位),支持最多1024个不同的数据中心和每个数据中心内部的1024台机器。通过工作机器ID,不同的机器可以在同一时间生成不同的ID,避免了ID冲突的问题。
  4. 序列号部分:占12位,同一节点在同一毫秒内生成不同ID时使用,支持每节点每毫秒生成4096个不同的ID。当同一毫秒内的序列号达到4096时,会等待下一毫秒再生成ID。

这种设计使得雪花算法能够在分布式系统中保证ID的唯一性和有序性。生成的ID是一个64位的长整数,其高位是时间戳,中间位是工作机器ID,低位是序列号。由于时间戳的存在,ID具有趋势递增的特性,这对于数据库插入操作等场景是非常有利的。

默认的雪花算法是 64 bit,具体的长度可以自行配置。如果希望运行更久,增加时间戳的位数;如果需要支持更多节点部署,增加标识位长度;如果并发很高,增加序列号位数。

雪花算法并不是一成不变的,可以根据系统内具体场景进行定制。

雪花算法在分布式系统中有着广泛的应用,包括但不限于生成订单号、用户ID、交易ID等场景的数据唯一性,实现不同服务间的异步通信,确保消息的唯一性和去重功能,以及作为加密货币挖矿算法等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值