一种基于snowflake的标识生成方法和装置制造方法及图纸

技术编号:25708409 阅读:23 留言:0更新日期:2020-09-23 02:55
本发明专利技术公开了一种基于snowflake的标识生成方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:判断当前时间是否小于上一次生成标识的时间;若大于或等于,则将防时钟回拨标记位设置为第一数值,确定当前时间与基础时间的差值,转换差值得到第一时间戳,进而基于符号位、第一数值、第一时间戳和序列号,生成标识;若小于,则确定发生时钟回拨,获取与时钟回拨后的第二时间戳对应的第一标识,以将第一标识中的防时钟回拨标记位由第一数值翻转为第二数值,得到标识。该实施方式在传统的snowflake算法基础上,对分布式ID分段处理,以解决时钟回拨导致的ID重复问题;设置空闲位可以缩短ID长度,方便后续其他标识位的动态扩展。

【技术实现步骤摘要】
一种基于snowflake的标识生成方法和装置
本专利技术涉及计算机
,尤其涉及一种基于snowflake的标识生成方法和装置。
技术介绍
在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识,例如合同系统中的合同号,核心、抵质押、催收系统中的贷款号或银行卡号等序列号等,这些唯一标识就是分布式ID。目前基于snowflake算法生成的分布式ID为64位,具体如下(参见图1所示):使用41bit存放时间,精确到毫秒,使用10bit表示机器ID,12bit表示序列号,每秒每台服务器可生成409.6万个ID。在实现本专利技术的过程中,专利技术人发现现有技术至少存在如下问题:1、时间戳基于工作设备的本机时钟生成,因此当工作设备出现时钟回拨情况时,生成ID的时间戳也会随之回退,如果仍按照回退后的时间戳生成ID,会出现ID重复问题;2、snowflake算法中的bit位分配固定,在极端情况下,例如当worker大于1024时,snowflake算法不能满足需求,或者实际应用环境可能不需要部署1024个worker,此时64位的ID对于大多数软件系统而言是过剩的,无法根据应用场景进行适当调整。
技术实现思路
有鉴于此,本专利技术实施例提供一种基于snowflake的标识生成方法和装置,至少能够解决现有技术snowflake算法中的bit位分配固定,以及不能解决时钟回拨引发的ID重复问题。为实现上述目的,根据本专利技术实施例的一个方面,提供了一种基于snowflake的标识生成方法,包括符号位、防时钟回拨标记位、时间戳和序列号,所述序列号为自增序列号,包括:判断当前时间是否小于上一次生成标识的时间;若大于或等于,则将所述防时钟回拨标记位设置为第一数值,确定所述当前时间与基础时间的差值,转换所述差值得到第一时间戳,进而基于所述符号位、所述第一数值、所述第一时间戳和所述序列号,生成标识;若小于,则确定发生时钟回拨,获取与时钟回拨后的第二时间戳对应的第一标识,以将所述第一标识中的防时钟回拨标记位由所述第一数值翻转为第二数值,得到标识。可选的,所述标识还包括数据中心位和设备标识位,所述数据中心位对应于数据中心的编号,所述设备标识位对应于发放序列号的设备的编号,所述设备位于所述数据中心中;所述基于所述符号位、所述第一数值、所述第一时间戳和所述序列号,生成标识,包括:基于所述符号位、所述第一数值、所述第一时间戳、所述数据中心位、所述设备标识位和所述序列号,生成标识。可选的,所述标识还包括空闲位;所述方法还包括:将所述空闲位中的每位设置为第三数值;以及在将所述空闲位中的一位或多位移动至其他标识位后,根据剩余空闲位的位数,得到第四数值。可选的,所述标识为64位整数,为避免生成负数,将第1位符号位设置为零,只使用剩余的63位。可选的,所述标识为64位减去空闲位位数后的整数;所述方法还包括:将所述空闲位从64位标识中移除;以及将所述空闲位中的一位或多位添加至其他标识位,以对其他标识位进行位数扩展。为实现上述目的,根据本专利技术实施例的另一方面,提供了一种基于snowflake的标识生成装置,所述标识包括符号位、防时钟回拨标记位、时间戳和序列号,所述序列号为自增序列号,包括:比对模块,用于判断当前时间是否小于上一次生成标识的时间;第一生成模块,用于若大于或等于,则将所述防时钟回拨标记位设置为第一数值,确定所述当前时间与基础时间的差值,转换所述差值得到第一时间戳,进而基于所述符号位、所述第一数值、所述第一时间戳和所述序列号,生成标识;第二生成模块,用于若小于,则确定发生时钟回拨,获取与时钟回拨后的第二时间戳对应的第一标识,以将所述第一标识中的防时钟回拨标记位由所述第一数值翻转为第二数值,得到标识。可选的,所述标识还包括数据中心位和设备标识位,所述数据中心位对应于数据中心的编号,所述设备标识位对应于发放序列号的设备的编号,所述设备位于所述数据中心中;所述第一生成模块,用于:基于所述符号位、所述第一数值、所述第一时间戳、所述数据中心位、所述设备标识位和所述序列号,生成标识。可选的,所述标识还包括空闲位;所述装置还包括:将所述空闲位中的每位设置为第三数值;以及在将所述空闲位中的一位或多位移动至其他标识位后,根据剩余空闲位的位数,得到第四数值。可选的,所述标识为64位整数,为避免生成负数,将第7位符号位设置为零,只使用剩余的63位。可选的,所述标识为64位减去空闲位位数后的整数;所述装置还包括:将所述空闲位从64位标识中移除;以及将所述空闲位中的一位或多位添加至其他标识位,以对其他标识位进行位数扩展。为实现上述目的,根据本专利技术实施例的再一方面,提供了一种基于snowflake的标识生成电子设备。本专利技术实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一所述的基于snowflake的标识生成方法。为实现上述目的,根据本专利技术实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一所述的基于snowflake的标识生成方法。根据本专利技术所述提供的方案,上述专利技术中的一个实施例具有如下优点或有益效果:基于snowflake算法进行改进,充分考虑数据中心和时钟回拨场景,增加可以数值翻转的防时钟回拨标记位,以在发生时钟回拨时针对同一时间戳生成不同ID,解决了ID重复问题;设置空闲位可以缩短ID长度,方便后续其他标识位的动态扩展。上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。附图说明附图用于更好地理解本专利技术,不构成对本专利技术的不当限定。其中:图1是现有snowflake算法的bit位分布示意图;图2是根据本专利技术实施例的一种基于snowflake的标识生成方法的主要流程示意图;图3是根据本专利技术实施例的一种可选的基于snowflake的标识生成方法的流程示意图;图4是根据本专利技术实施例的一种基于snowflake的标识生成装置的主要模块示意图;图5是本专利技术实施例可以应用于其中的示例性系统架构图;图6是适于用来实现本专利技术实施例的移动设备或服务器的计算机系统的结构示意图。具体实施方式以下结合附图对本专利技术的示范性实施例做出说明,其中包括本专利技术实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本专利技术的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。参见图2,示出的是本专利技术实施例提供的一种基于snowflake的标识生成方法的主要流本文档来自技高网...

