【技术实现步骤摘要】
一种高吞吐量的唯一ID发放方法、装置及存储介质
[0001]本专利技术涉及分布式系统
,具体的涉及一种高吞吐量的唯一ID发放方法、装置及存储介质。
技术介绍
[0002]在业务开发中,大量场景需要唯一ID来进行标识:用户需要唯一身份标识、商品需要唯一标识、消息需要唯一标识、事件需要唯一标识等,都需要全局唯一ID,尤其是复杂的分布式业务场景中全局唯一ID更为重要。ID生成器都是分布式软件系统中必不可少的基础组件,而存在数据分片的场景的软件对于ID的要求除了保证唯一之外,还要求时序。现有能保证时序的方案都是基于雪花算法(snowflake)和批量缓存自增MaxID实现的。
[0003]雪花算法核心思想:把64
‑
bit分别划分成多段,分开来标示机器、时间、某一并发序列等,从而使每台机器及同一机器生成的ID都是互不相同。时间戳占用的过多的bit位,单机吞吐量过低。
[0004]批量缓存自增MaxID核心思想:每次批量生成一批ID给不同的机器去慢慢消费,这样数据库的压力也会减小,且故障后可坚持一段时间。但是在多机的场景下,出现ID乱序的情况(因为处理落在不同的实例上,缓存的ID范围不一样的)。
[0005]在面临高吞吐且要保证时序的场景下,因为雪花单机吞吐量过低,必须要扩展更多的实例,才能满足高吞吐的要求。有鉴于此,特提出本专利技术专利。
技术实现思路
[0006]为了解决上述问题,本专利技术提供一种高吞吐量的唯一ID发放方法、装置及存储介质,具体地,采用了如下
【技术保护点】
【技术特征摘要】
1.一种高吞吐量的唯一ID发放方法,其特征在于,包括:采用long类型的数据存储唯一ID,所述long类型的数据包括存储0或者1的最高位,用于存储时间戳的时间戳位,用于存储工作机器ID的标识位以及用于生成递增序列号的序列号位;获取唯一ID服务主机的当前绝对时间戳,通过公式相对时间戳T
相对
=当前绝对时间戳T
绝对
‑
基准时间戳T0得到唯一ID服务主机的相对时间戳,将所述相对时间戳T
相对
写入所述long类型的数据的时间戳位,生成唯一ID。2.根据权利要求1所述的一种高吞吐量的唯一ID发放方法,其特征在于,所述时间戳位的位数Bit
时间
根据所述相对时间戳的时间精度基准确定,所述标识位的位数Bit
标识
根据系统的最大机器容量确定,所述序列号位的位数Bit
序列
由公式序列号位的位数Bit
序列
=long类型的数据总位数Bit
‑
时间戳位的位数Bit 时间
‑
标识位的位数Bit
标识
‑
1计算得到;可选地,所述时间精度基准为秒级,所述时间戳位的位数Bit时间小于或者等于30位。3.根据权利要求2所述的一种高吞吐量的唯一ID发放方法,其特征在于,将所述时间戳位的位数Bit
时间
控制为30位,将所述标识位的位数Bit
标识
控制为10位,所述序列号位的位数Bit
序列
为24位;每个协程(或线程)针对所述序列号位可生成的号段[1,16777216]进行拆分多缓存,并发发号。4.根据权利要求1
‑
3任意一项所述的一种高吞吐量的唯一ID发放方法,其特征在于,当所述唯一ID服务主机由当前绝对时间戳T
绝对
计算得到当前相对时间戳T
相对
所对应的唯一ID号段的剩余发放量N=0时,判断是否还有工作机器需要发放唯一ID;若判断结果为是,则执行增量唯一ID发号过程:将所述唯一ID服务主机的当前绝对时间戳T
绝对
自增n*T0后,向剩余需要发放唯一ID的工作机器继续发放由绝对时间戳T
绝对
+n*T0计算得到的相对时间戳所对应的唯一ID号段中的唯一ID;其中n*T0为按照最小时间精度基准逐次自增,n为自增次数,所述n*T0小于等于系统允许时间戳误差η。5.根据权利要求4所述的一种高吞吐量的唯一ID发放方法,其特征在于,当所述唯一ID服务主机的当前绝对时间戳T
绝对2
更新为T
绝对1
+n*...
【专利技术属性】
技术研发人员:王飞,
申请(专利权)人:瞰客信息科技上海有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。