1.UidGenerator–百度开源分布式id生成器
UidGenerator使用Java实现,基于Snowflake算法的唯一ID生成器。
gitee地址:https://gitee.com/mirrors/UidGenerator
UidGenerator在每次启动时,会把机器的host_name和port插入表中,把新纪录的id作为本实例的workerId,以此来保证每个实例在任何时间workerId的唯一性。
UidGenerator提供了DefaultUidGenerator和CachedUidGenerator两种id生成器。
DefaultUidGenerator是Snowflake算法的一种实现。
CachedUidGenerator继承自DefaultUidGenerator,并做了以下两点改进:
(1)使用未来时间,解决了Snowflake算法sequence天然存在的并发限制,及在出现时钟回拨时产生重复id的问题。
(2)使用RingBuffer数组缓存预先生成的uid,并行化uid的生产和消费,最终使单机QPS可达600万,适用于高性能场景。
RingBuffer填充uid时机:
(1)RingBuffer初始化时,预先填充maxSequence个uid到RingBuffer。
(2)take()消费时,获取uid前先检查剩余可用slot量(tail - cursor),如小于设定阈值paddingThreshold,则异步填充maxSequence个uid到RingBuffer。
(3)通过Schedule线程定时填充maxSequence个uid到RingBuffer。可通过设置scheduleInterval启动定时填充功能。
2.Leaf–美团点评分布式ID生成器
Leaf 使用Java实现,提供两种生成ID的方式(Snowflake模式和号段模式),可以通过修改配置选择ID的生成方式。
Snowflake模式,算法取自twitter开源的snowflake算法。
号段模式,需要依赖数据库建立DB表。
GitHub地址:https://github.com/Meituan-Dianping/Leaf
官方文档地址:https://tech.meituan.com/2017/04/21/mt-leaf.html