一种全局唯一且递增的ID生成方法及系统技术方案

技术编号:29489264 阅读:29 留言:0更新日期:2021-07-30 19:00
本发明专利技术提供了一种全局且递增的ID生成方法及系统,ZooKeeper服务器在检测到目标ID服务器未注册的情况下,生成目标ID服务器对应的ZooKeeper持久顺序节点,ZooKeeper服务器依据已注册ID服务器对应的ZooKeeper持久顺序节点中存储的机器码标识,按照机器码标识递增的顺序,生成目标ID服务器的机器码标识,并将目标ID服务器的机器码标识存储在相应的ZooKeeper持久顺序节点中,完成对目标ID服务器的注册;目标ID服务器依据自身的机器码标识生成系统ID,系统ID包括第一预设位数的时间戳、第二预设位数的机器码标识和第三预设位数的自增序列。本发明专利技术通过ZooKeeper服务器维护ID服务器的机器码标识,避免由于系统中ID服务器的机器码标识不唯一导致的生成重复系统ID的问题。

【技术实现步骤摘要】
一种全局唯一且递增的ID生成方法及系统
本专利技术涉及数据库
,更具体的,涉及一种全局且递增的ID生成方法及系统。
技术介绍
在分布式系统中,当数据量巨大一张表无法承接时,就会涉及到分库分表操作。为了便于对分库分表后的数据进行查询、更新、迁移等操作,需要生成系统唯一主键ID,系统唯一主键ID具有以下特性:在整个系统ID唯一、ID是数字类型且是趋势递增的、简短便于查询。在分布式系统中存在多个用于生成系统唯一主键ID的服务器,如何保证多个服务器生成的系统唯一主键ID不重复成为本领域亟待解决的技术问题。
技术实现思路
有鉴于此,本专利技术提供了一种全局且递增的ID生成方法及系统,保证分布式系统中多个服务器生成系统ID的唯一性。为了实现上述专利技术目的,本专利技术提供的具体技术方案如下:一种全局且递增的ID生成方法,应用于全局且递增的ID生成系统,所述ID生成系统包括ZooKeeper服务器和多个ID服务器,所述方法包括:所述ZooKeeper服务器在检测到目标ID服务器未注册的情况下,生成所述目标ID服务器对应的ZooKeeper持久顺序节点,所述目标ID服务器为所述ID生成系统中的任意一个ID服务器;所述ZooKeeper服务器依据已注册ID服务器对应的ZooKeeper持久顺序节点中存储的机器码标识,按照机器码标识递增的顺序,生成所述目标ID服务器的机器码标识,并将所述目标ID服务器的机器码标识存储在相应的ZooKeeper持久顺序节点中,完成对所述目标ID服务器的注册;所述目标ID服务器依据自身的机器码标识生成系统ID,所述系统ID包括第一预设位数的时间戳、第二预设位数的机器码标识和第三预设位数的自增序列。可选的,在所述目标ID服务器依据自身的机器码标识生成系统ID之前,所述方法还包括:所述ZooKeeper服务器在检测到目标ID服务器已注册的情况下,获取所述目标ID服务器的本地系统时间;所述ZooKeeper服务器获取所有正在提供服务的ID服务器的本地系统时间的平均值;所述ZooKeeper服务器判断所述目标ID服务器的本地系统时间与所述平均值的绝对值是否小于阈值;若小于所述阈值,所述ZooKeeper服务器提示所述目标ID服务器启动成功;若不小于所述阈值,所述ZooKeeper服务器提示所述目标ID服务器启动失败,启动报警机制。可选的,所述目标ID服务器的机器码标识包括机房码和机器码。可选的,所述方法还包括:所述ID生成系统中的每个ID服务器基于网络时间同步协议实现时钟同步。可选的,所述方法还包括:所述目标ID服务器获取所述当前系统时间以及与所述当前系统时间邻近的存储周期内生成系统ID的最新时间;所述目标ID服务器计算所述当前系统时间与生成系统ID的最新时间之间的时间偏差值;所述目标ID服务器根据所述时间偏差值确定ID生成策略,并执行所述ID生成策略。可选的,所述目标ID服务器计算所述当前系统时间与生成系统ID的最新时间之间的时间偏差值,包括:所述目标ID服务器判断生成系统ID的最新时间是否大于所述当前系统时间;若大于所述当前系统时间,所述目标ID服务器计算生成系统ID的最新时间与所述当前系统时间之间由于时钟回拨产生的回拨时间偏差值;若不大于所述当前系统时间,所述目标ID服务器计算所述当前系统时间与生成系统ID的最新时间之间的增量时间偏差值。可选的,所述目标ID服务器根据所述时间偏差值确定ID生成策略,并执行所述ID生成策略,包括:所述目标ID服务器在所述增量时间偏差值不小于0的情况下,获取生成系统ID的最新时间对应的系统ID的自增序列值;所述目标ID服务器判断所述自增序列值是否大于预设增量最大值;若是,所述目标ID服务器的本地时钟从下一毫秒开始计时,得到最新的当前系统时间,依据自身的机器码标识和最新的当前系统时间生成系统ID,并更新生成系统ID的最新时间和相应系统ID的自增序列值;若否,所述目标ID服务器依据自身的机器码标识和所述当前系统时间生成系统ID,并更新生成系统ID的所述最新时间和相应系统ID的自增序列值。可选的,所述目标ID服务器根据所述时间偏差值确定ID生成策略,并执行所述ID生成策略,包括:所述目标ID服务器判断所述回拨时间偏差值是否小于回拨阈值;若不小于所述回拨阈值,所述目标ID服务器启动报警机制;若小于所述阈值,所述目标ID服务器的本地时钟继续计时两倍所述回拨阈值时间,得到最新的当前系统时间;所述目标ID服务器判断生成系统ID的最新时间是否大于所述所述最新的当前系统时间;若生成系统ID的最新时间大于所述最新的当前系统时间,所述目标ID服务器启动报警机制;若生成系统ID的最新时间不大于所述最新的当前系统时间,所述目标ID服务器返回执行所述计算所述当前系统时间与生成系统ID的最新时间之间的增量时间偏差值,这一步骤。一种全局且递增的ID生成系统,包括ZooKeeper服务器和多个ID服务器;所述ZooKeeper服务器,用于在检测到目标ID服务器未注册的情况下,生成所述目标ID服务器对应的ZooKeeper持久顺序节点,所述目标ID服务器为所述ID生成系统中的任意一个ID服务器,依据已注册ID服务器对应的ZooKeeper持久顺序节点中存储的机器码标识,按照机器码标识递增的顺序,生成所述目标ID服务器的机器码标识,并将所述目标ID服务器的机器码标识存储在相应的ZooKeeper持久顺序节点中,完成对所述目标ID服务器的注册;所述目标ID服务器,用于依据自身的机器码标识生成系统ID,所述系统ID包括第一预设位数的时间戳、第二预设位数的机器码标识和第三预设位数的自增序列。可选的,所述ZooKeeper服务器还用于:在所述目标ID服务器依据自身的机器码标识生成系统ID之前,且在检测到目标ID服务器已注册的情况下,获取所述目标ID服务器的本地系统时间;获取所有正在提供服务的ID服务器的本地系统时间的平均值;判断所述目标ID服务器的本地系统时间与所述平均值的绝对值是否小于阈值;若小于所述阈值,提示所述目标ID服务器启动成功;若不小于所述阈值,提示所述目标ID服务器启动失败,启动报警机制。可选的,所述目标ID服务器的机器码标识包括机房码和机器码。可选的,所述ID生成系统中的每个ID服务器,还用于基于网络时间同步协议实现时钟同步。可选的,所述目标ID服务器还用于:获取当前系统时间以及生成系统ID的最新时间;计算所述当前系统时间与生成系统ID的最新时间之间的时间偏差值;根据所述时间偏差值确定ID生成策略,并执行所述ID生成策略。可选的,所述目标ID服务器具体用于:判断生成系统ID的最新时间是否大于所述当前系统时间;若大于本文档来自技高网...

