CN110096528A - 一种分布式系统中生成序列的方法、装置及系统 - Google Patents
一种分布式系统中生成序列的方法、装置及系统 Download PDFInfo
- Publication number
- CN110096528A CN110096528A CN201910292979.7A CN201910292979A CN110096528A CN 110096528 A CN110096528 A CN 110096528A CN 201910292979 A CN201910292979 A CN 201910292979A CN 110096528 A CN110096528 A CN 110096528A
- Authority
- CN
- China
- Prior art keywords
- time
- sequence
- value
- timestamp
- resetting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Fuzzy Systems (AREA)
- Computer And Data Communications (AREA)
Abstract
本说明书实施例公开了一种分布式系统中生成序列的方法、装置及系统。所述方法包括接收获取序列的请求;获取第一时间与第二时间,判断第一时间与第二时间是否在预设时间段内;确定第一时间与第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,判断所述第二序列值是否达到预设值;确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置第二序列值,获取重置后第二序列值以及与重置后第二序列值对应的时间;根据与重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳;根据时间戳、机器标识、重置后第二序列值,为目标服务器生成序列。利用本说明书实施例可以适应不同的业务场景,有效地减少序列浪费。
Description
技术领域
本说明书实施例方案属于分布式系统技术领域,尤其涉及一种分布式系统中生成序列的方法、装置及系统。
背景技术
随着互联网的飞速发展,大规模、分布式应用系统逐渐成为软件系统的标配。在分布式系统中会存在许多台服务器对外提供服务,许多场景下都需要为服务器分配在系统内的唯一序列,用来区分同一个服务请求具体是由哪台服务器来提供的服务。现有技术中,广泛应用于分布式系统的全局唯一序列的典型生成方式是雪花算法(snowflake),雪花算法是为了满足以下需求而产生的:每秒上万条消息请求、每条消息都必须分配一条唯一的ID,而且这些ID还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的ID必须不同。
雪花算法生成的ID是由1bit符号位、41bit时间戳、10bit机器标识、12bit序列号组成的64bit(二进制)大小的整数,所以雪花算法生成的ID是用Long(长整型)类型来存储的。然而,现有雪花算法基于64bit长度进行规划,只能规划时间戳后面的22个bit位,时间戳本身不能变化、总bit位数也不能变化,所以生成的序列仍旧是Long型长度,其转换成字符为19位长度的字符串,可支持使用69年,如果实际需求场景要求生成必须小于19位的序列,并且只需要满足指定期限不重复即可,例如某商城生成的订单号,因为订单只支持1年内可退款,所以只要支持1年内订单号不重复即可,超过1年的数据会清理到历史库中备查,这样直接使用雪花算法不仅不能满足实际需求,而且也会造成序列浪费;此外,由于雪花算法生成ID使用的时间戳以毫秒为单位,在毫秒的基础上进行4096(212)个序列的自增长,就会使得1台服务器每秒即可生成4096000个可用序列,然而目前单个服务器处理性能远远达不到该阀值,所以会造成大量的序列浪费。
因此,业内亟需一种可以减少序列浪费、适应不同场景的生成分布式序列的解决方案。
发明内容
本说明书实施例目的在于提供一种分布式系统中生成序列的方法、装置及系统,可以适应不同的业务需求场景,有效地减少序列浪费。
一方面本申请提供了一种分布式系统中生成序列的方法,包括:
接收目标服务器获取序列的请求;
获取第一时间与第二时间,判断所述第一时间与第二时间是否在预设时间段内,所述第一时间是所述系统本次接收获取序列请求所对应的时间,所述第二时间是所述系统上一次生成序列时所对应的时间,所述预设时间段以秒为单位;
确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,判断所述第二序列值是否达到预设值,所述第一序列值是所述系统上一次生成序列所对应的序列号,所述预设值是所述预设时间段内序列号的最大值;
确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间;
根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列。
本说明书提供的所述方法的另一个实施例中,还包括:
确定所述第一时间与所述第二时间不在同一时间段内时,则重置所述第一序列值,获取重置后第一序列值以及与所述重置后第一序列值对应的时间;
相应的,根据所述与所述重置后第一序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
根据所述时间戳、机器标识、所述重置后第一序列值,为所述目标服务器生成序列。
本说明书提供的所述方法的另一个实施例中,还包括:
确定所述第二序列值没有达到预设值时,则获取与所述第二序列值对应的时间;
相应的,根据所述与所述第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
根据所述时间戳、机器标识、所述第二序列值,为所述目标服务器生成序列。
本说明书提供的所述方法的另一个实施例中,在所述接收目标服务器获取序列的请求前,所述方法还包括:
根据单台服务器性能容量、整体系统性能容量、序列时限,确定序列号占位数、机器标识占位数、时间戳占位数以及序列的总占位数,所述时间戳以秒为单位。
本说明书提供的所述方法的另一个实施例中,所述根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,包括:
利用与所述重置后第二序列值对应的时间与所述初始时间相减,获得第一差值;其中,所述与所述重置后第二序列值对应的时间是指重置第二序列值时系统对应的时间,所述初始时间是预先设置的参数,所述序列时限是保证序列唯一的时间段;
将所述第一差值与所述序列时限进行求余,获得所述时间戳。
本说明书提供的所述方法的另一个实施例中,所述根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列,包括:
将所述时间戳按照预设方向移动时间戳占位数,获得第一移位结果;
将所述机器标识按照预设方向移动机器标识占位数,获得第二移位结果;
将所述第一移位结果、所述第二移位结果、所述重置后第二序列值进行位运算,为所述目标服务器生成序列。
另一方面,本说明书实施例还提供一种分布式系统中生成序列的装置,所述装置包括:
接收模块,用于接收目标服务器获取序列的请求;
第一判断模块,用于获取第一时间与第二时间,判断所述第一时间与第二时间是否在预设时间段内,所述第一时间是所述系统本次接收获取序列请求所对应的时间,所述第二时间是所述系统上一次生成序列时所对应的时间,所述预设时间段以秒为单位;
第二判断模块,用于确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,判断所述第二序列值是否达到预设值,所述第一序列值是所述系统上一次生成序列所对应的序列号,所述预设值是所述预设时间段内序列号的最大值;
第一获取模块,用于确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间;
时间戳第一获得模块,用于根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
第一序列生成模块,用于根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列。
本说明书提供的所述装置的另一个实施例中,所述装置还包括:
第二获取模块,用于确定所述第一时间与所述第二时间不在同一时间段内时,则重置所述第一序列值,获取重置后第一序列值以及与所述重置后第一序列值对应的时间;
时间戳第二获得模块,用于根据所述与所述重置后第一序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
第二序列生成模块,用于根据所述时间戳、机器标识、所述重置后第一序列值,为所述目标服务器生成序列。
本说明书提供的所述装置的另一个实施例中,所述装置还包括:
第三获取模块,用于确定所述第二序列值没有达到预设值时,则获取与所述第二序列值对应的时间;
时间戳第三获得模块,用于根据所述与所述第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
第三序列生成模块,用于根据所述时间戳、机器标识、所述第二序列值,为所述目标服务器生成序列。
本说明书提供的所述装置的另一个实施例中,在所述接收目标服务器获取序列的请求前,所述装置还包括:
占位数确定模块,用于根据单台服务器性能容量、整体系统性能容量、序列时限,确定序列号占位数、机器标识占位数、时间戳占位数以及序列的总占位数,所述时间戳以秒为单位。
本说明书提供的所述装置的另一个实施例中,所述时间戳第一获得模块,包括:
第一差值获得单元,用于利用与所述重置后第二序列值对应的时间与所述初始时间相减,获得第一差值;其中,所述与所述重置后第二序列值对应的时间是指重置第二序列值时系统对应的时间,所述初始时间是预先设置的参数,所述序列时限是保证序列唯一的时间段;
时间戳获得单元,用于将所述第一差值与所述序列时限进行求余,获得所述时间戳。
本说明书提供的所述装置的另一个实施例中,所述第一序列生成模块,包括:
第一移位结果获得单元,用于将所述时间戳按照预设方向移动时间戳占位数,获得第一移位结果;
第二移位结果获得单元,用于将所述机器标识按照预设方向移动机器标识占位数,获得第二移位结果;
序列生成单元,用于将所述第一移位结果、所述第二移位结果、所述重置后第二序列值进行位运算,为所述目标服务器生成序列。
另一方面,本说明书实施例提供一种分布式系统中生成序列的设备,包括处理器及用于存储处理器可执行指令的存储器,所述指令被所述处理器执行时实现包括以下步骤:
接收目标服务器获取序列的请求;
获取第一时间与第二时间,判断所述第一时间与第二时间是否在预设时间段内,所述第一时间是所述系统本次接收获取序列请求所对应的时间,所述第二时间是所述系统上一次生成序列时所对应的时间,所述预设时间段以秒为单位;
确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,判断所述第二序列值是否达到预设值,所述第一序列值是所述系统上一次生成序列所对应的序列号,所述预设值是所述预设时间段内序列号的最大值;
确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间;
根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列。
另一方面,本说明书实施例提供一种分布式系统中生成序列的系统,包括至少一个处理器以及存储计算机可执行指令的存储器,所述处理器执行所述指令时实现上述任意一个实施例所述方法的步骤。
本说明书实施例提供的一种分布式系统中生成序列的方法、装置及系统,一方面,可以通过评估系统容量,重新规划序列占位结构,来减少序列使用的空间,从而达到减少最终生成序列的长度。另一方面,通过优化雪花算法使用的时间戳,使其由毫米级调整为秒级来生成时间戳,从而减少生成序列的长度。再一方面,通过设置序列时限,在超过时限时重新计算时间差,达到序列循环使用的效果,可以在很大程序上控制生成序列的长度。因此,利用本说明书各个实施例,可以适应不同的业务需求场景,有效缩短生成序列的长度,减少序列浪费。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本说明书提供的现有雪花算法的结构图;
图2是本说明书提供的现有雪花算法的一个具体实施例的流程示意图;
图3是本说明书提供的一种分布式系统中生成序列方法的一个实施例的流程示意图;
图4是本说明书提供的一种分布式系统中生成序列方法的一个具体实施例的流程示意图;
图5是本说明书提供的一种分布式系统中生成序列装置的一个实施例的模块结构示意图;
图6是本说明书提供的一种分布式系统中生成序列系统的一个实施例的模块结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书中的一部分实施例,而不是全部的实施例。基于本说明书中的一个或多个实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书实施例保护的范围。
本说明书提供的一种实施方案可以应用到分布式系统中为服务器分配在系统内唯一ID的场景中,所述分布式系统可以包括多个服务器。
由于本说明书提供的一种实施方案是对雪花算法进行的优化,所以首先要介绍下雪花算法的结构及原理。
雪花算法生成序列的结果是一个64bit(二进制)大小的整数,如图1所示,图1是本说明书提供的现有雪花算法的结构图。Snowflake-64bit从左到右结构说明如下:
①1bit:第一位为符号位,只能为0,这样可以保证生成数值为正数,不会有负数。
②41bit:为毫秒级别的时间戳,二进制的41位可用来存储241-1个大于0的数值,转换成单位年为(241-1)/(1000×60×60×24×365)≈69年,也就是说使用雪花算法来生成的序列可以保证在69年内不重复。
③10bit:工作机器ID,也就是机器ID。分布式系统下是许多台服务器来提供服务,不同的机器需要分配不同的工作机器ID,来保证不同服务器之间生成的序列不重复。预留的10位机器ID可供210=1024台服务器来使用。
④12bit:序列号,也就是同步自增长序列,可生成212=4096个序列,即1毫秒内可生成4096个可用序列。基于此结构进行位数分配,1台服务器每秒即可生成4096000个可用序列。
如图2所示,图2是本说明书提供的现有雪花算法的一个具体实施例的流程示意图。其中,现有雪花算法内部实现方法采用同步处理,时间单位为毫秒,序列组成结构中时间戳、机器标识、序列号分别需要41bit、10bit、12bit占位数,序列的总占位数为41+10+12=63。同步处理是指同一个服务器上生成序列方法同步,例如,两个线程同时请求同一个服务器获取序列,同步处理就是要求同一个时刻只有一个线程执行序列生成,另一个线程处于等待,等正在使用的线程结束方法调用后,第二个线程才执行线程生成任务。现有雪花算法实现步骤如下:
(1)目标服务器请求获取唯一序列。
(2)获取当前时间与上一次获取序列的时间,并判断当前时间与上一次获取序列的时间是否在预设时间段内,若当前时间与上一次获取序列的时间不在预设时间段内,则执行步骤(3);若当前时间与上一次获取序列的时间在预设时间段内,则执行步骤(4)。
其中,当前时间是指执行到该步骤时系统对应的时间。预设时间段是以毫秒为单位。
(3)将当前使用序列重置为0,并执行步骤(6)-步骤(8)。
其中,当前使用序列与最终生成的序列不是一个概念,这里说的当前使用序列是指序列bit结构中的最后一组数值,也就是生成序列中的序列号,当前使用序列是指执行到当前步骤时对应的序列号,序列号是在1毫秒内实现累加,超过1毫秒则重新计数。此处就是通过先判断两个时间是否在1毫秒内,如果超过了1毫秒,则计数重新开始,即将当前使用序列重置为0。
(4)在当前使用序列的基础上加1,获得加1后的序列号,并将加1后的序列号更新为当前使用序列,判断加1后的序列号是否达到自增序列的最大值,若加1后的序列号达到自增序列的最大值,则执行步骤(5);若加1后的序列号没有达到自增序列的最大值,则执行步骤(6)。
此处,通过判断当前时间与上一次获取序列的时间,在当前时间没有超过上一次获取序列对应时间的1毫秒时,则在当前使用序列的基础上累加1,获得加1后的序列号,并将加1后的序列号更新为当前使用序列。但是由于序列最后一组数值是有最大值限制的,所以需要判断加1后的序列号是否超过最大值。
(5)等待下一个毫秒时间,并将当前使用序列置为0,并执行步骤(6)-步骤(8)。
在加1后的序列号超过最大值时,则需要等待1毫秒,然后将当前使用序列重置为0,因为等待了1毫秒,所以时间戳(秒级)是变化的,所以生成的序列就可以保证唯一了。
(6)将最后一次序列获取时间更新为当前时间。
其中,最后一次序列也是指序列bit结构中的最后一组数值,也就是生成序列中的序列号。
在加1后的序列号没有超过最大值时,则将加1后的序列号作为最后一次序列,并将其对应的获取时间更新为当前时间;在加1后的序列号超过最大值时,由于将当前使用序列重置为0,所以将重置为0的当前使用序列作为最后一次序列,并将其对应的获取时间更新为当前时间。
(7)将当前时间减去初始时间得到的时间左移22位,假定左移后得到的结果为a;将机器ID左移12位,假定得到的结果为b;将最后一次序列对应结果假定为c。
(8)将a、b、c进行或运算,为目标服务器生成序列。
可见,现有雪花算法首先可以完全基本本地服务生成序列,处理性能高效;其次不仅可以保证生成的序列按照时间趋势递增,有利于一些排序查询需求,而且也可以保证分布式系统产生不同的唯一序列。然而,现有雪花算法基于64位的bit长度进行规划,只能规划时间戳后面的22个bit位,时间戳本身不能变化、总bit位数不能变化,所以生成的序列仍旧是Long型长度,即最大19位长度的字符数值,可支持使用69年,如果实际需求场景要求生成必须小于19位的序列,并且只需要满足指定期限不重复即可,这样直接使用雪花算法不仅不能满足实际需求,造成一定的局限性,而且也会造成序列浪费;此外,由于雪花算法生成序列使用的时间戳以毫秒为单位,在毫秒的基础上进行4096(212)个序列的自增长,就会使得1台服务器每秒即可生成4096000个可用序列,而目前单个服务器处理性能远远达不到该阀值,所以会造成大量的序列浪费。
相应的,本说明书实施例提供了一种分布式系统中生成序列的方法,首先,通过优化雪花算法使用的时间戳,使其由毫米级调整为秒级来生成时间戳,从而减少生成序列的长度;其次,基于秒级单位的时间戳重新规划雪花算法占位结构,来减少序列使用的空间,从而达到减少最终生成序列的长度;然后,通过设置序列时限,在超过时限时重新计算时间差,达到序列循环使用的效果,可以在很大程序上控制生成序列的长度,减少序列浪费。
下面以一个具体的应用场景为例对本说明书实施方案进行说明。具体的,图3是本说明书提供的一种分布式系统中生成序列方法的一个实施例的流程示意图。虽然本说明书提供了如下述实施例或附图所示的方法操作步骤或装置结构,但基于常规或者无需创造性的劳动在所述方法或装置中可以包括更多或者部分合并后更少的操作步骤或模块单元。在逻辑性上不存在必要因果关系的步骤或结构中,这些步骤的执行顺序或装置的模块结构不限于本说明书实施例或附图所示的执行顺序或模块结构。所述的方法或模块结构的在实际中的装置、服务器或终端产品应用时,可以按照实施例或者附图所示的方法或模块结构进行顺序执行或者并行执行(例如并行处理器或者多线程处理的环境、甚至包括分布式处理、服务器集群的实施环境)。
当然,下述实施例的描述并不对基于本说明书的其他可扩展到的技术方案构成限制。
具体的一种实施例如图3所示,本说明书提供的一种分布式系统中生成序列的方法的一种实施例中,所述方法可以包括:
S1:接收目标服务器获取序列的请求。
本说明书一个实施例中,目标服务器在需要获取唯一序列时,会向分布式系统发送获取序列的请求。
其中,序列,也就是序列ID,是由时间戳、机器标识、序列号拼接组成,序列的总占位数是时间戳的bit占位数、机器标识的bit占位数、序列号的bit占位数的bit占位数总和,序列所需的最短长度是根据序列的总占位数转化为字符串的长度。时间戳是一个能表示一份数据在某个特定时间之前已经存在的、完整的、可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间,本说明书实施例中时间戳以秒为单位。机器标识即工作机器ID,也叫机器ID,是指机器的唯一标识,可以使用环境变量、数据库存储等多种方式设置,由于该标识是用来进行位运算的,所以其必须使用数字来标识,例如:根据实际场景,可以使用1-128对应的二进制(7位)来表示1-128台服务器的机器ID,也可以使用其它数字来标识。此外,机器ID是在服务器启动时就已经初始化好,也就是说,生成序列时已经确定了是哪台服务器。例如,两台服务器,分别编号为1和2,那么在服务器1启动时,就需要加载机器ID。序列号即一系列的自增序列,分布式系统可以支持同一节点同一秒生成多个序列号,如序列号为10位的二进制,则可以支持每个节点每秒产生1024个序列号。
从开发角度而言,一些实施例中,需要首先评估系统性能容量和实际业务场景对序列唯一性的时限要求,来确定生成序列所需的最短长度,如果满足实际业务场景要求,则可以考虑使用本申请方案实现序列生成。其中,性能容量也就是峰值性能,是指一定时间内运算处理序列进程过程量最高的点;时限要求也就是序列时限,是按照实际业务需求场景要求,只需要保证序列ID在指定的时间段内唯一即可,该时间段即为序列时限,所述序列时限是保证序列唯一的时间段。例如,需求场景只保留2年的数据,则序列ID只需要满足2年不重复即可,则2年即为序列时限。
本说明书一个实施例中,在所述接收目标服务器获取序列的请求前,首先需要评估系统性能容量和实际业务场景对序列唯一性的时限要求,即评估生成序列结构,来确定生成序列所需的最短长度。具体地,在所述接收目标服务器获取序列的请求前,可以根据单台服务器性能容量、整体系统性能容量、序列时限,确定序列号占位数、机器标识占位数、时间戳占位数以及序列的总占位数以实现对生成序列结构的评估,然后根据序列的总占位数转化为字符串的长度来确定生成序列所需的最短长度,所述时间戳以秒为单位。也就是说,评估生成序列结构主要是基于以秒为单位的时间戳,对所需的时间戳、工作机器的机器标识、序列号分别需要的bit占位进行估计,其中,所需的时间戳、工作机器的机器标识、序列号分别需要的bit占位可以根据具体评估方法进行限制。
例如,根据单台服务器性能容量、整体系统性能容量、序列时限,评估出序列的总占位数后,将序列的总占位数转化为字符串是13位长度,而实际场景需要序列大于等于13位长度,则可以选择本申请提供的方案。当然,一些实施例中,将序列的总占位数转化为字符串的长度也可以是其它位数的,本说明书只是示例性说明,对此不作限制。此外,如果实际业务场景要求序列大于等于19位长度,由于现有雪花算法可以采用补位拼接方式对生成序列进行处理,所以也可以直接选择现有雪花算法生成序列。例如,实际场景要求生成20位长度的序列,则可以第一位使用1(或1-9任何数值),然后使用左补零的方式与雪花算法生成的结果进行拼接获得最终序列,如:要生成20位长度的序列,雪花结果为123456789,则20位长度的序列可以为10000000000123456789。
需要说明的是,上述评估生成序列结构的结果可以作为本说明书提供实施例的输入,主要是本说明书提供实施例所需要的参数,来生成序列时限内的唯一序列ID。
进一步地,本说明书一个实施例中,评估生成序列结构的一个具体实现步骤如下:
(1)确认设计系统性能容量。现有雪花算法的时间戳以毫米为单位,本说明书实施例中提供的方案都是以秒为单位,所以性能容量使用TPS(1秒可处理的交易请求)作为计量标准。假设设计系统的整体性能容量为:100000TPS(十万)。
(2)评估单服务器性能容量。假设单台服务器设计的性能容量为1000TPS。因为本说明书实施例中提供的方案都是以秒为单位计算时间戳,所以对于序列结构最后一部分序列号的位结构(bit占位数),可以设计为10位即可,因为210=1024>1000,可以满足每秒生成1000个序列的要求(现有雪花算法是12位,可支持4096个序列生成)。此外,因为假设设计的系统整体性能容量是100000TPS,所以需要100台服务器就可以满足整体系统性能容量(100×1000=100000),而且,由于27=128>100,所以机器标识的位结构(bit占位数)设计为7位即可满足要求。
(3)确认序列时限。例如序列时限为1年,则1年含有365×24×3600=31622400秒,因为225=33554432>31622400,所以时间戳的位结构(bit占位数)需要25位;如果序列时限为2年,因为226=67108864>31622400×2,则时间戳的位结构(bit占位数)需要26位。假定数据最多保留2年,则按照序列时限2年计算,时间戳的位结构(bit占位数)需要设计为26位。
(4)计算序列长度。按照上述示例,可得序列的总占位数为26+7+10=43(现有雪花算法序列的总占位数为41+10+12=63),转化为字符串为243-1=8796093022207,共13位长度。也就是说大于等于13位长度的业务场景需求都可以使用该方法生成序列。
本说明书实施例中基于秒级时间戳来评估生成序列结构,重新规划序列占位结构,可以适应不同的业务需求场景,有效缩短生成序列的长度,减少序列浪费。
S2:获取第一时间与第二时间,判断所述第一时间与第二时间是否在预设时间段内,所述第一时间是所述系统本次接收获取序列请求所对应的时间,所述第二时间是所述系统上一次生成序列时所对应的时间,所述预设时间段以秒为单位。
所述第二时间是指上一次生成序列时所对应的时间,因为生成序列算法完全基于内存操作,速度很快(1-2毫秒),不用考虑耗时跨秒情况,所以其取值可以看作上一次接收获取序列请求所对应的时间,即指上一次生成序列时所对应的时间相当于上一次接收获取序列请求所对应的时间。
本说明书一个实施例中,在完成生成序列结构的评估后,目标服务器在需要获取唯一序列时,会向分布式系统发送获取序列的请求,分布式系统接收到获取序列的请求时会相应的获取本次接收获取序列请求所对应的时间和上一次接收获取序列请求所对应的时间,即第一时间与第二时间,并对第一时间与第二时间分别所处的时间段进行判断,其中,第一时间大于第二时间,时间段是以秒为单位的。
预设时间段是指预先设置好的一个时间段,由于预设时间段以秒为单位,所以判断所述第一时间与第二时间是否在预设时间段内,也就是判断所述第一时间与第二时间是否在同一秒内。
S3:确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,判断所述第二序列值是否达到预设值,所述第一序列值是所述系统上一次生成序列所对应的序列号,所述预设值是所述预设时间段内序列号的最大值。
本说明书一个实施例中,获取的第一时间与第二时间可以在预设时间段内,也可以不在预设时间段内,且第一时间大于第二时间。具体地,例如:分布式系统本次接收获取序列请求所对应的时间是“2018-01-01 00:00:00.001”,即第一时间,分布式系统上一次接收获取序列请求所对应的时间是“2018-01-01 00:00:00.000”,即第二时间,则第一时间与第二时间在同一秒内,也就是在预设时间段内。再如:第一时间是“2018-01-01 00:00:01.000”,第二时间是“2018-01-01 00:00:00.000”,则第一时间与第二时间不在同一秒内,也就是不在预设时间段内。
预设时间段是指预先设置好的一个时间段,以秒为单位。序列值是指序列结构中的序列号,第一序列值是系统上一次生成序列所对应的序列号。所述第二序列值是否达到预设值是指第二序列值是否超过预设值,也就是二序列值是否大于等于预设值。
本说明书一个实施例中,在确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,并判断所述第二序列值是否达到预设值,其中,所述第一序列值是所述系统上一次生成序列所对应的序列号,所述预设值是所述预设时间段内序列号的最大值。例如:在确定第一时间与第二时间在同一秒内时,则在上一次生成序列所对应的序列号的基础上加一,获得本次需要生成序列所对应的序列号。具体地,假设第一时间是“2018-01-01 00:00:00.001”,第二时间是“2018-01-01 00:00:00.000”,则可以确定第一时间与第二时间在同一秒内,假设上一次生成序列所对应的序列号为100,则在100的基础上加1,得到101,即第二序列值为101,然后通过第二序列值与每秒内生成序列号的最大值的关系确定第二序列值是否达到预设值。
本说明书另一个实施例中,在确定所述第一时间与所述第二时间不在同一时间段内时,则重置所述第一序列值。例如:假设第一时间是“2018-01-01 00:00:01.000”,第二时间是“2018-01-01 00:00:00.000”,则可以确定第一时间与第二时间不在同一秒内,则本次生成序列所对应的序列号重置为0,即重置后第一序列值为0。
本说明书另一个实施例中,在确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,并判断所述第二序列值是否达到预设值,其中,所述第一序列值是所述系统上一次生成序列所对应的序列号,所述预设值是所述预设时间段内序列号的最大值;在确定所述第一时间与所述第二时间不在同一时间段内时,则重置所述第一序列值。
进一步地,在确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,然后判断所述第二序列值是否达到预设值。
S4:确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间。
本说明书一个实施例中,在确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,然后判断所述第二序列值是否达到预设值。其中,所述第二序列值可能达到预设值,也可能没有达到预设值。
预设值是预设时间段内序列号的最大值。预设时间段是指预先设置好的一个时间段,以秒为单位,下一个预设时间段也就是指下一秒。序列值是指序列结构中的序列号。一些实施例中,重置后序列值为0。另一些实施例中,重置后的序列值为1,具体可以根据实际情况确定,本说明书对此不作限定。需要说明的是,本说明书实施例中重置后的序列号为0。
本说明书一个实施例中,在确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间。例如:第一时间是“2018-01-01 00:00:00.001”,第二时间是“2018-01-01 00:00:00.000”,则可以确定第一时间与第二时间在同一秒内,假设上一次生成序列所对应的序列号为1000,而且每秒内序列号的最大值是1000,则在1000的基础上加1,得到1001,即第二序列值,由于1001≥1000,则需要等待到下一秒“2018-01-01 00:00:01.000”,将第二序列值重置为0开始,然后获取重置后第二序列值0以及与所述重置后第二序列值对应的时间。
本说明书另一个实施例中,在确定所述第二序列值没有达到预设值时,则获取与所述第二序列值对应的时间。例如:第一时间是“2018-01-01 00:00:00.001”,第二时间是“2018-01-0100:00:00.000”,则可以确定第一时间与第二时间在同一秒内,假设上一次生成序列所对应的序列号为100,而且每秒内序列号的最大值是1000,则在100的基础上加1,得到101,即第二序列值为101,由于101<1000,即第二序列值没有达到预设值,则获取第二序列值101以及与所述第二序列值对应的时间。
S5:根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位。
本说明书一个实施例中,在确定所述第一时间与所述第二时间在预设时间段内,且在确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间,然后根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳。
初始时间是设置的一个参数,一般为系统第一次投产时的时间,也可以比投产时间小,在后续系统升级等情况,该初始时间都不变。时限要求也就是序列时限,是按照实际业务需求场景要求,只需要保证序列ID在指定的时间段内唯一即可,该时间段即为序列时限,所述序列时限是保证序列唯一的时间段。
本说明书一个实施例中,所述根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,包括:利用与所述重置后第二序列值对应的时间与所述初始时间相减,获得第一差值;其中,所述与所述重置后第二序列值对应的时间是指重置第二序列值时系统对应的时间,所述初始时间是预先设置的参数,所述序列时限是保证序列唯一的时间段;将所述第一差值与所述序列时限进行求余,获得所述时间戳。
具体地,例如:以使用毫秒为例,假设初始时间是“2018-01-01 00:00:00.000”,转换为Long型时间(以从历元至现在所经过的UTC毫秒数形式)为1514736000000,序列时限为1年,则1年表示的序列时限转换为毫秒为365×24×60×60×1000=31536000000,则在2018年1月1日-2019年1月1日之间获得的时间戳可以利用当前获取序列所对应的时间减去初始时间后,与序列时限进行求余计算,将获得的余数作为时间戳。如:当前获取序列所对应的时间为“2018-01-02 00:00:00.000”(转换为Long型时间为1514822400000),则相应获得的时间戳为:(1514822400000-1514736000000)%31536000000=86400000。这样,因为时间戳在序列结构中位于高位,所以只要时间戳不重复,就可以保证序列不重复,所以在序列时限内随着时间的增长,产生的序列是递增唯一的。
进一步地,由于使用了序列时限,可以使得生成序列在一定周期时限内保证序列唯一,在一定周期时限外循环使用。例如:序列保留2年数据,则生成的序列在2年内都是唯一的,超过两年后可以循环到最小值继续累积生成序列。具体地,同样以使用毫秒为例,假设初始时间是“2018-01-01 00:00:00.000”,转换为Long型时间为1514736000000,序列时限为1年,而“2019-01-02 00:00:00.000”是超过序列时限的日期,其转换为Long型时间为1546358400000,则其获得的时间戳为:(1546358400000-1514736000000)%31536000000=86400000,与“2018-01-02 00:00:00.000”获得的时间戳是一样的,这样就可以在保证最终生成的序列在时限内唯一的同时,在时限外循环使用,减少序列浪费。
需要说明的是,上述示例是以毫秒为例,以秒的方式与毫秒一致,只是舍弃末位3位精度,对此不在赘述。
S6:根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列。
本说明书一个实施例中,在确定所述第一时间与所述第二时间在预设时间段内,且在确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间后,根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,在获得时间戳后,根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列。
本说明书实施例中重置后的序列号为0,所以重置后第二序列值为0。
本说明书一个实施例中,所述根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列,包括:将所述时间戳按照预设方向移动时间戳占位数,获得第一移位结果;将所述机器标识按照预设方向移动机器标识占位数,获得第二移位结果;将所述第一移位结果、所述第二移位结果、所述重置后第二序列值进行位运算,为所述目标服务器生成序列。具体地,通过对生成序列结构的评估,可以获得序列组成结构中时间戳、机器标识、序列号分别需要的bit占位数,然后按照时间戳的bit占位数+机器标识的bit占位数+序列号的bit占位数拼接组成最终序列的bit占位数,将时间戳按照预设方向移动时间戳的bit占位数,获得第一移位结果,将机器标识按照预设方向移动机器标识的bit占位数,获得第二移位结果,最后将第一移位结果、第二移位结果以及序列号(即重置后第二序列值)进行位运算,为所述目标服务器生成序列。例如,通过对生成序列结构的评估,获得序列组成结构中时间戳、机器标识、序列号分别需要26bit、7bit、10bit占位数,将时间戳向左移动26位,获得的结果记为d,将机器标识向左移动7位,获得的结果记为b,将序列号记为c,则将d、b、c进行或运算获得的结果即为生成序列。
其中,由于程序中的所有数在计算机内存中都是以二进制的形式储存的,位运算就是直接对整数在内存中的二进制位进行操作。现有雪花算法用到的位运算主要是左移“<<”运算和或“|”运算。例如:十进制2的二进制是010,左移1位就是100,表示为十进制后就是4,即2<<1=4;十进制4和十进制1的二进制分别是100和001,二者进行或运算是101,表示为十进制就是5,即4|1=5。
需要说明的是,将所述时间戳按照预设方向移动时间戳占位数中的预设方向与将所述机器标识按照预设方向移动机器标识占位数中的预设方向是一致的,即时间戳与机器标识的移动方向是一致的。
本说明书另一个实施例中,在确定所述第一时间与所述第二时间不在同一时间段内时,则重置所述第一序列值,获取重置后第一序列值以及与所述重置后第一序列值对应的时间,相应的,然后根据所述与所述重置后第一序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位,最后根据所述时间戳、机器标识、所述重置后第一序列值,为所述目标服务器生成序列。
本说明书另一个实施例中,在确定所述第一时间与所述第二时间在同一时间段内,且确定所述第二序列值没有达到预设值时,则获取与所述第二序列值对应的时间,相应的,然后根据所述与所述第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位,最后根据所述时间戳、机器标识、所述第二序列值,为所述目标服务器生成序列。
需要说明的是,上述实施例中根据所述时间戳、机器标识、所述重置后第一序列值为所述目标服务器生成序列,根据所述时间戳、机器标识、所述第二序列值,为所述目标服务器生成序列的方式与根据所述时间戳、机器标识、所述重置后第二序列值为所述目标服务器生成序列的方式类似,对此不作赘述。
本说明书实施例提供的一种分布式系统中生成序列的方法,一方面,通过评估系统容量,重新规划序列占位结构,来减少序列使用的空间,从而达到减少最终生成序列的长度的同时,可以适应不同的业务需求场景。另一方面,基于本地生成序列,通过优化雪花算法使用的时间戳,使其由毫米级调整为秒级来生成时间戳,可以有效缩短生成序列的长度,减少序列浪费,提高性能。再一方面,通过设置序列时限,在超过时限时重新计算时间差,达到序列循环使用的效果,可以在很大程序上控制生成序列的长度,减少序列浪费。
为了进一步来验证本方法的实用性和可行性,本说明书还提供了应用上述方案的一个具体实例,如图4所示,图4是本说明书提供的一种分布式系统中生成序列方法的一个具体实施例的流程示意图,其中,所有关于时间的计算,单位都采用的秒为最小单位,通过对生成序列结构的评估,获得序列组成结构中时间戳、机器标识、序列号分别需要26bit、7bit、10bit占位数,序列的总占位数为26+7+10=43,执行主体是分布式系统,具体过程和步骤如下:
(1)目标服务器请求获取唯一序列。
(2)获取当前时间与上一次获取序列的时间,并判断当前时间与上一次获取序列的时间是否在预设时间段内,若当前时间与上一次获取序列的时间不在预设时间段内,则执行步骤(3);若当前时间与上一次获取序列的时间在预设时间段内,则执行步骤(4)。
其中,当前时间是指执行到该步骤时系统对应的时间。预设时间段是以秒为单位。
(3)将当前使用序列重置为0,并执行步骤(6)-步骤(10)。
其中,当前使用序列与最终生成的序列不是一个概念,这里说的当前使用序列是指序列bit结构中的最后一组数值,也就是生成序列中的序列号,当前使用序列是指执行到当前步骤时对应的序列号,序列号是在1秒内实现累加,超过1秒则重新计数。此处就是通过先判断两个时间是否在1秒内,如果超过了1秒,则计数重新开始,即将当前使用序列重置为0。
(4)在当前使用序列的基础上加1,获得加1后的序列号,并将加1后的序列号更新为当前使用序列,判断加1后的序列号是否达到自增序列的最大值,若加1后的序列号达到自增序列的最大值,则执行步骤(5);若加1后的序列号没有达到自增序列的最大值,则执行步骤(6)。
此处,通过判断当前时间与上一次获取序列的时间,在当前时间没有超过上一次获取序列对应时间的1秒时,则在当前使用序列的基础上累加1,获得加1后的序列号,并将加1后的序列号更新为当前使用序列。但是由于序列最后一组数值是有最大值限制的,所以需要判断加1后的序列号是否超过最大值。
(5)等待下一个秒时间,并将当前使用序列置为0,并执行步骤(6)-步骤(10)。
在加1后的序列号超过最大值时,则需要等待1秒,然后将当前使用序列重置为0,因为等待了1秒,所以时间戳(秒级)是变化的,所以生成的序列就可以保证唯一了。
(6)将最后一次序列获取时间更新为当前时间。
其中,最后一次序列也是指序列bit结构中的最后一组数值,也就是生成序列中的序列号。
在加1后的序列号没有超过最大值时,则将加1后的序列号作为最后一次序列,并将其对应的获取时间更新为当前时间;在加1后的序列号超过最大值时,由于将当前使用序列重置为0,所以将重置为0的当前使用序列作为最后一次序列,并将其对应的获取时间更新为当前时间。
(7)利用当前时间减去初始时间得到的时间差a与设定的序列时限m进行求余计算,得到结果左移26位,假定左移后得到的结果为d。
(8)将机器ID左移7位,假定得到的结果为b。
(9)将当前计算的序列对应结果假定为c。
当前计算的序列是指执行到当前步骤时对应的序列号。由于执行到步骤(6)以后,当前使用序列没有变化,所以当前计算的序列也就是步骤(6)中最后一次序列。
(10)将d、b、c进行或运算,为目标服务器生成序列。
基于上述所述的一种分布式系统中生成序列的方法,本说明书一个或多个实施例还提供一种分布式系统中生成序列的装置。所述的装置可以包括使用了本说明书实施例所述方法的系统(包括分布式系统)、软件(应用)、模块、组件、服务器、客户端等并结合必要的实施硬件的装置。基于同一创新构思,本说明书实施例提供的一个或多个实施例中的装置如下面的实施例所述。由于装置解决问题的实现方案与方法相似,因此本说明书实施例具体的装置的实施可以参见前述方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
具体地,图5是本说明书提供的一种分布式系统中生成序列装置的一个实施例的模块结构示意图,如图5所示,本说明书提供的一种分布式系统中生成序列的装置包括:接收模块121,第一判断模块122,第二判断模块123,第一获取模块124,时间戳第一获得模块125,第一序列生成模126。
接收模块121,可以用于接收目标服务器获取序列的请求;
第一判断模块122,可以用于获取第一时间与第二时间,判断所述第一时间与第二时间是否在预设时间段内,所述第一时间是所述系统本次接收获取序列请求所对应的时间,所述第二时间是所述系统上一次生成序列时所对应的时间,所述预设时间段以秒为单位;
第二判断模块123,可以用于确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,判断所述第二序列值是否达到预设值,所述第一序列值是所述系统上一次生成序列所对应的序列号,所述预设值是所述预设时间段内序列号的最大值;
第一获取模块124,可以用于确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间;
时间戳第一获得模块125,可以用于根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
第一序列生成模块126,可以用于根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列。
所述装置的另一个实施例中,还可以包括:
第二获取模块,可以用于确定所述第一时间与所述第二时间不在同一时间段内时,则重置所述第一序列值,获取重置后第一序列值以及与所述重置后第一序列值对应的时间;
时间戳第二获得模块,可以用于根据所述与所述重置后第一序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
第二序列生成模块,可以用于根据所述时间戳、机器标识、所述重置后第一序列值,为所述目标服务器生成序列。
所述装置的另一个实施例中,还可以包括:
第三获取模块,可以用于确定所述第二序列值没有达到预设值时,则获取与所述第二序列值对应的时间;
时间戳第三获得模块,可以用于根据所述与所述第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
第三序列生成模块,可以用于根据所述时间戳、机器标识、所述第二序列值,为所述目标服务器生成序列。
所述装置的另一个实施例中,在所述接收目标服务器获取序列的请求前,所述装置还可以包括:
占位数确定模块,可以用于根据单台服务器性能容量、整体系统性能容量、序列时限,确定序列号占位数、机器标识占位数、时间戳占位数以及序列的总占位数,所述时间戳以秒为单位。
所述装置的另一个实施例中,所述时间戳第一获得模块125可以包括:
第一差值获得单元1251,可以用于利用与所述重置后第二序列值对应的时间与所述初始时间相减,获得第一差值;其中,所述与所述重置后第二序列值对应的时间是指重置第二序列值时系统对应的时间,所述初始时间是预先设置的参数,所述序列时限是保证序列唯一的时间段;
时间戳获得单元1252,可以用于将所述第一差值与所述序列时限进行求余,获得所述时间戳。
所述装置的另一个实施例中,所述第一序列生成模块126可以包括:
第一移位结果获得单元1261,可以用于将所述时间戳按照预设方向移动时间戳占位数,获得第一移位结果;
第二移位结果获得单元1262,可以用于将所述机器标识按照预设方向移动机器标识占位数,获得第二移位结果;
序列生成单元1263,可以用于将所述第一移位结果、所述第二移位结果、所述重置后第二序列值进行位运算,为所述目标服务器生成序列。
本说明书实施例提供的一种分布式系统中生成序列的装置,通过评估系统容量,重新规划序列占位结构,来减少序列使用的空间,从而达到减少最终生成序列的长度。另一方面,通过优化雪花算法使用的时间戳,使其由毫米级调整为秒级来生成时间戳,从而减少生成序列的长度。再一方面,通过设置序列时限,在超过时限时重新计算时间差,达到序列循环使用的效果,在很大程序上可以控制生成序列的长度。因此,利用本说明书各个实施例,可以适应不同的业务需求场景,有效缩短生成序列的长度,减少序列浪费。
需要说明的,上述所述的装置根据方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本说明书提供的上述实施例所述的方法或装置可以通过计算机程序实现业务逻辑并记录在存储介质上,所述的存储介质可以计算机读取并执行,实现本说明书实施例所描述方案的效果。因此,本说明书还提供一种分布式系统中生成序列的设备,包括处理器及用于存储处理器可执行指令的存储器,所述指令被所述处理器执行时实现包括以下步骤:
接收目标服务器获取序列的请求;
获取第一时间与第二时间,判断所述第一时间与第二时间是否在预设时间段内,所述第一时间是所述系统本次接收获取序列请求所对应的时间,所述第二时间是所述系统上一次生成序列时所对应的时间,所述预设时间段以秒为单位;
确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,判断所述第二序列值是否达到预设值,所述第一序列值是所述系统上一次生成序列所对应的序列号,所述预设值是所述预设时间段内序列号的最大值;
确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间;
根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列。
所述存储介质可以包括用于存储信息的物理装置,通常是将信息数字化后再以利用电、磁或者光学等方式的媒体加以存储。所述存储介质有可以包括:利用电能方式存储信息的装置如,各式存储器,如RAM、ROM等;利用磁能方式存储信息的装置如,硬盘、软盘、磁带、磁芯存储器、磁泡存储器、U盘;利用光学方式存储信息的装置如,CD或DVD。当然,还有其他方式的可读存储介质,例如量子存储器、石墨烯存储器等等。
需要说明的,上述所述的设备根据方法实施例的描述还可以包括其他的实施方式。具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
本说明书实施例提供的上述一种分布式系统中生成序列的方法、装置、设备可以在计算机中由处理器执行相应的程序指令来实现,如使用windows操作系统的c++语言在PC端实现、linux系统实现,或其他例如使用android、iOS系统程序设计语言在智能终端实现,以及基于量子计算机的处理逻辑实现等。本说明书提供的一种分布式系统中生成序列的系统的一个实施例中,图6是本说明书提供的一种分布式系统中生成序列系统的一个实施例的模块结构示意图,如图6所示,本说明书提供的一种分布式系统中生成序列的系统可以包括处理器131以及用于存储处理器可执行指令的存储器132,处理器131和存储器132通过总线133完成相互间的通信;
所述处理器131用于调用所述存储器132中的程序指令,以执行上述分布式系统中生成序列的方法实施例所提供的方法,例如包括:接收目标服务器获取序列的请求;获取第一时间与第二时间,判断所述第一时间与第二时间是否在预设时间段内,所述第一时间是所述系统本次接收获取序列请求所对应的时间,所述第二时间是所述系统上一次生成序列时所对应的时间,所述预设时间段以秒为单位;确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,判断所述第二序列值是否达到预设值,所述第一序列值是所述系统上一次生成序列所对应的序列号,所述预设值是所述预设时间段内序列号的最大值;确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间;根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列。
需要说明的是,说明书上述所述的装置根据相关方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照方法实施例的描述,在此不作一一赘述。本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于硬件+程序类实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书实施例并不局限于必须是符合行业通信标准、标准计算机数据处理和数据存储规则或本说明书一个或多个实施例所描述的情况。某些行业标准或者使用自定义方式或实施例描述的实施基础上略加修改后的实施方案也可以实现上述实施例相同、等同或相近、或变形后可预料的实施效果。应用这些修改或变形后的数据获取、存储、判断、处理方式等获取的实施例,仍然可以属于本说明书实施例的可选实施方案范围之内。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
控制器可以按任何适当的方式实现,例如,控制器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式,控制器的例子包括但不限于以下微控制器:ARC 625D、Atmel AT91SAM、Microchip PIC18F26K20以及Silicone Labs C8051F320,存储器控制器还可以被实现为存储器的控制逻辑的一部分。本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
虽然本说明书一个或多个实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储、石墨烯存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本说明书一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本说明书一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本说明书一个或多个实施例的实施例而已,并不用于限制本本说明书一个或多个实施例。对于本领域技术人员来说,本说明书一个或多个实施例可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。
Claims (14)
1.一种分布式系统中生成序列的方法,其特征在于,包括:
接收目标服务器获取序列的请求;
获取第一时间与第二时间,判断所述第一时间与第二时间是否在预设时间段内,所述第一时间是所述系统本次接收获取序列请求所对应的时间,所述第二时间是所述系统上一次生成序列时所对应的时间,所述预设时间段以秒为单位;
确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,判断所述第二序列值是否达到预设值,所述第一序列值是所述系统上一次生成序列所对应的序列号,所述预设值是所述预设时间段内序列号的最大值;
确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间;
根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列。
2.如权利要求1所述的一种分布式系统中生成序列的方法,其特征在于,所述方法还包括:
确定所述第一时间与所述第二时间不在同一时间段内时,则重置所述第一序列值,获取重置后第一序列值以及与所述重置后第一序列值对应的时间;
相应的,根据所述与所述重置后第一序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
根据所述时间戳、机器标识、所述重置后第一序列值,为所述目标服务器生成序列。
3.如权利要求1所述的一种分布式系统中生成序列的方法,其特征在于,所述方法还包括:
确定所述第二序列值没有达到预设值时,则获取与所述第二序列值对应的时间;
相应的,根据所述与所述第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
根据所述时间戳、机器标识、所述第二序列值,为所述目标服务器生成序列。
4.如权利要求1所述的一种分布式系统中生成序列的方法,其特征在于,在所述接收目标服务器获取序列的请求前,所述方法还包括:
根据单台服务器性能容量、整体系统性能容量、序列时限,确定序列号占位数、机器标识占位数、时间戳占位数以及序列的总占位数,所述时间戳以秒为单位。
5.如权利要求1所述的一种分布式系统中生成序列的方法,其特征在于,所述根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,包括:
利用与所述重置后第二序列值对应的时间与所述初始时间相减,获得第一差值;其中,所述与所述重置后第二序列值对应的时间是指重置第二序列值时系统对应的时间,所述初始时间是预先设置的参数,所述序列时限是保证序列唯一的时间段;
将所述第一差值与所述序列时限进行求余,获得所述时间戳。
6.如权利要求1所述的一种分布式系统中生成序列的方法,其特征在于,所述根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列,包括:
将所述时间戳按照预设方向移动时间戳占位数,获得第一移位结果;
将所述机器标识按照预设方向移动机器标识占位数,获得第二移位结果;
将所述第一移位结果、所述第二移位结果、所述重置后第二序列值进行位运算,为所述目标服务器生成序列。
7.一种分布式系统中生成序列的装置,所述装置包括:
接收模块,用于接收目标服务器获取序列的请求;
第一判断模块,用于获取第一时间与第二时间,判断所述第一时间与第二时间是否在预设时间段内,所述第一时间是所述系统本次接收获取序列请求所对应的时间,所述第二时间是所述系统上一次生成序列时所对应的时间,所述预设时间段以秒为单位;
第二判断模块,用于确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,判断所述第二序列值是否达到预设值,所述第一序列值是所述系统上一次生成序列所对应的序列号,所述预设值是所述预设时间段内序列号的最大值;
第一获取模块,用于确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间;
时间戳第一获得模块,用于根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
第一序列生成模块,用于根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列。
8.如权利要求7所述的一种分布式系统中生成序列的装置,其特征在于,所述装置还包括:
第二获取模块,用于确定所述第一时间与所述第二时间不在同一时间段内时,则重置所述第一序列值,获取重置后第一序列值以及与所述重置后第一序列值对应的时间;
时间戳第二获得模块,用于根据所述与所述重置后第一序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
第二序列生成模块,用于根据所述时间戳、机器标识、所述重置后第一序列值,为所述目标服务器生成序列。
9.如权利要求7所述的一种分布式系统中生成序列的装置,其特征在于,所述装置还包括:
第三获取模块,用于确定所述第二序列值没有达到预设值时,则获取与所述第二序列值对应的时间;
时间戳第三获得模块,用于根据所述与所述第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
第三序列生成模块,用于根据所述时间戳、机器标识、所述第二序列值,为所述目标服务器生成序列。
10.如权利要求7所述的一种分布式系统中生成序列的装置,其特征在于,在所述接收目标服务器获取序列的请求前,所述装置还包括:
占位数确定模块,用于根据单台服务器性能容量、整体系统性能容量、序列时限,确定序列号占位数、机器标识占位数、时间戳占位数以及序列的总占位数,所述时间戳以秒为单位。
11.如权利要求7所述的一种分布式系统中生成序列的装置,其特征在于,所述时间戳第一获得模块,包括:
第一差值获得单元,用于利用与所述重置后第二序列值对应的时间与所述初始时间相减,获得第一差值;其中,所述与所述重置后第二序列值对应的时间是指重置第二序列值时系统对应的时间,所述初始时间是预先设置的参数,所述序列时限是保证序列唯一的时间段;
时间戳获得单元,用于将所述第一差值与所述序列时限进行求余,获得所述时间戳。
12.如权利要求7所述的一种分布式系统中生成序列的装置,其特征在于,所述第一序列生成模块,包括:
第一移位结果获得单元,用于将所述时间戳按照预设方向移动时间戳占位数,获得第一移位结果;
第二移位结果获得单元,用于将所述机器标识按照预设方向移动机器标识占位数,获得第二移位结果;
序列生成单元,用于将所述第一移位结果、所述第二移位结果、所述重置后第二序列值进行位运算,为所述目标服务器生成序列。
13.一种分布式系统中生成序列的设备,其特征在于,包括处理器及用于存储处理器可执行指令的存储器,所述指令被所述处理器执行时实现包括以下步骤:
接收目标服务器获取序列的请求;
获取第一时间与第二时间,判断所述第一时间与第二时间是否在预设时间段内,所述第一时间是所述系统本次接收获取序列请求所对应的时间,所述第二时间是所述系统上一次生成序列时所对应的时间,所述预设时间段以秒为单位;
确定所述第一时间与所述第二时间在预设时间段内时,则在第一序列值的基础上递增,获得第二序列值,判断所述第二序列值是否达到预设值,所述第一序列值是所述系统上一次生成序列所对应的序列号,所述预设值是所述预设时间段内序列号的最大值;
确定所述第二序列值达到预设值时,则等待下一个预设时间段并重置所述第二序列值,获取重置后第二序列值以及与所述重置后第二序列值对应的时间;
根据所述与所述重置后第二序列值对应的时间、初始时间、序列时限,获得时间戳,所述时间戳以秒为单位;
根据所述时间戳、机器标识、所述重置后第二序列值,为所述目标服务器生成序列。
14.一种分布式系统中生成序列的系统,其特征在于,包括至少一个处理器以及存储计算机可执行指令的存储器,所述处理器执行所述指令时实现权利要求1-6中任意一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910292979.7A CN110096528A (zh) | 2019-04-12 | 2019-04-12 | 一种分布式系统中生成序列的方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910292979.7A CN110096528A (zh) | 2019-04-12 | 2019-04-12 | 一种分布式系统中生成序列的方法、装置及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110096528A true CN110096528A (zh) | 2019-08-06 |
Family
ID=67444783
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910292979.7A Pending CN110096528A (zh) | 2019-04-12 | 2019-04-12 | 一种分布式系统中生成序列的方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110096528A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110515956A (zh) * | 2019-09-02 | 2019-11-29 | 中国工商银行股份有限公司 | 序列号获取方法、装置、系统、电子设备及存储介质 |
CN111026724A (zh) * | 2019-11-24 | 2020-04-17 | 山东中创软件商用中间件股份有限公司 | 一种基于分布式系统的文件同步方法、装置、设备及介质 |
CN111083228A (zh) * | 2019-12-24 | 2020-04-28 | 腾讯云计算(北京)有限责任公司 | 标识号的生成方法、装置和电子设备 |
CN111580992A (zh) * | 2020-05-09 | 2020-08-25 | 上海维信荟智金融科技有限公司 | 分布式id生成方法及系统 |
CN112783706A (zh) * | 2021-01-22 | 2021-05-11 | 山东云海国创云计算装备产业创新中心有限公司 | 一种序列生成方法、系统、设备及计算机可读存储介质 |
CN112925618A (zh) * | 2021-02-22 | 2021-06-08 | 北京达佳互联信息技术有限公司 | 一种分布式任务的处理方法和装置 |
CN113239088A (zh) * | 2021-04-12 | 2021-08-10 | 上海沐融信息科技有限公司 | 一种异步化可调节预取量的序号发生器获取方法及装置 |
CN113596193A (zh) * | 2021-07-27 | 2021-11-02 | 京东科技控股股份有限公司 | 一种分布式id处理方法、系统、存储介质及电子设备 |
CN114064796A (zh) * | 2020-07-31 | 2022-02-18 | 中国电信股份有限公司 | 分布式唯一序列生成方法、装置和存储介质 |
CN114143285A (zh) * | 2021-10-29 | 2022-03-04 | 青岛海尔科技有限公司 | 分布式系统中生成id的方法、装置及服务器 |
CN114697292A (zh) * | 2022-02-18 | 2022-07-01 | 青岛海尔科技有限公司 | 标识信息的生成方法及装置、存储介质、电子装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106874424A (zh) * | 2017-01-25 | 2017-06-20 | 杭州淘淘搜科技有限公司 | 一种基于MongoDB和Redis的网页数据采集处理方法及系统 |
CN107864233A (zh) * | 2017-11-08 | 2018-03-30 | 千寻位置网络有限公司 | 全局唯一id结构及生成方法 |
CN108804545A (zh) * | 2018-05-18 | 2018-11-13 | 深圳市彬讯科技有限公司 | 分布式全局唯一id生成方法及设备 |
-
2019
- 2019-04-12 CN CN201910292979.7A patent/CN110096528A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106874424A (zh) * | 2017-01-25 | 2017-06-20 | 杭州淘淘搜科技有限公司 | 一种基于MongoDB和Redis的网页数据采集处理方法及系统 |
CN107864233A (zh) * | 2017-11-08 | 2018-03-30 | 千寻位置网络有限公司 | 全局唯一id结构及生成方法 |
CN108804545A (zh) * | 2018-05-18 | 2018-11-13 | 深圳市彬讯科技有限公司 | 分布式全局唯一id生成方法及设备 |
Non-Patent Citations (1)
Title |
---|
CSDN: "[分布式] ------ 全局唯一id生成之雪花算法(Twitter_Snowflake)", 《HTTPS://BLOG.CSDN.NET/JAVA_ZHANGSHUAI/ARTICLE/DETAILS/86668974》 * |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110515956A (zh) * | 2019-09-02 | 2019-11-29 | 中国工商银行股份有限公司 | 序列号获取方法、装置、系统、电子设备及存储介质 |
CN110515956B (zh) * | 2019-09-02 | 2022-03-25 | 中国工商银行股份有限公司 | 序列号获取方法、装置、系统、电子设备及存储介质 |
CN111026724A (zh) * | 2019-11-24 | 2020-04-17 | 山东中创软件商用中间件股份有限公司 | 一种基于分布式系统的文件同步方法、装置、设备及介质 |
CN111026724B (zh) * | 2019-11-24 | 2023-09-01 | 山东中创软件商用中间件股份有限公司 | 一种基于分布式系统的文件同步方法、装置、设备及介质 |
CN111083228A (zh) * | 2019-12-24 | 2020-04-28 | 腾讯云计算(北京)有限责任公司 | 标识号的生成方法、装置和电子设备 |
CN111580992A (zh) * | 2020-05-09 | 2020-08-25 | 上海维信荟智金融科技有限公司 | 分布式id生成方法及系统 |
CN114064796A (zh) * | 2020-07-31 | 2022-02-18 | 中国电信股份有限公司 | 分布式唯一序列生成方法、装置和存储介质 |
CN112783706A (zh) * | 2021-01-22 | 2021-05-11 | 山东云海国创云计算装备产业创新中心有限公司 | 一种序列生成方法、系统、设备及计算机可读存储介质 |
CN112925618A (zh) * | 2021-02-22 | 2021-06-08 | 北京达佳互联信息技术有限公司 | 一种分布式任务的处理方法和装置 |
CN113239088A (zh) * | 2021-04-12 | 2021-08-10 | 上海沐融信息科技有限公司 | 一种异步化可调节预取量的序号发生器获取方法及装置 |
CN113596193A (zh) * | 2021-07-27 | 2021-11-02 | 京东科技控股股份有限公司 | 一种分布式id处理方法、系统、存储介质及电子设备 |
CN113596193B (zh) * | 2021-07-27 | 2024-01-16 | 京东科技控股股份有限公司 | 一种分布式id处理方法、系统、存储介质及电子设备 |
CN114143285A (zh) * | 2021-10-29 | 2022-03-04 | 青岛海尔科技有限公司 | 分布式系统中生成id的方法、装置及服务器 |
CN114143285B (zh) * | 2021-10-29 | 2023-11-28 | 青岛海尔科技有限公司 | 分布式系统中生成id的方法、装置及服务器 |
CN114697292A (zh) * | 2022-02-18 | 2022-07-01 | 青岛海尔科技有限公司 | 标识信息的生成方法及装置、存储介质、电子装置 |
CN114697292B (zh) * | 2022-02-18 | 2023-12-19 | 青岛海尔科技有限公司 | 标识信息的生成方法及装置、存储介质、电子装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110096528A (zh) | 一种分布式系统中生成序列的方法、装置及系统 | |
CN107402824A (zh) | 一种数据处理的方法及装置 | |
CN107957831A (zh) | 一种展示界面内容的数据处理方法、装置和处理设备 | |
CN107644286A (zh) | 工作流处理方法及装置 | |
CN109582485A (zh) | 一种配置变更异常检测方法及装置 | |
CN109634561A (zh) | 一种在线可视化编程方法及装置 | |
CN110134668A (zh) | 应用于区块链的数据迁移方法、装置和设备 | |
CN109086961A (zh) | 一种信息风险监测方法及装置 | |
CN108959341A (zh) | 一种数据同步的方法、装置及设备 | |
CN109240848A (zh) | 一种数据对象标识生成方法及装置 | |
CN109299222A (zh) | 数据核对方法及装置 | |
CN110059090A (zh) | 一种位图索引的写入/转储/合并/查询方法和装置 | |
CN110309034A (zh) | 业务流转链路视图生成方法及装置 | |
CN110162573A (zh) | 一种分布式序列生成方法、装置及系统 | |
CN108073687A (zh) | 随机游走、基于集群的随机游走方法、装置以及设备 | |
CN109033127A (zh) | 一种同步数据校验方法、装置以及设备 | |
CN106547870A (zh) | 数据库的分表方法及装置 | |
CN109241026A (zh) | 数据管理的方法、装置及系统 | |
CN110263050A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN109597678A (zh) | 任务处理方法及装置 | |
CN110532295A (zh) | 一种计算机实施的信息处理、信息查询的方法及装置 | |
CN109584431A (zh) | 一种优先排队的数据处理方法、装置及系统 | |
CN108390914A (zh) | 一种服务更新方法及装置、系统 | |
CN108255471A (zh) | 一种基于配置套件的系统配置项配置装置、方法及设备 | |
CN110264213A (zh) | 一种信息的处理方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190806 |
|
RJ01 | Rejection of invention patent application after publication |