分布式系统中的标识生成方法、装置、设备及存储介质转让专利

申请号 : CN201910936832.7

文献号 : CN110677511B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈焜

申请人 : 北京三快在线科技有限公司

摘要 :

本申请公开了一种分布式系统中的标识生成方法、装置、设备及存储介质,该方法包括:服务器根据分布式节点中的系统时间实时生成第一时间戳;基于第一时间戳获取第一批次号和第一自增数;根据第一时间戳、第一批次号和第一自增数生成第一标识,第一标识用于作为业务数据的唯一标识。该方法是在标识中增加了批次号;基于一个时间戳生成标识的过程中,若自增数达到上限,可以通过批次号的递增继续生成标识。即通过划分批次可以生成数量更多的标识,在高并发业务请求的场景中,可以为大量的业务数据提供相应的标识生成服务,满足业务系统对标识的大量需求,避免由于生成标识数量不足而出现的等待问题。

权利要求 :

1.一种分布式系统中的标识生成方法,其特征在于,应用于所述分布式系统的分布式节点中,所述方法包括:当校准后的系统时间大于校准前的最大时间戳时,根据所述校准后的系统时间实时生成第一时间戳,所述校准后的系统时间是根据时间中心提供的时间数据进行周期性校准得到的时间,所述校准前的最大时间戳是所述分布式系统中已生成标识中包括的最大时间戳;

基于所述第一时间戳获取第一批次号和第一自增数;所述第一批次号用于对所述第一时间戳下生成的标识的批次进行标记;所述第一自增数是以恒定速率增长的整数,所述第一自增数用于在所述第一时间戳的所述第一批次号下生成若干个标识;

对所述第一时间戳、所述第一批次号和所述第一自增数拼接组合,生成第一标识,所述第一标识用于作为业务数据的唯一标识;

当所述校准后的系统时间小于所述校准前的最大时间戳时,根据所述校准后的系统时间实时生成第二时间戳;

当所述分布式节点中存在所述第二时间戳时,将所述第二时间戳对应的最大批次号递增,得到第二批次号,并获取第二自增数;

对所述第二时间戳、所述第二批次号和所述第二自增数拼接组合,生成第二标识。

2.根据权利要求1所述的方法,其特征在于,所述基于所述第一时间戳获取第一批次号和第一自增数,包括:当所述分布式节点中存在所述第一时间戳时,获取所述第一时间戳对应的最大批次号;

当所述第一时间戳对应的最大批次号小于第一批次阈值时,将所述第一时间戳对应的最大批次号加x得到所述第一批次号,对应的将第一初始值赋值给所述第一自增数;其中,x为预设值。

3.根据权利要求2所述的方法,其特征在于,所述当所述第一时间戳对应的最大批次号小于第一批次阈值时,将所述第一时间戳对应的最大批次号加x得到所述第一批次号之前,包括:获取所述第一时间戳的最大批次号对应的自增数;

当所述第一时间戳的最大批次号对应的自增数等于自增数阈值时,执行所述当所述第一时间戳对应的最大批次号小于第一批次阈值时,将所述第一时间戳对应的最大批次号加x得到所述第一批次号的步骤。

4.根据权利要求2所述的方法,其特征在于,所述方法还包括:

获取所述第一时间戳的最大批次号对应的自增数;

当所述第一时间戳的最大批次号对应的自增数小于自增数阈值时,将所述第一时间戳的最大批次号确定为所述第一批次号,并将所述第一时间戳的最大批次号对应的自增数确定为所述第一自增数。

5.根据权利要求1至4任一所述的方法,其特征在于,所述根据所述第一时间戳、所述第一批次号和所述第一自增数生成第一标识,包括:对所述第一时间戳、所述第一批次号和所述第一自增数进行拼接组合,周期性对所述第一标识进行批量生成;

将所述第一标识存储至标识池中;

所述方法还包括:

在接收到所述分布式节点的业务数据的标识生成请求时,优先从所述标识池中获取所述第一标识。

6.根据权利要求1所述的方法,其特征在于,所述将所述第二时间戳对应的最大批次号递增,得到第二批次号,并获取第二自增数,包括:当所述第二时间戳对应的最大批次号小于第二批次阈值时,将所述第二时间戳对应的最大批次号加y得到所述第二批次号,对应的将第二初始值赋值给所述第二自增数,其中,y为预设值。

7.一种分布式系统中的标识生成装置,其特征在于,所述装置为所述分布式系统的分布式节点,所述装置包括:生成模块,用于当校准后的系统时间大于校准前的最大时间戳时,根据所述校准后的系统时间实时生成第一时间戳,所述校准后的系统时间是根据时间中心提供的时间数据进行周期性校准得到的时间,所述校准前的最大时间戳是所述分布式系统中已生成标识中包括的最大时间戳;

获取模块,用于基于所述第一时间戳获取第一批次号和第一自增数;所述第一批次号用于对所述第一时间戳下生成的标识的批次进行标记;所述第一自增数是以恒定速率增长的整数,所述第一自增数用于在所述第一时间戳的所述第一批次号下生成若干个标识;

所述生成模块,还用于对所述第一时间戳、所述第一批次号和所述第一自增数拼接组合,生成第一标识,所述第一标识用于作为业务数据的唯一标识;

所述生成模块,还用于当所述校准后的系统时间小于所述校准前的最大时间戳时,根据所述校准后的系统时间实时生成第二时间戳;

所述获取模块,还用于当所述分布式节点中存在所述第二时间戳时,将所述第二时间戳对应的最大批次号递增,得到第二批次号,并获取第二自增数;

所述生成模块,还用于对所述第二时间戳、所述第二批次号和所述第二自增数拼接组合,生成第二标识。

