System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及分布式系统唯一id生成,具体地,涉及基于雪花算法生成分布式id的方法和系统。
技术介绍
1、在当前的大数据时代,分布式系统被广泛应用于互联网、云计算、物联网和人工智能等领域。在这些系统中,生成唯一且有序的标识符对于数据管理、索引和跟踪等任务至关重要。
2、传统的id生成方法面临一些挑战。例如,在分布式环境下,存在着多台机器同时生成id的并发问题,混乱的时间戳可能导致id冲突。此外,不同机器上生成的id格式可能不一致,这给数据交换和系统协同开发带来了困难。
3、雪花算法是一种常用的分布式id生成算法,通过使用64位整数作为唯一标识符,具备足够的容量来保证在多台机器或分布式环境中生成不重复的id。但是现有的雪花算法把64位二进制划分为符号位/保留位,时间段,数据中心id和机器标识符id和序号段,其中时间段是从当前机器时钟获取的,机器时钟会存在回拨校正的风险,一旦发生了时钟回拨,生成的分布式id就会重复,影响业务。
4、专利文献cn118394843a(申请号:202410606272.x)公开了基于雪花算法的分布式id生成优化方法、系统、介质及设备,属于分布式系统唯一id生成
,该专利技术要解决的技术问题为如何针对雪花算法存在的id长度限制、机器时钟不同及发生回拨等缺陷进行优化,提升实际生产环境下的使用体验,采用的技术方案为:初始化配置:配置和分配数据中心id和机器标识id,保证唯一性和区分不同机器和数据中心;生成id,具体如下:获取当前时间戳:使用高精度时钟源获取当前时间戳;
技术实现思路
1、针对现有技术中的缺陷,本专利技术的目的是提供一种基于雪花算法生成分布式id的系统及方法。
2、根据本专利技术提供的一种基于雪花算法生成分布式id的系统,包括:
3、分布式id接口模块,用于获取生成分布式id请求,并将获取的生成分布式id请求传输至分布式id核心模块;
4、分布式id核心模块,用于接收生成分布式id请求,并通过雪花算法生成分布式id;
5、服务信息获取模块,用于获取当前服务的服务信号;
6、回拨管理模块,用于基于获取的当前服务的服务信号维护回拨计数器;
7、redis缓存模块,用于接收并保存来自回拨管理模块的回波计数器,并向回拨管理模块提供回拨计数器查询接口。
8、优选地,所述分布式id核心模块包括:
9、模块m2.1:接收来自服务信息查询模块的ip信息,并截取ip的后2段生成机器码;
10、模块m2.2:接收来自服务信息查询模块的机器时间,并保存为时间段;
11、模块m2.3:将获取的机器时间与本地时间相比较,当为同一个时间段序号计数器加1,当时间段发生变化时,序号计数器重置为0;
12、模块m2.4:接收回拨管理模块的回拨计数器;
13、模块m2.5:基于生成的机器码、时间段、回拨计数器、序号计数器根据二进制位移操作生成分布式id。
14、优选地,所述模块m2.5中分布式id包括:时间段通过位移操作移动到第22位到第62位,机器码通过位移操作移动到第12位到第21位,回拨段移动到第10位到第11位,序号计数器移动到第0位到第9位。
15、优选地,所述回拨管理模块包括:
16、模块m4.1:分布式id核心模块将接收到的来自服务信息获取模块的服务名称和ip传输至回拨管理模块,回拨管理模块基于获取的服务名称和ip通过redis缓存模块查询相应服务上一次回拨计数器,并更新到本地回拨计数器;
17、模块m4.1:接收来自服务信息获取模块的机器时间,并且和本地时间比较,判断是否发生时钟回拨,发生时钟回拨时,回拨计数器加1,然后和回拨计数器最大值进行按位与操作得到新的回拨计数器,并更新本地时间。
18、优选地,所述redis缓存模块包括:将新的回拨计数器通过redis缓存模块缓存到redis中。
19、根据本专利技术提供的一种基于雪花算法生成分布式id的方法,包括:
20、步骤s1:利用分布式id接口模块获取生成分布式id请求,并将获取的生成分布式id请求传输至分布式id核心模块;
21、步骤s2:利用分布式id核心模块接收生成分布式id请求,并通过雪花算法生成分布式id。
22、优选地,所述步骤s2包括:
23、步骤s2.1:接收来自服务信息查询模块的ip信息,并截取ip的后2段生成机器码;
24、步骤s2.2:接收来自服务信息查询模块的机器时间,并保存为时间段;
25、步骤s2.3:将获取的机器时间与本地时间相比较,当为同一个时间段序号计数器加1,当时间段发生变化时,序号计数器重置为0;
26、步骤s2.4:接收回拨管理模块的回拨计数器;
27、步骤s2.5:基于生成的机器码、时间段、回拨计数器、序号计数器根据二进制位移操作生成分布式id;
28、所述步骤s2.5中分布式id包括:时间段通过位移操作移动到第22位到第62位,机器码通过位移操作移动到第12位到第21位,回拨段移动到第10位到第11位,序号计数器移动到第0位到第9位。
29、优选地,所述方法还包括:
30、步骤s3:利用服务信息获取模块获取当前服务的服务信号;
31、步骤s4:利用回拨管理模块基于获取的当前服务的服务信号维护回拨计数器;
32、步骤s5:利用redis缓存模块接收并保存来自回拨管理模块的回波计数器,并向回拨管理模块提供回拨计数器查询接口。
33、优选地,所述步骤s4包括:
34、步骤s4.1:分布式id核心模块将接收到的来自服务信息获取模块的服务名称和ip传输至回拨管理模块,回拨管理模块基于获取的服务名称和ip通过redis缓存模块查询相应服务上一次回拨计数器,并更新到本地回拨计数器;
35、步骤s4.2:接收来自服务信息获取模块的机器时间,并且和本地时间比较,判断是否发生时钟回拨,发生时钟回拨时,回拨计数器加1,然后和回拨计数器最大值进行按位与操作得到新的回拨计数器,并更新本地时间。
36、优选地,所述步骤s5包括:将新的回拨计数器通过redis缓存模块缓存到redis中。
37、与现有技术相比,本专利技术具有如下的有益效果:
38、1、本专利技术通过采用分割长整型二进制位,增加回拨段,在发生时钟回拨时,回拨段加1,解决了时钟回拨时id重复的问题;
39、2、本专利技术通过redis缓存上一次回拨计数器,从而解决了即使物联网服务发生异常重启也可以解决重启时本文档来自技高网...
【技术保护点】
1.一种基于雪花算法生成分布式ID的系统,其特征在于,包括:
2.根据权利要求1所述的基于雪花算法生成分布式ID的系统,其特征在于,所述分布式ID核心模块包括:
3.根据权利要求2所述的基于雪花算法生成分布式ID的系统,其特征在于,所述模块M2.5中分布式ID包括:时间段通过位移操作移动到第22位到第62位,机器码通过位移操作移动到第12位到第21位,回拨段移动到第10位到第11位,序号计数器移动到第0位到第9位。
4.根据权利要求1所述的基于雪花算法生成分布式ID的系统,其特征在于,所述回拨管理模块包括:
5.根据权利要求1所述的基于雪花算法生成分布式ID的系统,其特征在于,所述Redis缓存模块包括:将新的回拨计数器通过Redis缓存模块缓存到Redis中。
6.一种基于雪花算法生成分布式ID的方法,其特征在于,包括:
7.根据权利要求6所述的基于雪花算法生成分布式ID的方法,其特征在于,所述步骤S2包括:
8.根据权利要求6所述的基于雪花算法生成分布式ID的方法,其特征在于,所述方法还包括:
9.根据权利要求8所述的基于雪花算法生成分布式ID的方法,其特征在于,所述步骤S4包括:
10.根据权利要求8所述的基于雪花算法生成分布式ID的方法,其特征在于,所述步骤S5包括:将新的回拨计数器通过Redis缓存模块缓存到Redis中。
...【技术特征摘要】
1.一种基于雪花算法生成分布式id的系统,其特征在于,包括:
2.根据权利要求1所述的基于雪花算法生成分布式id的系统,其特征在于,所述分布式id核心模块包括:
3.根据权利要求2所述的基于雪花算法生成分布式id的系统,其特征在于,所述模块m2.5中分布式id包括:时间段通过位移操作移动到第22位到第62位,机器码通过位移操作移动到第12位到第21位,回拨段移动到第10位到第11位,序号计数器移动到第0位到第9位。
4.根据权利要求1所述的基于雪花算法生成分布式id的系统,其特征在于,所述回拨管理模块包括:
5.根据权利要求1所述的基于雪花算法生成分布式id的系统,其特征在于...
【专利技术属性】
技术研发人员:陈成,
申请(专利权)人:上海万向区块链股份公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。