System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种分布式自增唯一ID方法装置、设备及可读存储介质制造方法及图纸_技高网

一种分布式自增唯一ID方法装置、设备及可读存储介质制造方法及图纸

技术编号:40540182 阅读:5 留言:0更新日期:2024-03-05 18:55
本发明专利技术公开了一种分布式自增唯一ID方法,通过完成初始化,获取机器编码作为初始I D;进行I D生成流程,获取系统当前时间,生成I D时间戳;根据时间戳内发生的交易次数计算累加值;将机器编码、时间戳、累加值进行排列组合,将组合后的结果返回I D;本发明专利技术提供的方法具有全局唯一性,不同部署环境适应性及分布式环境适应性高,分布式下的时间有序,业务可理解性及时钟回拨容忍性强等优点。通过本发明专利技术的方法,实现了一种高效、稳定且可靠的分布式自增且唯一的I D生成解决方案,基于该方案可以实现一款公共的I D生成组件,然后各业务系统可以将其引入到自己的系统中进行使用,该方案对于理财代销领域的分布式系统具有很高的应用价值。

【技术实现步骤摘要】

本专利技术涉及互联网理财代销,尤其涉及一种分布式自增唯一id方法装置、设备及可读存储介质。


技术介绍

1、目前市场上已存在多种技术来实现分布式唯一id生成,如:snowflakealgorithm,该算法固定生成64bits的长整型id,并分多个组成部分;雪花算法具有简单、高性能、可扩展性的优点,但缺点是依赖系统时钟,可能会受到系统时间回拨的影响,进而无法保证唯一性,另外需要维护全局唯一的数据中心id和机器id,不适用于非常高的高并发场景,需要其他机制处理同一毫秒内的并发请求。uuid:通用唯一标志符是一种强大的标识符生成方式,生成长度为128bits,是一种旨在能够在分布式、多系统环境下生成难以预测且全球唯一的id生成算法。缺点是id较长,占用存储和传输资源,不适用于数据库存储,可能导致性能问题,不适用于排序和范围查询。第三方服务:即部署独立的全局唯一id生成服务,在分布式系统中所有的id消费者通过网络请求从独立的id生成服务中获取唯一id。其缺点是依赖外部服务,会引入额外的延迟和风险,可能需要独立部署,有硬件成本。

2、因为需要确保每笔交易都有唯一标志,保证交易对应的动账如扣款、返款需要保证唯一性,防止账务、交易数据的冲突和混淆,所以在理财代销领域唯一id非常重要。不过唯一性只是最基本的要求,理财代销领域的交易单id不止需要保证唯一性,还有其他的硬性及软性的要求,总体要求如下:

3、1.全局唯一性:生成的id必须在整个理财代销平台中保证全局唯一,以避免不同系统个、或节点间id冲突;

4、2.分布式时间排序:id中包含时间戳或其他时间信息可以帮助在系统中进行时间排序,在一些场景比如理财超额认购场景中ta按照销售端的id进行交易排序,然后按先到先得的规则进行确,该条为硬性要求;

5、3.时钟回拨容忍度:系统需要能够处理时钟回拨,以确保在发生了时钟回拨时生成的id依然是全局唯一不重复;

6、4.业务可理解性:生成的id需要包含业务相关信息,以便在分析和调试时更容易理解和识别。


技术实现思路

1、为此,本专利技术提供了一种分布式自增唯一id方法装置、设备及可读存储介质用以克服现有技术中无法同时兼顾保证唯一性,适用于高并发场景,减少占用存储和传输资源,适用于数据库存储,适用于排序和范围查询,适用于跨多个数据库的唯一标志的问题。

2、为实现上述目的,本专利技术第一方面公开了一种分布式自增唯一id方法,所述方法包括,

3、步骤s1,采用构造或回调的方式完成初始化,初始化过程中自动根据主机名/ip查询数据库查询是否已配置应用id与机器名;

4、如果已配置应用id与机器名,且检测已配置的应用id与机器名符合编码要求,则使用已配置的应用id加机器名当做6位10进制机器编码;

5、如果已配置应用id与机器名,但检测已配置的应用id与机器名不符合编码要求,则:若id不足6位,左补0;若id多余6位则从最低位向最高位方向截取6位。

6、如果未配置应用id与机器名,则自动向表中新增一条数据,获取其id来当做机器编码。

7、步骤s2,初始化完成后,进行id生成流程:

8、具体而言,获取初始化生成的id,获取系统当前时间到毫秒级别,判定前次系统时间是否为空;

9、若判定前次时间为空,将系统当前时间赋值给前次时间;

10、若判定前次时间不为空,则判定当前系统时间减前次系统时间是否超过阈值;

11、进一步地,若判定当前系统时间减前次系统时间超过阈值,则进行抛出时钟回拨异常操作;

12、若判定当前系统时间减前次系统时间不超过阈值,则结束判定。

13、步骤s3,获取同一时间戳内发生的并发交易记录,根据所述发生的并发交易的次数计算得到累加值。

14、进一步地,判定累加值是否达到最大值;

15、若判定累加值达到最大值,则通过自旋不断重新获取当前最新时间,直到当前时间大于前次时间,将当前时间赋值给前次时间并且将累加值清零,使用累加值=0组装id,并将结果返回id