8.一种分布式节点,其特征在于,所述分布式节点包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或所述指令集由所述处理器加载并执行以实现如权利要求1至6任一项所述的分布式系统中的标识生成方法。

9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行,以实现如权利要求1至6任一项所述的分布式系统中的标识生成方法。

说明书 :

分布式系统中的标识生成方法、装置、设备及存储介质

技术领域

[0001] 本申请涉及一种分布式系统中的标识生成方法、装置、设备及存储介质。

背景技术

[0002] 在分布式系统中,很多业务场景中需要对数据生成唯一标识(IDentity,ID),以确保数据的唯一性,为数据提供定位、区分的有效标识。比如,外卖业务系统需要保证每一单订单的订单号的唯一性。
[0003] 典型的唯一ID生成方式依赖于时间戳,比如,最具代表性的唯一ID生成算法的原理是根据毫秒级的时间戳来生成ID的,从而保证每一个ID的唯一性;具体的,分布式节点对毫秒级的时间戳、节点标识以及自增数组合生成唯一ID。

发明内容

[0004] 本申请实施例提供了一种分布式系统中的标识生成方法、装置、设备及存储介质,所述技术方案如下:
[0005] 根据本申请的一个方面,提供了一种分布式系统中的标识生成方法,应用于分布式系统的分布式节点中,该方法包括:
[0006] 根据分布式节点中的系统时间实时生成第一时间戳;
[0007] 基于第一时间戳获取第一批次号和第一自增数;第一批次号用于对第一时间戳下生成的标识的批次进行标记;第一自增数是以恒定速率增长的整数,第一自增数用于在第一时间戳的第一批次号下生成若干个标识;
[0008] 根据第一时间戳、第一批次号和第一自增数生成第一标识,第一标识用于作为业务数据的唯一标识。
[0009] 在一些实施例中,基于第一时间戳获取第一批次号和第一自增数,包括:
[0010] 当分布式节点中存在第一时间戳时,获取第一时间戳对应的最大批次号;
[0011] 当第一时间戳对应的最大批次号小于第一批次阈值时,将第一时间戳对应的最大批次号加x得到第一批次号,对应的将第一初始值赋值给第一自增数;其中,x为预设值。
[0012] 在一些实施例中,当第一时间戳对应的最大批次号小于第一批次阈值时,将第一时间戳对应的最大批次号加x得到第一批次号之前,包括:
[0013] 获取第一时间戳的最大批次号对应的自增数;
[0014] 当第一时间戳的最大批次号对应的自增数等于自增数阈值时,执行当第一时间戳对应的最大批次号小于第一批次阈值时,将第一时间戳对应的最大批次号加x得到第一批次号的步骤。
[0015] 在一些实施例中,该方法还包括:
[0016] 获取第一时间戳的最大批次号对应的自增数;
[0017] 当第一时间戳的最大批次号对应的自增数小于自增数阈值时,将第一时间戳的最大批次号确定为第一批次号,并将第一时间戳的最大批次号对应的自增数确定为第一自增数。
[0018] 在一些实施例中,根据第一时间戳、第一批次号和第一自增数生成第一标识,包括:
[0019] 对第一时间戳、第一批次号和第一自增数进行拼接组合,周期性对第一标识进行批量生成;
[0020] 将第一标识存储至标识池中;
[0021] 该方法还包括:
[0022] 在接收到分布式节点的业务数据的标识生成请求时,优先从标识池中获取第一标识。
[0023] 在一些实施例中,系统时间为校准后的系统时间,校准后的系统时间是根据时间中心提供的时间数据进行周期性校准得到的时间;
[0024] 根据分布式节点中的系统时间实时生成第一时间戳,包括:
[0025] 获取校准后的系统时间和校准前的最大时间戳,校准前的最大时间戳是分布式系统中已生成标识中包括的最大时间戳;
[0026] 当校准后的系统时间大于校准前的最大时间戳时,根据校准后的系统时间实时生成第一时间戳。
[0027] 在一些实施例中,系统时间为校准后的系统时间,校准后的系统时间是根据时间中心提供的时间数据进行周期性校准得到的时间;
[0028] 该方法还包括:
[0029] 获取校准后的系统时间和校准前的最大时间戳,校准前的最大时间戳是分布式系统中已生成标识中包括的最大时间戳;
[0030] 当校准后的系统时间小于校准前的最大时间戳时,根据校准后的系统时间实时生成第二时间戳;
[0031] 当分布式节点中存在第二时间戳时,将第二时间戳对应的最大批次号递增,得到第二批次号,并获取第二自增数;
[0032] 根据第二时间戳、第二批次号和第二自增数生成第二标识。
[0033] 在一些实施例中,将第二时间戳对应的最大批次号递增,得到第二批次号,并获取第二自增数,包括:
[0034] 当第二时间戳对应的最大批次号小于第二批次阈值时,将第二时间戳对应的最大批次号加y得到第二批次号,对应的将第二初始值赋值给第二自增数,其中,y为预设值。
[0035] 根据本申请的另一方面,提供了一种分布式系统中的标识生成装置,该装置为分布式系统中的分布式节点,该装置包括:
[0036] 生成模块,用于根据分布式节点中的系统时间实时生成第一时间戳;
[0037] 获取模块,用于基于第一时间戳获取第一批次号和第一自增数;第一批次号用于对第一时间戳下生成的标识的批次进行标记;第一自增数是以恒定速率增长的整数,第一自增数用于在第一时间戳的第一批次号下生成若干个标识;
[0038] 生成模块,用于根据第一时间戳、第一批次号和第一自增数生成第一标识,第一标识用于作为业务数据的唯一标识。
[0039] 在一些实施例中,获取模块,包括:
[0040] 获取子模块,用于当分布式节点中存在第一时间戳时,获取第一时间戳对应的最大批次号;
[0041] 确定子模块,用于当第一时间戳对应的最大批次号小于第一批次阈值时,将第一时间戳对应的最大批次号加x得到第一批次号,对应的将第一初始值赋值给第一自增数;其中,x为预设值。
[0042] 在一些实施例中,
[0043] 获取子模块,用于获取第一时间戳的最大批次号对应的自增数;
[0044] 确定子模块,用于当第一时间戳的最大批次号对应的自增数等于自增数阈值时,执行当第一时间戳对应的最大批次号小于第一批次阈值时,将第一时间戳对应的最大批次号加x得到第一批次号的步骤。
[0045] 在一些实施例中,
[0046] 获取子模块,用于获取第一时间戳的最大批次号对应的自增数;
[0047] 确定子模块,用于当第一时间戳的最大批次号对应的自增数小于自增数阈值时,将第一时间戳的最大批次号确定为第一批次号,并将第一时间戳的最大批次号对应的自增数确定为第一自增数。
[0048] 在一些实施例中,
[0049] 生成模块,用于对第一时间戳、第一批次号和第一自增数进行拼接组合,周期性对第一标识进行批量生成;将第一标识存储至标识池中;
[0050] 获取模块,还用于在接收到分布式节点的业务数据的标识生成请求时,优先从标识池中获取第一标识。
[0051] 在一些实施例中,系统时间为校准后的系统时间,校准后的系统时间是根据时间中心提供的时间数据进行周期性校准得到的时间;
[0052] 获取模块,用于获取校准后的系统时间和校准前的最大时间戳,校准前的最大时间戳是分布式系统中已生成标识中包括的最大时间戳;
[0053] 生成模块,用于当校准后的系统时间大于校准前的最大时间戳时,根据校准后的系统时间实时生成第一时间戳。
[0054] 在一些实施例中,系统时间为校准后的系统时间,校准后的系统时间是根据时间中心提供的时间数据进行周期性校准得到的时间;
[0055] 获取模块,用于获取校准后的系统时间和校准前的最大时间戳,校准前的最大时间戳是分布式系统中已生成标识中包括的最大时间戳;
[0056] 生成模块,用于当校准后的系统时间小于校准前的最大时间戳时,根据校准后的系统时间实时生成第二时间戳;
[0057] 获取模块,用于当分布式节点中存在第二时间戳时,将第二时间戳对应的最大批次号递增,得到第二批次号,并获取第二自增数;
[0058] 生成模块,用于根据第二时间戳、第二批次号和第二自增数生成第二标识。
[0059] 在一些实施例中,
[0060] 确定子模块,用于当第二时间戳对应的最大批次号小于第二批次阈值时,将第二时间戳对应的最大批次号加y得到第二批次号,对应的将第二初始值赋值给第二自增数,其中,y为预设值。
[0061] 根据本申请的另一方面,提供了一种分布式节点,该分布式节点包括处理器和存储器,存储器中存储有至少一条指令、至少一段程序、代码集或指令集,上述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现如上方面所述的分布式系统中的标识生成方法。
[0062] 根据本申请的另一方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,上述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现如上方面所述的分布式系统中的标识生成方法。
[0063] 本申请实施例提供的技术方案带来的有益效果至少包括:
[0064] 服务器根据分布式节点中的系统时间实时生成第一时间戳;基于第一时间戳获取第一批次号和第一自增数;第一批次号用于对第一时间戳下生成的标识的批次进行标记;第一自增数是以恒定速率增长的整数,第一自增数用于在第一时间戳的第一批次号下生成若干个标识;根据第一时间戳、第一批次号和第一自增数生成第一标识,第一标识用于作为业务数据的唯一标识。
[0065] 该分布式系统中的标识生成方法,在标识中增加了批次号;基于一个时间戳生成标识的过程中,若自增数达到上限,可以通过批次号的递增继续生成标识。也就是说,通过划分批次可以生成数量更多的标识,在高并发业务请求的场景中,可以为大量的业务数据提供相应的标识生成服务,满足业务系统对标识的大量需求,避免由于生成标识数量不足而出现的等待问题。

