分布式ID生成-SnowFlake实现
SnowFlake原理
Twitter的snowflake算法解决了分布式系统生成全局ID的需求,生成64位的Long型数字.
它是把64位分成各个部分,分别代表:
- 第一位不使用,预留
- 接下来的41位表示毫秒时间
- 5位数据中心ID
- 5位worker的ID
- 最后12位是毫秒内的计数,12位的计数顺序号支持每个节点每毫秒产生4096个ID序列
这样的好处是:毫秒数在高位,生成的ID整体上按时间趋势递增;不依赖第三方系统,稳定性和效率较高,理论上QPS约为409.6w/s(1000*2^12),并且整个分布式系统内不会产生ID碰撞;可根据自身业务灵活分配bit位。
不足就在于:强依赖机器时钟,如果时钟回拨,则可能导致生成ID重复。
SnowFlake实现
因为实现比较简单,就贴一个网友的Java版实现。
1 | /** |