16、若判定累加值没有达到最大值,则进行累加值加1操作组装id,继续进行判定当前时间是否大于前次时间;

17、若判定结果为当前时间大于前次时间,则将当前时间赋值给前次时间,并且将累加值进行清零操作,并将结果返回id。

18、若判定结果为当前时间不大于前次时间,则直接将结果返回id。

19、进一步地,所述id生成过程中设置有异步线程id生成模式,将预生成id放入一个阻塞队列,当调用id生成时,从所述阻塞队列内部直接获取id并返回,所述异步线程id生成模式可根据需要选择是否启用。

20、进一步地,所述机器编码为固定值、依赖数据库自动生成的全局唯一值中的任一种。

21、本专利技术第二方面还提供了一种装置,包括,

22、初始化单元,用于完成初始化,所述初始化过程包括:获取主机名与主机ip,根据所述主机名或主机ip获取得到机器编码作为初始id;

23、id生成单元,用于进行id生成流程,获取系统当前时间,根据所述系统当前时间生成所述id的时间戳;获取同一时间戳内发生的并发交易记录,根据所述发生的并发交易的次数计算得到累加值;

24、id组合单元,用于将所述初始化单元得到的机器编码,所述id生成单元得到的时间戳及累加值进行排列组合,将组合后的结果返回id;

25、判定单元,用于对所述初始化单元、所述id生成单元、所述id组合单元执行流程过程中的判定程序进行判定。

26、进一步地,所述id生成单元设置有异步线程id生成模式,将预生成id放入一个阻塞队列,当调用id生成时,从所述阻塞队列内部直接获取id并返回,所述异步线程id生成模式可根据需要选择是否启用。

27、本专利技术第三方面提供了一种计算设备,包括:

28、存储器,用于存储程序指令;

29、处理器,用于调用所述存储器中存储的程序指令,按照获得的程序指令执行上述所述的一种分布式自增唯一id方法。

30、本专利技术第四方面还提供了一种计算机可读存储介质,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,实现如上述所述的一种分布式自增唯一id方法,所述可读介质可以为多个,所述多个可读介质相互之间能够独立运行。

31、与现有技术相比,本专利技术的有益效果在于;

32、1、通过时间戳及累加值的计算达到全局唯一性,本专利技术支持生成分布式全局唯一id;

33、2.不同部署环境适应性:多种部署环境的支持,如虚机或者docker环境;

34、3.分布式环境适应性:可以在分布式系统中轻松部署和管理,适用多节点、多数据中心的架构,有助于实现系统的水平扩展和容错;

35、4.分布式下的时间有序:本专利技术提供了分布式id的全局时间有序性本文档来自技高网...

【技术保护点】

1.一种分布式自增唯一ID方法,其特征在于,包括,

2.根据权利要求1所述的分布式自增唯一ID方法,其特征在于,所述初始化过程中自动根据主机名/IP查询数据库查询是否已配置应用ID与机器名;

3.根据权利要求1所述的分布式自增唯一ID方法,其特征在于,所述ID的时间戳根据所述系统当前时间顺序进行排序;

4.根据权利要求1所述的分布式自增唯一ID方法,其特征在于,所述步骤S3中计算得到的累加值,进一步判定累加值是否达到最大值;

5.根据权利要求1所述的分布式自增唯一ID方法,其特征在于,所述ID生成过程中设置有异步线程ID生成模式,将预生成ID放入一个阻塞队列,当调用ID生成时,从所述阻塞队列内部直接获取ID并返回,所述异步线程ID生成模式可根据需要选择是否启用。

6.根据权利要求1所述的分布式自增唯一ID方法,其特征在于,所述机器编码为固定值、依赖数据库自动生成的全局唯一值中的任一种。

7.一种装置,其特征在于,包括,

8.根据权利要求7所述的装置,其特征在于,所述ID生成单元设置有异步线程ID生成模式,将预生成ID放入一个阻塞队列,当调用ID生成时,从所述阻塞队列内部直接获取ID并返回,所述异步线程ID生成模式可根据需要选择是否启用。

9.一种计算设备,其特征在于,包括:

10.一种计算机可读存储介质,其特征在于,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,实现如权利要求1至6中任一项方法,所述可读介质可以为多个,所述多个可读介质相互之间能够独立运行。

...

【技术特征摘要】

1.一种分布式自增唯一id方法,其特征在于,包括,

2.根据权利要求1所述的分布式自增唯一id方法,其特征在于,所述初始化过程中自动根据主机名/ip查询数据库查询是否已配置应用id与机器名;

3.根据权利要求1所述的分布式自增唯一id方法,其特征在于,所述id的时间戳根据所述系统当前时间顺序进行排序;

4.根据权利要求1所述的分布式自增唯一id方法,其特征在于,所述步骤s3中计算得到的累加值,进一步判定累加值是否达到最大值;

5.根据权利要求1所述的分布式自增唯一id方法,其特征在于,所述id生成过程中设置有异步线程id生成模式,将预生成id放入一个阻塞队列,当调用id生成时,从所述阻塞队列内部直接获取id并返回,所述异步线程id生成模式可根据...

【专利技术属性】
技术研发人员:颜祎名
申请(专利权)人:中信百信银行股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1