推荐两款好用开源分布式id生成器
1.Vesta
1.1Vesta简介
Vesta是一款通用的ID产生器,互联网俗称统一发号器,它具有全局唯一、粗略有序、可反解和可制造等特性,它支持三种发布模式:嵌入发布模式、中心服务器发布模式、REST发布模式,根据业务的性能需求,它可以产生最大峰值型和最小粒度型两种类型的ID,它的实现架构使其具有高性能,高可用和可伸缩等互联网产品需要的质量属性,是一款通用的高性能的发号器产品。
1.2项目地址
https://gitee.com/free/vesta-id-generator
https://gitcode.com/iweisi/vesta-id-generator/overview?utm_source=artical_gitcode&isLogin=1
1.3使用参考博客
https://blog.csdn.net/chenqiuge1984/article/details/80128916
https://blog.csdn.net/u011673769/article/details/120776650
https://blog.csdn.net/gitblog_00057/article/details/137166537
https://blog.csdn.net/isea533/article/details/79754970
1.4说明
该开源项目已经不活跃了,社区官网都不见了,原始的项目地址也没了,上面的地址是之前使用的人搞的分支,基本跟作者原始代码没有啥差别,他的实现思路还是可以借鉴和学习的,可以把它的源码拉下来翻一翻,编译运行基本也会耍了。
2.CosId
2.1简介
CosId 旨在提供通用、灵活、高性能的分布式 ID 生成器。
CosIdGenerator
: 单机 TPS 性能:1557W/s,三倍于UUID.randomUUID()
,基于时钟的全局趋势递增ID,可以同时支持一百万个实例。SnowflakeId
: 单机 TPS 性能:409W/s [JMH 基准测试], 主要解决 时钟回拨 、机器号分配、取模分片不均匀 等问题并提供更加友好、灵活的使用体验。SegmentId
: 每次获取一段 (Step
) ID,来降低号段分发器的网络IO请求频次提升性能。并提供多种号段分发器实现。SegmentChainId:SegmentChainId (lock-free) 是对SegmentId的增强。性能可达到近似AtomicLong的TPS 性能:12743W+/s
JMH 基准测试:
https://cosid.ahoo.me/guide/faq/perf-test.html
PrefetchWorker
维护安全距离(safeDistance
), 并且支持基于饥饿状态的动态safeDistance
扩容/收缩。- 适应性:相比于
SegmentId
,SegmentChainId
可以根据业务场景动态调整Step
来提升性能。
2.1官网
https://cosid.ahoo.me/guide/introduction.html
2.3代码仓库地址
https://gitee.com/AhooWang/CosId
https://github.com/Ahoo-Wang/CosId
2.4说明
CosId实现有段号、段号链、雪花等实现,还拓展了基于Redis、ZooKeeper、Jdbc、MongoDB、MyBatis、Sprng-Data-Jdbc、Activity、Flowable、Axon、ShardingSphere、Spring-Boot-Strater等id生成集成,CosId有两种分片算法:取模分片、时间范围分片,CosId还提供了友好的ID转换接口,官方文档也比较全,可以去官网看文档就可以轻松上手CosId。
CosId vs 美团Leaf的测试报告如下:
https://cosid.ahoo.me/guide/faq/Performance-CosId-Leaf.html
CosId vs 美团Leaf的测试报告结论:
- CosId (
SegmentChainId
) 性能是 Leaf (segment
) 的 5 倍。 - CosId 、Leaf 的性能与号段步长(Step) 无关。
- CosId TPS 基本接近
AtomicLong
3.总结
以上是我分享的两个开源好用的分布式id生成项目,不推荐使用Vesta,因为Vesta官网和源码仓库都不见了,估计是作者已经不维护了,推荐使用CosId ,CosId 官网文档详细齐全,社区也比较活跃,CosId还解决了时钟回拨的问题,它有一个时钟同步的操作,只要是时钟回拨了,会自动同步时钟检验,所以在使用雪花算法担心会有时钟回拨的问题,CosId 已经解决了该问题,所以可以放心使用。mybatisPlus的id生成策略默认使用雪花算法实现,但是也有可能会重复,之前的文章有分享如何解决mybatisPlus的雪花id生成重复的方法,可以去看之前写的文章,还有一个ORM框架也自带id生成的实现:mybatis-flex
https://mybatis-flex.com/zh/core/id.html
mybatis-flex内置三种id生成实现:
- uuid:通过
UUIDKeyGenerator
生成 UUID 作为数据库主键。 - flexId:独创的 FlexID 算法生成数据库主键(了解更多信息请参阅源码)。
- snowFlakeId:通过雪花算法(
SnowFlakeIDKeyGenerator
)生成数据库主键。
我的分享到此结束了,希望对你有所启发和帮助,请一键三连,么么么哒!