分布式ID生成方法、分布式ID生成装置及存储介质制造方法及图纸

技术编号:38890082 阅读:13 留言:0更新日期:2023-09-22 14:15
本发明专利技术公开了分布式ID生成方法、分布式ID生成装置及存储介质,其中,所述方法包括以下步骤:在缓存队列中可消费分布式ID的条数小于预设数量时,获取当前分库对应的节点ID,以及获取上一次生成的历史分布式ID;获取所述历史分布式ID的自增序号,时间回拨字段的第一填充值;若当前时间晚于所述历史分布式ID对应的时间,根据所述节点ID、所述第一填充值、执行自增之后的所述自增序号以及当前时间,组装成新增分布式ID;将所述新增分布式ID更新为所述缓存队列中的所述可消费分布式ID。本发明专利技术通过对节点ID对应的时间与历史分布式的时间进行比较,进而基于比对结果生成唯一的新增分布式ID,解决了因时间回溯导致分布式ID重复的问题。决了因时间回溯导致分布式ID重复的问题。决了因时间回溯导致分布式ID重复的问题。

【技术实现步骤摘要】
分布式ID生成方法、分布式ID生成装置及存储介质


[0001]本专利技术涉及分布式系统领域,尤其涉及分布式ID生成方法、分布式ID生成装置及存储介质。

技术介绍

[0002]在单体应用场景下最常用的方式是使用数据库自增ID(Identity document,身份标识)来作为唯一ID。而随着分布式架构的演进,数据在分库分表后需要分布式应用生成全局唯一ID来标识一条数据,数据库的自增ID只能保证同一数据库下ID唯一,显然不能满足分布式系统数据多分库和多应用实例情况下全局唯一ID的需求。常见的生成分布式唯一ID的算法有多种,例如UUID(Universally Unique Identifier,通用唯一标识码)、数据库或其他中间件自增以及雪花算法等。
[0003]在相关的分布式唯一ID的方案中,通过雪花算法生成的分布式ID依赖于机器的时钟,当设备的时钟从当前时刻回退到先前的某一时刻时,生成的ID的时间戳也会随之回退,此时则会出现生成的ID与时钟回退之前在当前时刻生成的ID相同的情况,使得生成的分布式ID出现重复,进而出现分布式系统下节点ID不唯一的问题。
[0004]上述内容仅用于辅助理解本专利技术的技术方案,并不代表承认上述内容是现有技术。

技术实现思路

