分布式 ID 设计

分布式 ID 设计

Twitter Snowflake

整体长度通常是 64 (1 + 41 + 10+ 12 = 64)位,适合使用 Java 语言中的 long 类型来存储。头部是 1 位的正负标识位。紧跟着的高位部分包含 41 位时间戳,通常使用 System.currentTimeMillis()。后面是 10 位的 WorkerID,标准定义是 5 位数据中心 + 5 位机器 ID,组成了机器编号,以区分不同的集群节点。最后的 12 位就是单位毫秒内可生成的序列号数目的理论极限。

基于 Java 的实现有很多:Snowflake

MongoDB 的 ObjectId

提供了一个 12 byte(96 位)的 ID 定义,其中 32 位用于记录以秒为单位的时间,机器 ID 则为 24 位,16 位用作进程 ID,24 位随机起始的计数序列。

微信的 seqsvr

百度的 UidGenerator