说说生成唯一 ID 的雪花算法是怎么样的?
每天一道面试题 16
悟空拧螺丝 2021-07-28
snowflake
(雪花算法):Twitter 开源的分布式 id 生成算法,64 位的 long 型的 id,分为 4 部分:
- 1 bit:不用,统一为 0
- 41 bits:毫秒时间戳,可以表示 69 年的时间。
- 10 bits:5 bits 代表机房 id,5 个 bits 代表机器 id。最多代表 32 个机房,每个机房最多代表 32 台机器。
- 12 bits:同一毫秒内的 id,最多 4096 个不同 id,自增模式
- 毫秒数在高位,自增序列在低位,整个ID都是趋势递增的。
- 不依赖数据库等第三方系统,以服务的方式部署,稳定性更高,生成ID的性能也是非常高的。
- 可以根据自身业务特性分配bit位,非常灵活。
- 强依赖机器时钟,如果机器上时钟回拨(可以搜索 2017 年闰秒 7:59:60),会导致发号重复或者服务会处于不可用状态。