[0005]本专利技术的主要目的在于提供一种分布式ID生成方法、分布式ID生成装置及存储介质,解决现有技术中基于雪花算法生成的分布式ID依赖时间戳导致分布式ID不唯一的问题。
[0006]为实现上述目的,本专利技术提供一种分布式ID生成方法,所述方法包括以下步骤:
[0007]在缓存队列中可消费分布式ID的条数小于预设数量时,获取当前分库对应的节点ID,以及获取上一次生成的历史分布式ID;
[0008]获取所述历史分布式ID的时间回拨字段的第一填充值,以及随机的自增序号;
[0009]若当前时间晚于所述历史分布式ID对应的时间,根据所述节点ID、所述第一填充值、执行自增之后的所述自增序号以及当前时间,组装成新增分布式ID;
[0010]将所述新增分布式ID更新为所述缓存队列中的所述可消费分布式ID。
[0011]可选地,所述获取所述历史分布式ID的时间回拨字段的第一填充值,以及随机的自增序号之后,还包括:
[0012]若当前时间早于所述历史分布式ID对应的时间,基于所述第一填充值执行自增动作,生成第二填充值;
[0013]根据所述节点ID、所述第二填充值、执行自增之后的所述自增序号以及当前时间,组装成所述新增分布式ID。
[0014]可选地,所述若当前时间早于所述历史分布式ID对应的时间,基于所述第一填充
值执行自增动作,生成第二填充值的步骤包括:
[0015]若当前时间早于所述历史分布式ID对应的时间,确定所述当前时间与所述时间的差值;
[0016]若所述差值大于预设阈值,则基于所述第一填充值执行自增动作,生成所述第二填充值;或者
[0017]若所述差值小于所述预设阈值,跳转执行所述获取所述历史分布式ID的时间回拨字段的第一填充值,以及随机的自增序号的步骤。
[0018]可选地,所述若当前时间晚于所述历史分布式ID对应的时间,根据所述节点ID、所述第一填充值、执行自增之后的所述自增序号以及当前时间,组装成新增分布式ID的步骤包括:
[0019]若当前时间晚于所述历史分布式ID对应的时间,基于预设数值对所述自增序号进行自增处理,并确定自增处理后的所述自增序号的第三填充值;
[0020]获取所述自增序号的位数以及进位计数制,并基于所述位数以及所述进位计数制确定所述自增序号的最大填充值;
[0021]在所述第三填充值小于所述最大填充值时,根据所述节点ID、所述第一填充值、所述自增序号对应的第三填充值以及当前时间,基于雪花算法组装成新增分布式ID。
[0022]可选地,所述在缓存队列中可消费分布式ID的条数小于预设数量时,获取当前分库对应的节点ID,以及获取上一次生成的历史分布式ID的步骤包括:
[0023]在所述缓存队列中所述可消费分布式ID的条数小于所述预设数量时,获取所述当前分库对应的所述节点ID,以及所述节点ID的注册状态;
[0024]若所述注册状态为已注册,则获取所述历史分布式ID。
[0025]可选地,所述在所述缓存队列中所述可消费分布式ID的条数小于所述预设数量时,获取所述当前分库对应的所述节点ID,以及所述节点ID的注册状态的步骤之后,还包括:
[0026]若所述注册状态为未注册,确定分库数量,并根据所述分库数量确定所述当前分库的步长;
[0027]基于所述步长,对所述节点ID执行节点注册动作后,获取所述历史分布式ID。
[0028]可选地,所述在缓存队列中可消费分布式ID的条数小于预设数量时,获取当前分库对应的节点ID,以及获取上一次生成的历史分布式ID的步骤之前,还包括:
[0029]接收到分布式ID调用请求时,确定所述缓存队列的所述可消费分布式ID中,所述分布式ID调用请求关联的响应ID;
[0030]将所述响应ID发送到所述分布式ID调用请求对应的业务数据中。
[0031]可选地,所述接收到分布式ID调用请求时,确定所述缓存队列的所述可消费分布式ID中,所述分布式ID调用请求关联的响应ID的步骤之前,还包括:
[0032]确定所述缓存队列的尾部指针以及光标指针,其中,所述尾部指针用于标识所述缓存队列中最新填充的所述分布式ID,所述光标指针用于标识所述缓存队列中已消费的所述分布式ID;
[0033]在所述尾部指针处于所述光标指针的后一位置,或者所述光标指针处于所述尾部指针的所述后一位置时,基于预设拒接策略阻断新增的所述分布式ID或者阻断所述分布式
ID的提取。
[0034]此外,为实现上述目的,本专利技术还提供一种分布式ID生成装置,所述分布式ID生成装置包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的分布式ID生成程序,所述分布式ID生成程序被所述处理器执行时实现如上所述的分布式ID生成方法的步骤。
[0035]此外,为实现上述目的,本专利技术还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有分布式ID生成程序,所述分布式ID生成程序被处理器执行时实现如上所述的分布式ID生成方法的步骤。
[0036]本专利技术实施例提供了分布式ID生成方法、分布式ID生成装置及存储介质,在缓存队列中可消费分布式ID的条数小于预设数量时,获取当前分库对应的节点ID,以及获取上一次生成的历史分布式ID,获取所述历史分布式ID的时间回拨字段的第一填充值,以及随机的自增序号,若当前时间晚于所述历史分布式ID对应的时间,根据所述节点ID、所述第一填充值、执行自增之后的所述自增序号以及当前时间,组装成新增分布式ID,将所述新增分布式ID更新为所述缓存队列中的所述可消费分布式ID。基于此,可以看出,对获取节点ID对应的时本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种分布式ID生成方法,其特征在于,所述分布式ID生成方法包括:在缓存队列中可消费分布式ID的条数小于预设数量时,获取当前分库对应的节点ID,以及获取上一次生成的历史分布式ID;获取所述历史分布式ID的时间回拨字段的第一填充值,以及随机的自增序号;若当前时间晚于所述历史分布式ID对应的时间,根据所述节点ID、所述第一填充值、执行自增之后的所述自增序号以及当前时间,组装成新增分布式ID;将所述新增分布式ID更新为所述缓存队列中的所述可消费分布式ID。2.如权利要求1所述的分布式ID生成方法,其特征在于,所述获取所述历史分布式ID的时间回拨字段的第一填充值,以及随机的自增序号之后,还包括:若当前时间早于所述历史分布式ID对应的时间,基于所述第一填充值执行自增动作,生成第二填充值;根据所述节点ID、所述第二填充值、执行自增之后的所述自增序号以及当前时间,组装成所述新增分布式ID。3.如权利要求2所述的分布式ID生成方法,其特征在于,所述若当前时间早于所述历史分布式ID对应的时间,基于所述第一填充值执行自增动作,生成第二填充值的步骤包括:若当前时间早于所述历史分布式ID对应的时间,确定所述当前时间与所述时间的差值;若所述差值大于预设阈值,则基于所述第一填充值执行自增动作,生成所述第二填充值;或者若所述差值小于所述预设阈值,跳转执行所述获取所述历史分布式ID的时间回拨字段的第一填充值,以及随机的自增序号的步骤。4.如权利要求1所述的分布式ID生成方法,其特征在于,所述若当前时间晚于所述历史分布式ID对应的时间,根据所述节点ID、所述第一填充值、执行自增之后的所述自增序号以及当前时间,组装成新增分布式ID的步骤包括:若当前时间晚于所述历史分布式ID对应的时间,基于预设数值对所述自增序号进行自增处理,并确定自增处理后的所述自增序号的第三填充值;获取所述自增序号的位数以及进位计数制,并基于所述位数以及所述进位计数制确定所述自增序号的最大填充值;在所述第三填充值小于所述最大填充值时,根据所述节点ID、所述第一填充值、所述自增序号对应的第三填充值以及当前时间,基于雪花算法组装成新增分布式ID。5.如权利要求1所述的分布式ID生成方法,其特征在于,所述在缓存队列中可消费分布式ID的条数小于预设数量时,获取当前...

【专利技术属性】
技术研发人员:王帅
申请(专利权)人:招商银行股份有限公司
类型:发明
国别省市:

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

1