雪花算法的多种语言实现

雪花 (snowflake) 算法是 Twitter 开源的分布式 ID 生成算法,可以在不引入 Redis 或 ZooKeeper 之类的中间件的情况下生成不重复且基本有序的 ID,在分布式系统中的应用十分广泛。原始代码是 Scala 实现的,我将其翻译成了 Java、C# 等多种语言的版本,源码在这里可以找到。

雪花算法的核心思想是将 64 bit 分为多个部分,在两次生成的 ID 的各个部分不全相等的情况下 ID 必然是不重复的。在不同实例上,由于数据中心编号和机器编号不同时相等,所以生成 ID 不重复;在同一实例上,时间戳可以很大程度上避免重复的可能,而一旦同一毫秒内有多次生成 ID 时,通过加锁等方式获取自增的序号即可,自增的序号占用 12 bit,足够一毫秒生成 4096 个不同 ID。

保留时间戳数据中心编号机器编号序号
1 bit41 bit5 bit5 bit12 bit
固定为0,防止出现负数当前时间戳 减 初始时间戳同一机器同一毫秒内自增