【技术保护点】
1.一种全局且递增的ID生成方法,其特征在于,应用于全局且递增的ID生成系统,所述ID生成系统包括ZooKeeper服务器和多个ID服务器,所述方法包括:/n所述ZooKeeper服务器在检测到目标ID服务器未注册的情况下,生成所述目标ID服务器对应的ZooKeeper持久顺序节点,所述目标ID服务器为所述ID生成系统中的任意一个ID服务器;/n所述ZooKeeper服务器依据已注册ID服务器对应的ZooKeeper持久顺序节点中存储的机器码标识,按照机器码标识递增的顺序,生成所述目标ID服务器的机器码标识,并将所述目标ID服务器的机器码标识存储在相应的ZooKeeper持久顺序节点中,完成对所述目标ID服务器的注册;/n所述目标ID服务器依据自身的机器码标识生成系统ID,所述系统ID包括第一预设位数的时间戳、第二预设位数的机器码标识和第三预设位数的自增序列。/n

【技术特征摘要】
1.一种全局且递增的ID生成方法,其特征在于,应用于全局且递增的ID生成系统,所述ID生成系统包括ZooKeeper服务器和多个ID服务器,所述方法包括:
所述ZooKeeper服务器在检测到目标ID服务器未注册的情况下,生成所述目标ID服务器对应的ZooKeeper持久顺序节点,所述目标ID服务器为所述ID生成系统中的任意一个ID服务器;
所述ZooKeeper服务器依据已注册ID服务器对应的ZooKeeper持久顺序节点中存储的机器码标识,按照机器码标识递增的顺序,生成所述目标ID服务器的机器码标识,并将所述目标ID服务器的机器码标识存储在相应的ZooKeeper持久顺序节点中,完成对所述目标ID服务器的注册;
所述目标ID服务器依据自身的机器码标识生成系统ID,所述系统ID包括第一预设位数的时间戳、第二预设位数的机器码标识和第三预设位数的自增序列。