附图说明

[0066] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0067] 图1是本申请一个示例性实施例提供的分布式系统的结构示意图;
[0068] 图2本申请一个示例性实施例提供的分布式系统中的标识生成方法的流程图;
[0069] 图3本申请另一个示例性实施例提供的分布式系统中的标识生成方法的流程图;
[0070] 图4是本申请一个示例性实施例提供的标识的拼接结构的示意图;
[0071] 图5是本申请一个示例性实施例提供的标识生成系统的结构示意图;
[0072] 图6是本申请另一个示例性实施例提供的分布式系统中的标识生成方法的流程图;
[0073] 图7是本申请一个示例性实施例提供的分布式系统中的标识生成装置的框图;
[0074] 图8是本申请一个示例性实施例提供的服务器的装置结构示意图。

具体实施方式

[0075] 为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
[0076] 首先,对本申请实施例中涉及的名词进行介绍:
[0077] 标识:是指用于对事物识别的标志。本申请实施例中的标识具有唯一性,可以应用于不同的业务场景中,服务器在生成业务数据时,通过标识对不同的业务数据进行标记,以对不同的业务数据进行区分。比如,在网上交易的过程中,每一笔订单会对应有一个订单号,订单号即为订单的标识,且每一个订单号都是唯一的。
[0078] 时间回拨:服务器从时间中心同步校准时间,通过校准时间对本机的系统时间进行校准,当系统时间快于校准时间时,服务器会对系统时间回拨,也就是说,会出现时钟往回跳动的现象,该现象即为时间回拨。
[0079] 分布式系统:是指由客户端、多个节点(接入网络中的任一形式的计算机设备,如服务器、用户终端)通过网络通信的形式连接形成的系统。如图1,示出了分布式系统的一个可选的结构示意图,节点100之间形成组成的点对点(P2P,Peer To Peer)网络,P2P协议是一个运行在传输控制协议(TCP,Transmission Control Protocol)之上的应用层协议。在分布式系统中,任何机器如服务器、终端都可以加入而成为节点,节点包括硬件层、中间层、操作系统层和应用层。
[0080] 在线网络业务存在各种类型的业务事件,需要对业务数据生成唯一标识,以确保业务数据的唯一性。本申请提供了一种分布式系统中的标识生成方法,能够在分布式系统中为各种类型的业务事件的业务数据生成唯一标识,以如下实施例对上述分布式系统中的标识生成方法进行说明。
[0081] 请参考图2,示出了本申请一个示例性实施例提供的分布式系统中的标识生成方法的流程图,该方法应用于分布式系统的分布式节点中,该方法包括以下步骤:
[0082] 步骤201,服务器根据分布式节点中的系统时间实时生成第一时间戳。
[0083] 本实施例中,服务器是分布式系统中的分布式节点。分布式节点提供标识生成服务,为业务数据不断的生成标识,且生成的每一个标识均具有唯一性。其中,该标识中包括时间戳,时间戳是指以时间信息为参数的凭证文档,时间信息可以包括日期和时间。
[0084] 可选地,分布式节点根据系统时间周期性的生成第一时间戳,比如,分布式节点每个一毫秒(ms)生成一个第一时间戳。
[0085] 步骤202,服务器基于第一时间戳获取第一批次号和第一自增数。
[0086] 其中,第一批次号用于对第一时间戳下生成的标识的批次进行标记;第一自增数是以恒定速率增长的整数,第一自增数用于在第一时间戳的第一批次号下生成若干个标识。
[0087] 需要说明的是,自增数是一个具有起始值,且按照恒定速率增加的值;恒定速率是指标识的生成速率;也就是说,每生成一个标识,自增数加一,直至达到上限,比如,一个自增数初始值为“0000”,对应生成的第一个标识即为“0000”,第二个标识为“0001”,第三个标识为“0010”,以此类推,直至到达上限“1111”。因此,服务器中对应存储有第一自增数的自增数阈值。
[0088] 批次号表示在一个时间戳下生成的标识的批次,比如,在一个41位的时间戳“00010100 00000000 01001000 10010100 11100100 1”下,可以生成批次为“0000”、“0001”“0010”等等不同批次号的标识。批次号具有初始值,初始值可以为任意整数,比如,0或1。
[0089] 示意性的,批次号是由一组二进制数组成的,批次号占用的比特位数有限,因此,批次号的值具有上限,即批次号对应有批次阈值。比如,批次号是一组4比特的二进制数,则批次号最大为15。因此,服务器中对应存储有第一批次号的第一批次阈值。
[0090] 在一种可能的情况下,服务器开始基于第一时间戳生成标识,分布式节点中不存在第一时间戳,则服务器将初始值赋值给第一批次号,且对应的将第一初始值赋值给第一自增数。比如,服务器将初始值0赋值给第一批次号,作为初始批次的标识的批次号;对应的将第一初始值0赋值给第一自增数。
[0091] 在另一种可能的情况下,服务器正在连续基于第一时间戳生成标识,分布式节点中存在第一时间戳,则服务器确定分布节点中存在第一时间戳后,获取第一时间戳对应的最大批次号;当第一时间戳对应的最大批次号小于第一批次阈值时,将第一时间戳对应的最大批次号加x得到第一批次号,对应的将第一初始值赋值给第一自增数;其中,x为预设值,x为正整数。
[0092] 还需要说明的是,为了使每一个自增数能够对应生成尽量多的标识,在一个自增数达到上限后,服务器才进行下一次批次的标识的生成,因此,服务器获取得到第一时间戳对应的最大批次号之后,获取第一时间戳的最大批次号对应的自增数;判断第一时间戳的最大批次号对应的自增数是否小于第一批次阈值;当第一时间戳的最大批次号对应的自增数等于自增数阈值时,确定第一时间戳的最大批次号对应的自增数达到上限,则执行当第一时间戳对应的最大批次号小于第一批次阈值时,将第一时间戳对应的最大批次号加x得到第一批次号的步骤。
[0093] 当第一时间戳的最大批次号对应的自增数小于自增数阈值时,服务器确定第一时间戳的最大批次号对应的自增数还未达到上限,则将第一时间戳的最大批次号确定为第一批次号,并将第一时间戳的最大批次号对应的自增数确定为第一自增数。
[0094] 步骤203,服务器根据第一时间戳、第一批次号和第一自增数生成第一标识。
[0095] 第一标识用于作为业务数据的唯一标识。服务器对第一时间戳、第一批次号和第一自增数进行拼接组合,生成第一标识。可选地,第一标识中还包括分布式节点的节点标识;服务器对第一时间戳、第一批次号、节点标识和第一自增数拼接组合,生成第一标识。
[0096] 比如,第一时间戳为“01010100 00001000 01001000 10010000 10100100 0”,第一批次号为“00000”,节点标识为“00010”,自增数为“00000000 0000”;则第一标识为64位的“0 01010100 00001000 01001000 10010000 10100100 0 00000 00010 00000000 0000”。
[0097] 其中,节点标识是指每一个分布式节点的标志,每一个节点标识均是唯一的。
[0098] 综上所述,本实施例提供的分布式系统中的标识生成方法,服务器根据分布式节点中的系统时间实时生成第一时间戳;基于第一时间戳获取第一批次号和第一自增数;第一批次号用于对第一时间戳下生成的标识的批次进行标记;第一自增数是以恒定速率增长的整数,第一自增数用于在第一时间戳的第一批次号下生成若干个标识;根据第一时间戳、第一批次号和第一自增数生成第一标识,第一标识用于作为业务数据的唯一标识。该方法是在标识中增加了批次号;基于一个时间戳生成标识的过程中,若自增数达到上限,可以通过批次号的递增继续生成标识。也就是说,通过划分批次可以生成数量更多的标识,在高并发业务请求的场景中,可以为大量的业务数据提供相应的标识生成服务,满足业务系统对标识的大量需求,避免由于生成标识数量不足而出现的等待问题。
[0099] 分布式节点会定期从时间中心同步时间数据,对系统时间进行校准;校准后的系统时间即是根据时间中心提供的时间数据进行周期性校准得到的时间。其中,时间中心可以是指国家授时中心,该机构提供标准时间。
[0100] 在生成标识的过程中,分布式节点对系统时间进行校准,若校准前的系统时间快于时间中心提供的校准时间,则分布式节点在系统时间校准完成后,会出现时间回拨的现象,使得分布式节点获取的时间戳出现重复。在生成标识的过程中,分布式节点获取校准后的系统时间和校准前的最大时间戳,通过比较二者的时间大小来确定分布式节点中是否出现了时间回拨现象。其中,校准前的最大时间戳是分布式系统中已生成标识中包括的最大时间戳。
[0101] 请参考图3,示出了本申请一个示例性实施例提供的分布式系统中的标识生成方法的流程图,该方法应用于分布式系统的分布式节点中,可以用于解决上述时间回拨问题,该方法包括以下步骤:
[0102] 步骤301,服务器获取校准后的系统时间和校准前的最大时间戳。
[0103] 步骤302,服务器判断校准后的系统时间是否大于校准前的最大时间戳。
[0104] 服务器判断校准后的系统时间是否大于校准前的最大时间戳;当校准后的系统时间大于校准前的最大时间戳时,执行步骤303至步骤305;当校准后的系统时间小于等于校准前的最大时间戳时,执行步骤306至步骤310。
[0105] 步骤303,服务器根据校准后的系统时间实时生成第一时间戳。
[0106] 可选地,服务器根据校准后的系统时间周期性生成的第一时间戳。
[0107] 步骤304,服务器基于第一时间戳获取第一批次号和第一自增数。
[0108] 若校准后的系统时间大于校准前的最大时间戳,表示分布式节点中的原系统时间比校准时间慢,在根据校准时间对系统时间校准后,分布式节点中不存在时间回拨现象,因此,不会出现时间戳重复的情况,则服务器将初始值赋值给第一批次号,且对应的将第一初始值赋值给第一自增数。比如,服务器将初始值1赋值给第一批次号,作为初始批次的标识的批次号;对应的将第一初始值0赋值给第一自增数。
[0109] 步骤305,服务器根据第一时间戳、第一批次号和第一自增数生成第一标识。
[0110] 该步骤的详细描述请参考步骤203,在此不再加以赘述。
[0111] 步骤306,服务器根据校准后的系统时间实时生成第二时间戳。
[0112] 可选地,服务器根据校准后的系统时间周期性的生成第二时间戳,比如,分布式节点每隔2ms生成一个第二时间戳。
[0113] 步骤307,服务器判断分布式节点中是否存在第二时间戳。
[0114] 若校准后的系统时间小于或者等于校准前的最大时间戳,表示分布式节点中的原系统时间比校准时间快,在根据校准时间对系统时间校准后,分布式节点中存在时间回拨现象,因此出现了时间戳重复的情况,分布式节点中可能存在第二时间戳。
[0115] 服务器判断分布式节点中是否存在第二时间戳;当分布式节点中存在第二时间戳时,执行步骤308;当分布式节点中不存在第二时间戳时,执行步骤310。
[0116] 步骤308,服务器将第二时间戳对应的最大批次号递增,得到第二批次号,并获取第二自增数。
[0117] 为了区分系统时间校准前和校准后基于第二时间戳生成的标识,服务器将第二时间戳对应的批次号递增,确定出第二批次号,以第二批次号作为校准后生成的标识的批次。相应地,服务器获取初始化的第二自增数,也就是说,第二自增数被赋值为初始值。
[0118] 由于在时间校准前分布式节点生成的第二时间戳对应的标识可以包括i个批次,i为正整数,因此,第二时间戳对应的批次号可以是校准前的第二时间戳对应的最大批次号递增后得到的。也就是说,服务器将第二时间戳对应的最大批次号递增,确定出第二批次号。比如,第二时间戳对应的最大批次号为3,则将第二批次号确定为4;则系统时间校准前基于第二时间戳生成的标识对应的批次号为3,系统时间校准后基于第二时间戳生成的标识对应的批次号为4。
[0119] 示意性的,批次号是由一组二进制数组成的,批次号占用的比特位数有限,因此,批次号的值具有上限,因此,第二批次号对应有第二批次阈值。可选地,服务器判断第二时间戳对应的最大批次号是否小于第二批次阈值;当第二时间戳对应的最大批次号小于第二批次阈值时,服务器将第二时间戳对应的最大批次号加y得到第二批次号,对应的将第二初始值赋值给第二自增数,其中,y为预设值,y为正整数。
[0120] 需要说明的是,若同一时间对标识的需求大,一批标识无法满足业务需求,服务器可以在同一时间戳下生成多个批次的标识,因此,第二时间戳对应标识的批次号可以是初始批次号,第二时间戳对应的标识也可以对应多个批次号,在计算第二批次号时,服务器将校准前的第二时间戳对应的最大批次号加y,得到第二批次号。
[0121] 当第二时间戳对应的最大批次号等于第二批次阈值时,表示第二时间戳下的标识的批次号已达上限,等待并重新获取校准后的系统时间,基于重新获取的校准后的系统时间继续执行分布式系统中第一标识或者第二标识生成的步骤。也就是说,若第二批次号等于第二批次阈值,服务器进入等待状态;在等待一定时间后,重新获取校准后的系统时间,返回执行步骤301。
[0122] 步骤309,服务器根据第二时间戳、第二批次号和第二自增数生成第二标识。
[0123] 可选地,第二标识中还包括分布式节点的节点标识;服务器对第二时间戳、第二批次号、节点标识和第二自增数拼接组合,得到第二标识。
[0124] 示意性的,第二标识中包括第二时间戳、第二批次号、分布式节点的节点标识和第二自增数。如图4所示,第二标识的结构可以是上述第二时间戳、第二批次号、节点标识和第二自增数的顺序拼接,包括了一个41位的第二时间戳、5位的第二批次号、5位的节点标识和12位的第二自增数;还包括一位不使用。其中,第二批次号和节点标识的比特位数可以根据分布式系统的实际情况和/或每一个节点在同一时刻对标识量的需求进行调整,比如,可以将批次号设置为3位,对应的节点标识设置为7位,如此,可以同时支撑128台服务器同时对标识生成,且同一时间戳下最多可以生成8个批次的标识。
[0125] 步骤310,服务器根据第二时间戳、第三批次号和第三自增数生成第二标识。
[0126] 第三批次号被设置为初始值,第三自增数也被设置为初始值;可选地,服务器对第二时间戳、第三批次号、节点标识和第三自增数拼接组合,生成第二标识。
[0127] 综上所述,本实施例提供的分布式系统中的标识生成方法,通过获取校准后的系统时间和校准前的最大时间戳,比较校准后的系统时间和校准前的最大时间戳;当校准后的系统时间大于校准前的最大时间戳时,分布式节点根据校准后的系统时间实时生成第一时间戳,根据第一时间戳和第一批次号生成第一标识;当校准后的系统时间小于校准前的最大时间戳时,表示发生了时间回拨,分布式节点根据校准后的系统时间实时生成第二时间戳;当分布式系统中存在校准前的第二时间戳时,将校准前的第二时间戳的最大批次号递增得,到第二批次号,根据第二时间戳和第二批次号生成第二标识。
[0128] 该分布式系统中的标识生成方法,在标识中增加了批次号,采用不同的批次号来区分在同一时间戳下时间回拨前和时间回拨后生成的标识,使得在标识生成的过程中,即便出现时间回拨的现象,分布式节点仍可以继续对标识进行生成,不会出现重复标识,能够保证生成的标识的唯一性。
[0129] 其次,若同一时刻下需要生成大量的标识,也可以采用批次号来实现,比如,一个分布式节点中,一个12位的自增数可以对应生成1024个标识,若加入批次阈值为n的批次号,n为正整数,则一个分布式节点中,可以在同一时间戳下生成n倍的1024个标识,能够更好的满足业务需求。
[0130] 在高并发业务请求的场景中,由于机器性能问题,可能会出现等待问题,不能为业务数据即时的提供标识生成服务,因此,本申请提供的分布式系统中的标识生成方法中还采用了预先生成策略,用以生成第一标识和第二标识。以预先生成第一标识为例进行说明,如下:
[0131] 1)服务器对第一时间戳、第一批次号和第一自增数进行组合,周期性对第一标识进行批量生成。
[0132] 其中,第一自增数是一个具有初始值,且以恒定速率增长的整数值;可选地,上述恒定速率是指分布式节点对标识的生成速率,比如,服务器每一毫秒生成1024个标识,在这个一毫秒内,第一自增数从0增加至1023。
[0133] 服务器对第一时间戳、第一批次号和第一自增数进行顺序拼接,第一自增数从初始值开始,每增加一个j生成一个第一标识,其中,包括初始值对应的第一标识,j为正整数;周期性对第一标识进行批量生成,比如,服务器每隔两毫秒生成一批第一标识,每一批第一标识可以包括至少两个。
[0134] 2)服务器将第一标识存储至标识池中。
[0135] 服务器中设置有标识池,该标识池用于存储待使用的第一标识。服务器在生成第二标识后预先存储至标识池中。需要说明的是,标识池中预先存储的第一标识在有需求的情况下被优先使用,如步骤3)。
[0136] 3)在接收到分布式节点的业务数据的标识生成请求时,服务器优先从标识池中获取第一标识。
[0137] 标识生成请求用于请求分布式节点为业务数据生成唯一标识,并进行存储;服务器在接收到上述标识生成请求之后,优先从标识池中获取第一标识,将第一标识作为业务数据的唯一标识。
[0138] 需要说明的是,标识池还用于存储待使用的第二标识,也就是说,服务器预先生成的第一标识和第二标识均存储至标识池,在接收到业务数据的标识生成请求时,分布式节点从标识池中获取第一标识或者第二标识作为业务数据的唯一标识。
[0139] 示意性的,如图5,示出了一种可选的业务数据的标识生成系统的结构示意图,分布式节点中包括了业务系统31、标识池32、过程数据提供模块33、标识生成器34和时间触发器35。其中,时间触发器35向标识生成器34发出一个激励信号,触发标识生成器34对第一标识和/或第二标识的生成。在生成标识的过程中,标识生成器34从过程数据提供模块33中获取过程数据,过程数据包括时间戳和批次号,还可以包括分布式节点的节点标识和自增数;标识生成器34根据过程数据周期性生成批量的第一标识和/或第二标识;标识生成器34还将生成的第一标识和/或第二标识存储至标识池32中,等待业务系统31使用。业务系统31在为业务数据生成标识时,从标识池32中获取第一标识或第二标识作为该业务数据的唯一标识。若标识池32中不存在第一标识和/或第二标识,则等待第一标识和/或第二标识的生成。
[0140] 综上所述,本实施例提供的分布式系统中的标识生成方法,通过对标识的预先存储,能够源源不断的为业务数据的标识生成提供唯一标识,解决了由于机器性能出现的等待问题,尤其对于突发性的请求,能够即时的响应。
[0141] 比如,现有的标识生成算法在突发的高并发请求下,限于机器性能,可能无法及时响应请求,进而生成标识,引发等待的问题。示意性的,在双11场景下,限于机器性能,对电商平台上的高并发请求会出现无法及时响应,从而基于标识生成订单的问题,严重时甚至会造成服务器的瘫痪。而本实施例提供的分布式系统的标识生成方法,在服务器中周期性的批量生成标识,并在缓冲区中预先存储,当出现高并发请求时,能够通过缓冲区中预先存储的标识满足当前对标识的消耗,或者满足当前对标识的部分消耗,形成一个缓冲阶段,使机器能够及时的补充缓冲区内存储的标识,从而避免等待问题,提升了系统的稳定性和性能。
[0142] 在一些实施例中,若分布式节点对系统时间进行校准后,校准后的系统时间仍等于校准前的最大时间戳,分布式节点在此刻生成标识采用校准前的最大时间戳,示意性的,基于图3,增加步骤311至步骤312,如图6,步骤如下:
[0143] 步骤311,服务器将校准前的最大时间戳对应的批次号递增,得到第四批次号。
[0144] 当校准后的系统时间等于校准前的最大时间戳时,表示原系统时间与时间中心提供的校准时间一致,校准前的最大时间戳即为当前时间戳。若服务器在校准前正在使用当前时间戳生成第一标识,则校准后服务器仍使用当前时间戳生成第一标识。
[0145] 由于服务器可能在时间校准前已经生成了k批第一标识,k为等于大于0的整数,因此,服务器从已经生成的第一标识中确定出当前时间戳对应的最大批次号,将校准前的最大时间戳对应的最大批次号递增,得到第四批次号。其中,当前时间戳对应的最大批次号可以为初始批次号。
[0146] 需要说明的是,服务器可能在时间校准前未生成当前时间戳对应的第一标识,则服务器可以直接采用初始批次号生成第一标识。
[0147] 可选地,若服务器中已经存在当前时间戳对应的第一标识,上述第一标识中还包括当前时间戳的最大批次号对应的第四自增数;服务器还判断当前时间戳的最大批次号对应的第四自增数是否等于自增数阈值;若当前时间戳的最大批次号对应的第四自增数等于自增数阈值时,服务器执行将校准前的最大时间戳对应的最大批次号递增,得到第四批次号的步骤。其中,由于自增数占用的比特位有限,因此,自增数存在一个上限,即存在一个自增数阈值。
[0148] 可选地,若当前时间戳的最大批次号对应的第四自增数小于自增数阈值时,服务器根据校准前的最大时间戳、校准前的最大时间戳对应的最大批次号和第四自增数生成第一标识。也就是说,服务器在当前时间戳的最大批次号对应的第四自增数还未达到上限时,仍基于当前时间戳的最大批次号继续生成第一标识。
[0149] 步骤312,服务器根据校准前的最大时间戳、第四批次号和第一自增数生成第一标识。
[0150] 示意性的,分布式节点对校准前的最大时间戳、第四批次号、分布式节点的节点标识和第一自增数的比特位进行拼接,得到第一标识,更详细的描述请参考图3的对应描述,在此不再加以赘述。
[0151] 综上所述,本实施例提供的分布式系统的标识生成方法,在标识中设置了批次,通过标识中的批次和自增数的增加逻辑能够在同一时间戳下生成更多的唯一标识,为业务系统提供充足的标识作为业务数据的唯一标识,能够避免同一时刻下业务数据过多,不能及时生成业务数据的标识,造成长时间等待的问题,标识提供的即时性能够提高用户体验。
[0152] 以下为本申请的装置实施例,对于装置实施例中未详细描述的细节,可以结合参考上述方法实施例中相应的记载,本文不再赘述。
[0153] 请参考图7,示出了本申请的一个示例性实施例提供的分布式系统中的标识生成装置的结构示意图。该装置可以通过软件、硬件或者两者的结合实现成为终端的全部或一部分,该装置为分布式系统中的分布式节点,该装置包括:
[0154] 生成模块401,用于根据分布式节点中的系统时间实时生成第一时间戳;
[0155] 获取模块402,用于基于第一时间戳获取第一批次号和第一自增数;第一批次号用于对第一时间戳下生成的标识的批次进行标记;第一自增数是以恒定速率增长的整数,第一自增数用于在第一时间戳的第一批次号下生成若干个标识;
[0156] 生成模块401,用于根据第一时间戳、第一批次号和第一自增数生成第一标识,第一标识用于作为业务数据的唯一标识。
[0157] 在一些实施例中,获取模块402,包括:
[0158] 获取子模块4021,用于当分布式节点中存在第一时间戳时,获取第一时间戳对应的最大批次号;
[0159] 确定子模块4022,用于当第一时间戳对应的最大批次号小于第一批次阈值时,将第一时间戳对应的最大批次号加x得到第一批次号,对应的将第一初始值赋值给第一自增数;其中,x为预设值。
[0160] 在一些实施例中,
[0161] 获取子模块4021,用于获取第一时间戳的最大批次号对应的自增数;
[0162] 确定子模块4022,用于当第一时间戳的最大批次号对应的自增数等于自增数阈值时,执行当第一时间戳对应的最大批次号小于第一批次阈值时,将第一时间戳对应的最大批次号加x得到第一批次号的步骤。
[0163] 在一些实施例中,
[0164] 获取子模块4021,用于获取第一时间戳的最大批次号对应的自增数;
[0165] 确定子模块4022,用于当第一时间戳的最大批次号对应的自增数小于自增数阈值时,将第一时间戳的最大批次号确定为第一批次号,并将第一时间戳的最大批次号对应的自增数确定为第一自增数。
[0166] 在一些实施例中,
[0167] 生成模块401,用于对第一时间戳、第一批次号和第一自增数进行拼接组合,周期性对第一标识进行批量生成;将第一标识存储至标识池中;
[0168] 获取模块402,还用于在接收到分布式节点的业务数据的标识生成请求时,优先从标识池中获取第一标识。
[0169] 在一些实施例中,系统时间为校准后的系统时间,校准后的系统时间是根据时间中心提供的时间数据进行周期性校准得到的时间;
[0170] 获取模块402,用于获取校准后的系统时间和校准前的最大时间戳,校准前的最大时间戳是分布式系统中已生成标识中包括的最大时间戳;
[0171] 生成模块401,用于当校准后的系统时间大于校准前的最大时间戳时,根据校准后的系统时间实时生成第一时间戳。
[0172] 在一些实施例中,系统时间为校准后的系统时间,校准后的系统时间是根据时间中心提供的时间数据进行周期性校准得到的时间;
[0173] 获取模块402,用于获取校准后的系统时间和校准前的最大时间戳,校准前的最大时间戳是分布式系统中已生成标识中包括的最大时间戳;
[0174] 生成模块401,用于当校准后的系统时间小于校准前的最大时间戳时,根据校准后的系统时间实时生成第二时间戳;
[0175] 获取模块402,用于当分布式节点中存在第二时间戳时,将第二时间戳对应的最大批次号递增,得到第二批次号,并获取第二自增数;
[0176] 生成模块401,用于根据第二时间戳、第二批次号和第二自增数生成第二标识。
[0177] 在一些实施例中,
[0178] 确定子模块4022,用于当第二时间戳对应的最大批次号小于第二批次阈值时,将第二时间戳对应的最大批次号加y得到第二批次号,对应的将第二初始值赋值给第二自增数,其中,y为预设值。
[0179] 综上所述,本实施例提供的分布式系统中的标识生成装置,根据分布式节点中的系统时间实时生成第一时间戳;基于第一时间戳获取第一批次号和第一自增数;第一批次号用于对第一时间戳下生成的标识的批次进行标记;第一自增数是以恒定速率增长的整数,第一自增数用于在第一时间戳的第一批次号下生成若干个标识;根据第一时间戳、第一批次号和第一自增数生成第一标识,第一标识用于作为业务数据的唯一标识。该方法是在标识中增加了批次号;基于一个时间戳生成标识的过程中,若自增数达到上限,可以通过批次号的递增继续生成标识。也就是说,通过划分批次可以生成数量更多的标识,在高并发业务请求的场景中,可以为大量的业务数据提供相应的标识生成服务,满足业务系统对标识的大量需求,避免由于生成标识数量不足而出现的等待问题。
[0180] 该分布式系统中的标识生成装置,还采用不同的批次号来区分在同一时间戳下时间回拨前和时间回拨后生成的标识,使得在标识生成的过程中,即便出现时间回拨的现象,该装置仍可以继续对标识进行生成,不会出现重复标识,能够保证生成的标识的唯一性。
[0181] 其次,若同一时刻下需要生成大量的标识,也可以采用批次号来实现,比如,一个分布式节点中,一个12位的自增数可以对应生成1024个标识,若加入批次阈值为n的批次号,n为正整数,则一个分布式节点中,可以在同一时间戳下生成n倍的1024个标识,能够更好的满足业务需求。
[0182] 请参考图8,示出了本申请一个示例性实施例提供的服务器的结构示意图。该服务器为分布式系统100中的任意一个分布式节点,用于执行上述可选实施例中的分布式系统中的标识生成方法,具体来讲:
[0183] 服务器500包括中央处理单元(CPU)501、包括随机存取存储器(RAM)502和只读存储器(ROM)503的系统存储器504,以及连接系统存储器504和中央处理单元501的系统总线505。服务器500还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)506,和用于存储操作系统513、应用程序514和其他程序模块515的大容量存储设备
507。
[0184] 基本输入/输出系统506包括有用于显示信息的显示器508和用于用户输入信息的诸如鼠标、键盘之类的输入设备509。其中显示器508和输入设备509都通过连接到系统总线505的输入输出控制器510连接到中央处理单元501。基本输入/输出系统506还可以包括输入输出控制器510以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器510还提供输出到显示屏、打印机或其他类型的输出设备。
[0185] 大容量存储设备507通过连接到系统总线505的大容量存储控制器(未示出)连接到中央处理单元501。大容量存储设备507及其相关联的计算机可读介质为服务器500提供非易失性存储。也就是说,大容量存储设备507可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
[0186] 不失一般性,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知计算机存储介质不局限于上述几种。上述的系统存储器504和大容量存储设备507可以统称为存储器。
[0187] 根据本申请的各种实施例,服务器500还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器500可以通过连接在系统总线505上的网络接口单元511连接到网络512,或者说,也可以使用网络接口单元511来连接到其他类型的网络或远程计算机系统(未示出)。
[0188] 上述存储器还包括一个或者一个以上的程序,一个或者一个以上程序存储于存储器中,被配置由CPU执行。
[0189] 本申请还提供一种分布式系统中的分布式节点,该分布式节点包括:处理器和存储器,该存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现上述各方法实施例提供的分布式系统中的标识生成方法。
[0190] 本申请还提供一种计算机可读存储介质,该计算机可读存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行以实现上述各方法实施例提供的分布式系统中的标识生成方法。
[0191] 应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
[0192] 本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0193] 以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。