一种改进的雪花算法结构及其分布式ID生成方法与流程

文档序号:36513764发布日期:2023-12-29 16:44阅读:28来源:国知局
一种改进的雪花算法结构及其分布式的制作方法

本发明涉及雪花算法的改进和适配,具体为一种改进的雪花算法结构及其分布式id生成方法。


背景技术:

1、雪花算法(snowflake algorithm)是一种用于生成64位id的分布式系统算法。这些id可以在分布式系统中使用,并确保不会产生id冲突。雪花算法生成的id是一个正数,并且是递增的。

2、雪花算法的结构通常如下:

3、1、1位符号位:始终为0,表明生成的id是正数;

4、2、41位时间戳:精确到毫秒,41位的长度可以使用69年;

5、3、10位机器id:可以支持最多1024个节点,包括5位datacenterid和5位workerid;

6、4、12位序列号:毫秒内的计数,12位的计数顺序号支持每个节点每毫秒产生4096个id序号。

7、传统雪花算法主要存在的问题是机器时钟依赖,如果在id生成过程中发生时钟回拨,可能会导致id生成冲突或系统错误。国内如美团通过对毫秒级别的时钟回拨进行等待的方式来变相解决这个问题,但是健壮性不足,对可能发生的时间跨度较大的始终回拨或者多次回拨无法解决。为了更好的将雪花算法应用于内部的文件分发系统,同时更贴合系统的流式调用和异常处理,在改进时钟回拨问题的同时引入redis存储中间状态,完善对异常情况的处理机制。


技术实现思路

1、本发明要解决的技术问题是克服现有技术的不足,提供一种对传统雪花算法的改进和适配,用于解决在文件分发过程中对数据库主键的依赖,通过分布式id生成主键,提高文件分发效率,减少异步分发过程中的同步依赖的雪花算法结构及其分布式id生成方法。

2、为了实现上述目的,设计一种改进的雪花算法结构,包括a.1位和41位时间戳:精确到毫秒,记录当前时间戳-基础时间戳的值;b.15位自定义id:支持多个传参输入,总长度小于等于15;c.1位回拨位:记录时钟回拨,默认为0,每次进入时钟回拨置为1,退出则重置为0;d.6位序列号位:每节点每毫秒64个序列号;所述时钟回拨的判断方法如下:当前时间戳小于上一次时间戳时则认为是发生了时钟回拨;所述时钟回拨的处理方法如下:定义三个时钟回拨参数作为进入时钟回拨时的回滚区间,三个时钟回拨参数分别代表区间的起止时间和回拨游标,从上一次正常的最后时间戳做为起点,0为中点,从起点开始递减时间戳,每毫秒仍可存储64位序列号,可以回拨当前时间戳-基础时间戳的时间,期间再次发生回拨仍然会在该区间内回拨且不会产生重复id。

3、还设计一种采用改进的雪花算法结构的分布式id生成方法,所述方法具体如下:

4、s1.当前时间戳大于上一次存储的时间戳:序列号从0开始生成唯一id;

5、s2.当前时间戳等于上一次存储的时间戳:

6、s22.当前序列号小于最大序列号,序列号加一生成新的id;

7、s23.当前序列号大于或等于最大序列号,等待至下一时间戳,序列号从0开始生成id;

8、s3.当前时间戳小于上一次存储的时间戳,进入时钟回拨阶段:

9、s33.初始化回拨时段及回拨游标,时钟回拨位置为1;

10、s34.当前毫秒内若序列号未使用完,序列号递增生成新的id;

11、s35.当前毫秒内若序列号使用完毕,递减当前时钟回拨游标,序列号从0开始生成新的id。

12、进一步地,所述方法包括:当id生成器发生重启且处于时钟回拨的情况下,要保证重启后生成的id不能重复,在分发系统应用id生成器的同时把回拨状态的信息如回拨时段、回拨序号信息存入redis,重启前后通过redis中信息判断是否从上一次时钟回拨的位置继续开始。

13、本发明同现有技术相比,其优点在于:

14、1.可以有效解决时钟回拨问题,方法对于时钟回拨进行了比较完备的处理,可以处理不同时间跨度的时钟回拨,从根本上保证生成id的唯一性,同时对于系统重启中时钟回拨的异常情况从做了现场保存,接入的系统可以根据现场在应用重启后继续按原先顺序生成id,且保证id唯一。

15、2.允许用户的自定义输入,区别于传统算法对机器id字段的基本定义,该方法将机器id字段改成可以由用户进行自定义多段输入的自定义id,结合分发系统来说,通过将id分成多段,并为每段进行实际业务含义的定义,可以让id存储更多的信息和意义

16、3.提供id解码功能,该方法生成的id为java的long型数据,从数据本身无从看出更多信息,通过提供同类下的decode方法,可以将一个指定的long值解码成详细的各个组成部分,包括用户的自定义输出组成,极大的方便了问题排查和信息获取。



技术特征:

1.一种改进的雪花算法结构,其特征在于包括

2.一种采用如权利要求1所述改进雪花算法结构的分布式id生成方法,其特征在于所述方法具体如下:

3.如权利要求2所述的一种分布式id生成方法,其特征在于所述方法包括:当id生成器发生重启且处于时钟回拨的情况下,要保证重启后生成的id不能重复,在分发系统应用id生成器的同时把回拨状态的信息如回拨时段、回拨序号信息存入redis,重启前后通过redis中信息判断是否从上一次时钟回拨的位置继续开始。


技术总结
本发明涉及雪花算法的改进和适配技术领域,具体为一种改进的雪花算法结构及其分布式ID生成方法,包括a.1位和41位时间戳:精确到毫秒,记录当前时间戳‑基础时间戳的值;b.15位自定义ID:支持多个传参输入,总长度小于等于15;c.1位回拨位:记录时钟回拨,默认为0,每次进入时钟回拨置为1,退出则重置为0;d.6位序列号位:每节点每毫秒64个序列号。本发明同现有技术相比,其优点在于:可以有效解决时钟回拨问题,方法对于时钟回拨进行了比较完备的处理,可以处理不同时间跨度的时钟回拨,从根本上保证生成ID的唯一性,同时对于系统重启中时钟回拨的异常情况从做了现场保存,接入的系统可以根据现场在应用重启后继续按原先顺序生成ID,且保证ID唯一。

技术研发人员:程书雨,王海菲,赵洋明
受保护的技术使用者:上证所信息网络有限公司
技术研发日:
技术公布日:2024/1/15
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1