2.根据权利要求1所述的方法,其特征在于,在所述目标ID服务器依据自身的机器码标识生成系统ID之前,所述方法还包括:
所述ZooKeeper服务器在检测到目标ID服务器已注册的情况下,获取所述目标ID服务器的本地系统时间;
所述ZooKeeper服务器获取所有正在提供服务的ID服务器的本地系统时间的平均值;
所述ZooKeeper服务器判断所述目标ID服务器的本地系统时间与所述平均值的绝对值是否小于阈值;
若小于所述阈值,所述ZooKeeper服务器提示所述目标ID服务器启动成功;
若大于或等于所述阈值,所述ZooKeeper服务器提示所述目标ID服务器启动失败,启动报警机制。


3.根据权利要求1所述的方法,其特征在于,所述目标ID服务器的机器码标识包括机房码和机器码。


4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述ID生成系统中的每个ID服务器基于网络时间同步协议实现时钟同步。


5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
所述目标ID服务器获取当前系统时间以及生成系统ID的最新时间;
所述目标ID服务器计算所述当前系统时间与生成系统ID的最新时间之间的时间偏差值;
所述目标ID服务器根据所述时间偏差值确定ID生成策略,并执行所述ID生成策略。


6.根据权利要求5所述的方法,其特征在于,所述目标ID服务器计算所述当前系统时间与生成系统ID的最新时间之间的时间偏差值,包括:
所述目标ID服务器判断生成系统ID的最新时间是否大于所述当前系统时间;
若大于所述当前系统时间,所述目标ID服务器计算生成系统ID的最新时间与所述当前系统时间之间由于时钟回拨产生的回拨时间偏差值;
若不大于所述当前系统时间,所述目标ID服务器计算所述当前系统时间与生成系统ID的最新时间之间的增量时间偏差值。


7.根据权利要求6所述的方法,其特征在于,所述目...

【专利技术属性】
技术研发人员:徐佳宏陈华兵黄金龙曾珂
申请(专利权)人:深圳市茁壮网络股份有限公司
类型:发明
国别省市:广东;44

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

1