分布式系统全局唯一ID生成方法、系统、设备及介质技术方案

技术编号:34357196 阅读:55 留言:0更新日期:2022-07-31 06:49
本申请公开了一种分布式系统全局唯一ID生成方法、系统、设备及介质,包括部署环境组件:etcd和集成SDK的微服务;启动微服务,从etcd中获取工作机器ID,将其自动写入key后发送至etcd;监听微服务写入的所有key并处理删除事件,定时生成第一预设数量的全局ID并放入队列中;若队列中的可用全局ID数目大于或等于队列总容量的一半,从队列中任取一个作为全局唯一ID。本申请无需依赖etcd和本地机器时钟,而是只需将操作全部集成在SDK中,并使用未来时间解决时钟回拨问题。同时,基于etcd解决机器ID的自动生成和复用问题,采用异步预生成方式提前生成一批全局唯一ID,极大提高获取全局ID的吞吐量。ID的吞吐量。ID的吞吐量。

Generation method, system, equipment and media of global unique ID of distributed system

【技术实现步骤摘要】
分布式系统全局唯一ID生成方法、系统、设备及介质


[0001]本申请涉及分布式系统ID处理
,尤其涉及一种分布式系统全局唯一ID生成方法、系统、设备及介质。

技术介绍

[0002]在分布式系统中,常常需要对业务数据打上唯一标识。如订单系统有订单ID,商品系统有商品ID,用户系统中有用户ID等。对于这类ID,通常会存在以下要求:第一,ID全局唯一或某类业务内唯一;第二,ID单调递增,以满足排序和增量拉取的需求。
[0003]目前,生成全局唯一ID最常见的方法主要有以下几类:第一类是强依赖存储系统(MySQL、MongoDB、Redis等),对存储系统的性能要求很高,同时对存储系统的压力也很大,生成的ID还是连续的,容易泄露商业机密,并且业务量大的场景还要进行分库分表,导致开发和运维效率较低。第二类是以Snowflake算法为基础,不依赖任何存储系统,本地生成全局ID,但这种方式需要人工指定机器ID,并且对机器时钟非常敏感,存在时钟回拨问题;第三类是再第二类基础上对Snowflake算法进行一些局部优化,可以自动获取工作机器ID,但是这类方法只是不断创建新的工作机器ID,对已经分配出去的机器ID不能够复用和再分配,导致在pod重启频繁的kubernetes环境下容易造成机器ID不够用的情况,从而无法生成全局唯一ID。

技术实现思路

