ym-snowflake
v1.0.1
Published
一门的雪花算法
Downloads
6
Readme
yimen 的雪花算法
前言
众所周知, 在分布式全局唯一ID生成器方案中, 由Twitter开源的SnowFlake算法对比美团Leaf为代表的需要部署的发号器算法, 因其有性能高, 代码简单, 不依赖第三方服务, 无需独立部署服务等优点, 在一般情况下已经能满足绝大多数系统的需求, 原生SnowFlake, 百度UidGenerator这类基于划分命名空间原理的算法已经积累了大量用户;
使用原生的雪花算法其默认生成的是64bit长整型 因为JS的Number类型精度最高只有53bit, 导致JS其最大安全值只有 2^53 = 0xFFFFFFFFFFFFF = 9007199254740992
原雪花算法的64bit分布
1 bit 不用 41 bit 毫秒值的时间戳 69 年的时间 10 bit 产生的机器id(一般5bit数据中心id 5bit机器id) 12 bit 序号
现设计兼容53bit的雪花算法
- unix32位时间戳 存 1970-01-01的秒数 2038年用尽
- 我们的时间戳 从2020-01-01开始 存30bit 0x3FFFFFFF 可存 34年
- 17bit 顺序位
- 1bit 时钟回拨问题启用位 若发现时间回拨
- 5bit 机器位 snowWorkerID
- 若1秒内17bit用完向上借位