【技术保护点】
1.一种基于snowflake的标识生成方法,所述标识包括符号位、防时钟回拨标记位、时间戳和序列号,所述序列号为自增序列号,其特征在于,包括:/n判断当前时间是否小于上一次生成标识的时间;/n若大于或等于,则将所述防时钟回拨标记位设置为第一数值,确定所述当前时间与基础时间的差值,转换所述差值得到第一时间戳,进而基于所述符号位、所述第一数值、所述第一时间戳和所述序列号,生成标识;/n若小于,则确定发生时钟回拨,获取与时钟回拨后的第二时间戳对应的第一标识,以将所述第一标识中的防时钟回拨标记位由所述第一数值翻转为第二数值,得到标识。/n

【技术特征摘要】
1.一种基于snowflake的标识生成方法,所述标识包括符号位、防时钟回拨标记位、时间戳和序列号,所述序列号为自增序列号,其特征在于,包括:
判断当前时间是否小于上一次生成标识的时间;
若大于或等于,则将所述防时钟回拨标记位设置为第一数值,确定所述当前时间与基础时间的差值,转换所述差值得到第一时间戳,进而基于所述符号位、所述第一数值、所述第一时间戳和所述序列号,生成标识;
若小于,则确定发生时钟回拨,获取与时钟回拨后的第二时间戳对应的第一标识,以将所述第一标识中的防时钟回拨标记位由所述第一数值翻转为第二数值,得到标识。


2.根据权利要求1所述的方法,其特征在于,所述标识还包括数据中心位和设备标识位,所述数据中心位对应于数据中心的编号,所述设备标识位对应于发放序列号的设备的编号,所述设备位于所述数据中心中;
所述基于所述符号位、所述第一数值、所述第一时间戳和所述序列号,生成标识,包括:
基于所述符号位、所述第一数值、所述第一时间戳、所述数据中心位、所述设备标识位和所述序列号,生成标识。


3.根据权利要求1或2所述的方法,其特征在于,所述标识还包括空闲位;
所述方法还包括:
将所述空闲位中的每位设置为第三数值;以及
在将所述空闲位中的一位或多位移动至其他标识位后,根据剩余空闲位的位数,得到第四数值。


4.根据权利要求3所述的方法,其特征在于,所述标识为64位整数,为避免生成负数...

【专利技术属性】
技术研发人员:张鹏
申请(专利权)人:中国建设银行股份有限公司建信金融科技有限责任公司
类型:发明
国别省市:北京;11

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

1