[0004]本申请的目的在于提供一种分布式系统全局唯一ID生成方法、系统、设备及介质,以解决现有基于Snowflake算法生成全局ID时存在的需要依赖人工分配工作机器ID以及时钟回拨的问题。
[0005]为实现上述目的,本申请提供一种分布式系统全局唯一ID生成方法,包括:部署环境组件,所述组件包括etcd和集成SDK的微服务;启动微服务,从etcd中自动获取工作机器ID,将工作机器ID自动写入key后发送至etcd;监听微服务写入的所有key并处理删除事件,定时生成第一预设数量的全局ID并放入队列中;若队列中的可用全局ID数目大于或等于队列总容量的一半,从队列中任取一个作为全局唯一ID。
[0006]进一步,作为优选地,所述定时生成第一预设数量的全局ID并放入队列中,包括:基于改进的Snowflake算法定时生成第一预设数量的全局ID并放入队列中;其中,生成的全局ID的时间戳为相对于某一时间基点的增量值。
[0007]进一步,作为优选地,所述的分布式系统全局唯一ID生成方法,还包括:若队列中的可用全局ID数目小于队列总容量的一半,异步生成第二预设数量的全局ID并放入队列中,再从队列中任取一个作为全局唯一ID。
[0008]进一步,作为优选地,所述将工作机器ID自动写入key后发送至etcd,包括:在key中附带租约,并启动自动续约机制;若服务宕机,key在超时后会自动删除,且对应的工作机器ID会被回收,并被分配至其他服务。
[0009]进一步,作为优选地,在所述启动微服务之前,还包括:在etcd中存放带有第一前缀、第二前缀以及第三前缀的key;所述第三前缀包括多种。
[0010]进一步,作为优选地,所述从etcd中获取工作机器ID,包括:启动微服务,判断在etcd中是否能匹配带有第三前缀的其他key;若是,则将当前带有第三前缀的其他key作为工作机器ID;若否,则在etcd中设置kv键值对,并以kv键值对中key对应的version值作为工作机器ID。
[0011]进一步,作为优选地,所述version值会根据kv键值对中的value值的变化而递增。
[0012]本申请还提供一种分布式系统全局唯一ID生成系统,包括:部署单元,用于部署环境组件,所述组件包括etcd和集成SDK的微服务;工作机器ID获取单元,用于启动微服务,从etcd中自动获取工作机器ID,将工作机器ID自动写入key后发送至etcd;监听单元,用于监听微服务写入的所有key并处理删除事件,定时生成第一预设数量的全局ID并放入队列中;全局唯一ID生成单元,用于若队列中的可用全局ID数目大于或等于队列总容量的一半,从队列中任取一个作为全局唯一ID。
[0013]本申请还提供一种终端设备,包括:一个或多个处理器;存储器,与所述处理器耦接,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上任一项所述的分布式系统全局唯一ID生成方法。
[0014]本申请还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述的分布式系统全局唯一ID生成方法。
[0015]相对于现有技术,本申请的有益效果在于:本申请公开了一种分布式系统全局唯一ID生成方法,包括部署环境组件:etcd和集成SDK的微服务;启动微服务,从etcd中获取工作机器ID,将其自动写入key后发送至etcd;监听微服务写入的所有key并处理删除事件,定时生成第一预设数量的全局ID并放入队列中;若队列中的可用全局ID数目大于或等于队列总容量的一半,从队列中任取一个作为全局唯一ID。
[0016]本申请使用嵌入式SDK的方式实现,所有的操作步骤都封装在SDK中,使用方只需集成本SDK 即可,使用方便且可适用范围广。本申请无需强依赖存储系统etcd,只在服务启动时从etcd中自动获取工作机器ID,后续的全局唯一ID只在本地计算完成。本申请不完全依赖本地机器时钟,而是使用未来时间来解决时钟回拨问题,同时使用异步预生成的方法来加快获取全局ID的速度。此外本申请中通过利用微服务与etcd之间的租约的动态配合,
使得分配出去的工作机器ID还可以回收复用,节约了开发成本。
附图说明
[0017]为了更清楚地说明本申请的技术方案,下面将对实施方式中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0018]图1是本申请某一实施例提供的Snowflake算法的模型结构示意图;图2是本申请某一实施例提供的分布式系统全局唯一ID生成方法的流程示意图;图3是本申请某一实施例提供的部署的系统架构示意图;图4是本申请某一实施例提供的针对kubernetes环境部署的系统架构示意图;图5是本申请某一实施例提供的改进的Snowflake算法的模型结构示意图;图6是本申请又一实施例提供的分布式系统全局唯一ID生成方法的流程示意图;图7是本申请某一实施例提供的分布式系统全局唯一ID生成系统的结构示意图;图8是本申请某一实施例提供的终端设备的结构示意图。
具体实施方式
[0019]下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0020]应本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种分布式系统全局唯一ID生成方法,其特征在于,包括:部署环境组件,所述组件包括etcd和集成SDK的微服务;启动微服务,从etcd中自动获取工作机器ID,将工作机器ID自动写入key后发送至etcd;监听微服务写入的所有key并处理删除事件,定时生成第一预设数量的全局ID并放入队列中;若队列中的可用全局ID数目大于或等于队列总容量的一半,从队列中任取一个作为全局唯一ID。2.根据权利要求1所述的分布式系统全局唯一ID生成方法,其特征在于,所述定时生成第一预设数量的全局ID并放入队列中,包括:基于改进的Snowflake算法定时生成第一预设数量的全局ID并放入队列中;其中,生成的全局ID的时间戳为相对于某一时间基点的增量值。3.根据权利要求1所述的分布式系统全局唯一ID生成方法,其特征在于,还包括:若队列中的可用全局ID数目小于队列总容量的一半,异步生成第二预设数量的全局ID并放入队列中,再从队列中任取一个作为全局唯一ID。4.根据权利要求1所述的分布式系统全局唯一ID生成方法,其特征在于,所述将工作机器ID自动写入key后发送至etcd,包括:在key中附带租约,并启动自动续约机制;若服务宕机,key在超时后会自动删除,且对应的工作机器ID会被回收,并被分配至其他服务。5.根据权利要求1所述的分布式系统全局唯一ID生成方法,其特征在于,在所述启动微服务之前,还包括:在etcd中存放带有第一前缀、第二前缀以及第三前缀的key;所述第三前缀包括多种。6.根据权利要求5所述的分布式系统全局唯一ID生成方法,其特征在...

【专利技术属性】
技术研发人员:卢超林京梁海棠
申请(专利权)人:广州市玄武无线科技股份有限公司
类型:发明
国别省市:

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

1