做积极的人,而不是积极废人!
每天更新文章,每天掉亿点点头发...
最近几天在做分布式id的技术选型,传统的雪花ID这个就不多说了,还有一些大厂的各种开源算法,五花八门,前天给大家讲了一下
美团的Leaf
,今天再来看一个非大厂的开源算法,江湖俗称“雪花漂移”。
源码
https://github.com/yitter/idgenerator
https://gitee.com/yitter/idgenerator
简介
yitter-idgenerator 是基于雪花算法进行改进的分布式ID生成算法,解决了返回给前端的id过长问题 + 时钟回拨问题。
集成时需要为每个服务设置唯一的机器号,才能保证生成的Id不会重复(集群情况下设置每个服务对应的机器号唯一,单体不需考虑)。
方案
基于服务启动时指定唯一机器号
在程序服务启动时通过分布式锁 Redisson(基于Redis实现),对每台机器通过IP 对应一个 唯一的机器号(自增)映射,并保存在Redis中。缓存一次后,下次启动直接读取缓存即可
基于注册中心指定唯一机器号
从注册中心读取服务,增加多一个机器号服务来统一分配
实现
本文基于第一种方案,通过Redisson实现,将其集成到springboot工程中做测试。
Maven依赖
关键部分代码
启动配置代码如下
上述配置都妥了之后,可直接在代码中生成分布式ID了。
效果
- 海报