解决时钟回拨问题的方法和装置与流程

文档序号:27203315发布日期:2021-11-03 13:57阅读:1098来源:国知局
解决时钟回拨问题的方法和装置与流程

1.本公开涉及计算机技术领域,尤其涉及一种解决时钟回拨问题的方法和装置。


背景技术:

2.雪花算法生成规则依赖时间戳,这样由于时间校准,以及其他因素,可能导致服务器时间回退,如果恰巧回退前生成过一些id,而时间回退后,生成的id就有可能重复。现有技术中对于此问题并没有给出明确的解决方案,而是简单的抛错处理,这样会造成在时间被追回之前的这段时间服务不可用,导致交易失败,用户体验极其不好。


技术实现要素:

3.本公开提供一种解决时钟回拨问题的方法和装置,用以解决现有技术中无法处理时间回退已生成的id的缺陷,实现解决服务器时钟回退服务不可用问题。
4.第一方面,本公开提供一种解决时钟回拨问题的方法,包括:
5.接收业务请求并生成分布式唯一标识,更新自身业务流程实例标识;
6.获取所述业务的第一服务器时间,并判断所述第一服务器时间是否存在时钟回退;
7.若判断所述第一服务器时间不存在时钟回退,则继续以不断更新的所述自身业务流程实例标识为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间;
8.若判断所述第一服务器时间存在时钟回退,以备份业务流程实例标识中的一个备份业务流程实例标识及其对应的最新时间为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间。
9.根据本公开提供的解决时钟回拨问题的方法,其中,在所述接收业务生成的分布式唯一标识之前,还包括:
10.设置所述业务的备份数量;
11.基于所述备份数量分配所述业务的自身业务流程实例标识和每个备份的业务流程实例标识;
12.初始化所述业务的所述自身业务流程实例标识、所述每个备份业务流程实例标识以及与所述每个备份业务流程实例标识对应的最新时间,其中最新时间的初始值为0毫秒。
13.根据本公开提供的解决时钟回拨问题的方法,其中,在所述选择所述备份业务流程实例标识中的一个备份业务流程实例标识以及对应的最新时间为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间之后,还包括:
14.接收所述业务的第二服务器时间,并判断所述第二服务器时间是否存在时钟回退;
15.若判断所述第二服务器时间不存在时钟回退,则继续以所述被选择的一个备份业务流程实例标识为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间;
16.若判断所述第二服务器时间存在时钟回退,则从所述更新后的自身业务流程实例
标识和其他备份业务流程实例标识中选择一个业务流程实例标识为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间。
17.根据本公开提供的解决时钟回拨问题的方法,其中,所述若判断所述第一服务器时间存在时钟回退,以备份业务流程实例标识中的一个备份业务流程实例标识及其对应的最新时间为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间,具体包括:
18.确定时钟回退的时间;
19.确定每个所述备份业务流程实例标识中对应的最新时间;
20.将所述时钟回退的时间与所述每份所述备份业务流程实例标识中对应的最新时间相比较,判断所述时钟回退的时间是否不小于每个所述备份业务流程实例标识中对应的最新时间;
21.筛选出时钟回退的时间不小于备份业务流程实例标识中对应的最新时间的第一个备份业务流程实例标识;
22.将所述第一个备份业务流程实例标识作为被选择的备份业务流程实例标识并用来继续生成分布式唯一标识,同时更新最新时间;
23.其中,第一个备份业务流程实例标识是按照备份业务流程实例标识的顺序依次与所述时钟回退的时间相比较获得。
24.根据本公开提供的解决时钟回拨问题的方法,其中,所述若判断所述第二服务器时间存在时钟回退,则从所述更新后的自身业务流程实例标识和其他备份业务流程实例标识中选择一个业务流程实例标识为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间,具体包括:
25.确定时钟回退的时间;
26.确定所述自身业务流程实例标识和所述其他备份业务流程实例标识中对应的最新时间;
27.将所述时钟回退的时间与所述自身业务流程实例标识和所述其他备份业务流程实例标识中对应的最新时间相比较,判断所述时钟回退的时间是否不小于所述自身业务流程实例标识和所述其他备份业务流程实例标识中对应的最新时间;
28.筛选出时钟回退的时间不小于所述自身业务流程实例标识和所述其他备份业务流程实例标识中对应的最新时间的第一个业务流程实例标识;
29.将所述第一个业务流程实例标识作为被选择的业务流程实例标识并用来继续生成分布式唯一标识,同时更新最新时间;
30.其中,第一个业务流程实例标识是按照所述自身业务流程实例标识和所述其他备份业务流程实例标识中顺序依次与所述时钟回退的时间相比较获得。
31.根据本公开提供的解决时钟回拨问题的方法,其中,所述接收所述业务的服务器时间,并判断所述服务器时间是否存在时钟回退的方法,具体为:
32.获取业务的服务器时间;
33.将所述业务的服务器时间与当前时间线相比较,判断是否存在时钟回退;其中,所述当前时间线是预先设置,且所述当前时间线的时间进度随着本地时钟的时间推进;
34.若判断所述服务器时间迟于当前时间线的当前时间,则确定存在时钟回退;
35.若判断所述服务器时间不迟于当前时间线的当前时间,则确定不存在时钟回退。
36.第二方面,本公开提供一种解决时钟回拨问题的装置,包括:
37.第一处理模块,用于接收业务请求并生成分布式唯一标识,更新自身业务流程实例标识;
38.第二处理模块,用于获取所述业务的第一服务器时间,并判断所述第一服务器时间是否存在时钟回退;
39.第三处理模块,用于若判断所述第一服务器时间不存在时钟回退,则继续以不断更新的所述自身业务流程实例标识为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间;
40.第四处理模块,用于若判断所述第一服务器时间存在时钟回退,以备份业务流程实例标识中的一个备份业务流程实例标识及其对应的最新时间为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间。
41.根据本公开提供的解决时钟回拨问题的装置,其中,所述装置还包括预备处理模块,所述预备处理模块与所述第一模块相连且在第一模块之前,所述预备处理模块具体用于:
42.设置所述业务的备份数量;
43.基于所述备份数量分配所述业务的自身业务流程实例标识和每个备份的业务流程实例标识;
44.初始化所述业务的所述自身业务流程实例标识、所述每个备份业务流程实例标识以及与所述每个备份业务流程实例标识对应的最新时间,其中最新时间的初始值为0毫秒。
45.本公开还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述解决时钟回拨问题方法的步骤。
46.本公开还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述解决时钟回拨问题方法的步骤。
47.本公开提供的解决时钟回拨问题的方法和装置,通过接收业务请求并生成分布式唯一标识,并更新自身业务流程实例标识。此外,获取业务的第一服务器时间,此处的第一服务时间是指生成的最新的标识所对应的时间戳显示的时间,并依据这一时间判断所述第一服务器时间是否存在时钟回退;若判断所述第一服务器时间不存在时钟回退,则继续以不断更新的所述自身业务流程实例标识为基础,接收所述业务生成的分布式唯一标识,并更新最新时间;若判断所述第一服务器时间存在时钟回退,则选择所述备份业务流程实例标识中的一个备份业务流程实例标识以及对应的最新时间为基础,接收所述业务生成的分布式唯一标识,并更新最新时间,从而避免简单地抛错处理,解决服务器时钟回退服务不可用问题。
附图说明
48.为了更清楚地说明本公开或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
49.图1是本公开提供的解决时钟回拨问题的方法的流程示意图;
50.图2是本公开提供的雪花算法64字节数据的结构示意图;
51.图3是本公开提供的解决时钟回拨问题的装置的结构示意图;
52.图4是本公开提供的电子设备的结构示意图。
具体实施方式
53.为使本公开的目的、技术方案和优点更加清楚,下面将结合本公开中的附图,对本公开中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
54.下面结合图1

图2描述本公开实施例提供一种解决时钟回拨问题的方法,包括:
55.步骤100:接收业务请求并生成分布式唯一标识,更新自身业务流程实例标识;
56.具体地,工作流程引擎的workid,也叫流程实例的id,是一个int64类型的,自动增长的数据类型。一个workid可会贯穿整个流程的生命周期,从workid创建开始,到保存草稿,到启动流程,到发送到下一个节点,到退回,会签等等到流程回滚,整个生命周期,都贯穿这个workid,有workid,可以获得任何相关的数据。workid的关联着流程引擎数据表与流程业务数据表。一个流程对应一个业务表,也可以多个流程对应同一个业务表,业务表名可以自定义。
57.如图2所示,雪花算法是使用一个64bit的long型的数字作为全局唯一id,且id引入了时间戳,基本上是保持自增的,并且,这64个bit中,其中1个bit是不用的,然后用其中的41个bit作为毫秒数,用10bit作为工作机器id,12bit作为序列号。雪花算法给workerid预留了10位,即workid的取值范围为[0,1023]。
[0058]
大部分情况下生产环境不太可能需要部署1024个分布式id服务,所以可以根据自身系统的最大部署机器数将workerid取值范围缩小。继而,将工作机器的id更新自身业务流程实例标识workid的内容,即接受到业务请求并生成分布式唯一标识id。
[0059]
步骤200:获取所述业务的第一服务器时间,并判断所述第一服务器时间是否存在时钟回退;
[0060]
具体地,所述第一服务器时间是业务进程中生成的最新的workid所对应的时间戳表示的时间。通过判断第一服务器的时间是否存在比较的标准时间,从而判断是否存在时钟回退。其中时钟回退是由于时间校准,或者其他因素导致的。
[0061]
步骤300:若判断所述第一服务器时间不存在时钟回退,则继续以不断更新的所述自身业务流程实例标识为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间;
[0062]
具体地,在判断第一服务器不存在时钟回退的情况下,即表明生成的workid不存在重叠情形,即不存在标识id重复结果。在不存在重复的情况下,在自身workid的基础上继续生成分布式唯一标识id,同时更新自身业务流程实例标识workid对应的lasttime。
[0063]
步骤400:若判断所述第一服务器时间存在时钟回退,以备份业务流程实例标识中的一个备份业务流程实例标识及其对应的最新时间为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间。
[0064]
具体地,在判断第一服务器时间存在时钟回退的情况下,表明生成的workid存在重复情形,在存在重复的情况下,分布式唯一的地址就不能够得到保证,这样的地址就不能被利用,产生相应的风险和损失。
[0065]
因此,在本法明实施例中在存在时间回退的情况下,需要找到在备份的workid中找到相应的能够作为继续生成分布式唯一性id的基础的workid。并且,在选定相应的备份workid之后,生成相应的id,则还更具不断生成的id,更新相应的被选定的备份workid所对应的lasttime。
[0066]
举例来说,开始自身workid和6个备份workid分别为{0:0l,128:0l,256:0l,384:0l,512:0l,640:0l,768:0l,896:0l}
[0067]
第一次5分01秒workid为0生成的序列
[0068]
{0:5分01秒,128:0l,256:0l,384:0l,512:0l,640:0l,768:0l,896:0l}
[0069]
继而发现时钟回退到4分58秒,找到lasttime比4分58秒小的备份workid,找到了128生成序列号,变成
[0070]
{0:5分01秒,128:4分58秒,256:0l,384:0l,512:0l,640:0l,768:0l,896:0l}
[0071]
则将workid为128的分布式唯一id为基础继续进行相应的业务。
[0072]
本公开实施例提供的解决时钟回拨问题的方法,通过接收业务请求并生成分布式唯一标识id,并更新自身业务流程实例标识workid。此外,获取业务的第一服务器时间,此处的第一服务时间是指生成的最新的标识id所对应的时间戳显示的时间,并依据这一时间判断所述第一服务器时间是否存在时钟回退;若判断所述第一服务器时间不存在时钟回退,则继续以不断更新的所述自身workid为基础,接收所述业务生成的分布式唯一标识id,并更新lasttime;若判断所述第一服务器时间存在时钟回退,则选择所述备份workid中的一个备份workid以及对应的lasttime为基础,接收所述业务生成的分布式唯一id,并更新lasttime,从而避免简单地抛错处理,解决服务器时钟回退服务不可用问题。
[0073]
根据本公开提供的解决时钟回拨问题的方法,其中,在所述接收业务生成的分布式唯一标识之前,还包括:
[0074]
设置所述业务的备份数量;
[0075]
基于所述备份数量分配所述业务的自身业务流程实例标识和每个备份的业务流程实例标识;
[0076]
初始化所述业务的所述自身业务流程实例标识、所述每个备份业务流程实例标识以及与所述每个备份业务流程实例标识对应的最新时间,其中最新时间的初始值为0毫秒。
[0077]
具体地,在分配自身workid和备份workid之前需要决定对每一项业务分配多少备份。由于雪花算法的64bit的long数字中表示工作机器的id的字节数为10,即最多能够有1024个workid。因此,每一项业务最多能够分配的备份数最大可取值为1024除以业务的数量减去1,假设取值为m。
[0078]
则,对于一项业务的备份数量可以是不大于m的自然数中的任何一个值。
[0079]
另一方面,上述的表述是对不同的业务分配相同的备份workid,当然,对于不同的业务也可以分配不同数量的workid。在本公开实施例中对具体的分配备份workid的方式不予限制。
[0080]
在确定一项业务对应的备份数量之后,分配不同所述业务自身的workid和每个备
份的workid。
[0081]
举例来说,假设系统设置7个备份,则最多可以部署1024/(7+1)=128个服务,即workid的取值范围缩小为[0,127],则[128,1023]这个范围作为备份用。
[0082]
生成workid公式:当前workerid+(循环备份个数*workid最大值)。比如当前服务器的workerid为0,循环备份个数7(循环执行公式,从下标为0开始),workid最大值为128。生成workid时是生成所有的workid。所以,服务0的所有workid,包括备份workid,依次为:
[0083]
0+(0*128)=0
[0084]
0+(1*128)=128
[0085]
0+(2*128)=256
[0086]
0+(3*128)=384
[0087]
0+(4*128)=512
[0088]
0+(5*128)=640
[0089]
0+(6*128)=768
[0090]
0+(7*128)=896
[0091]
服务1的所有workid,包括备份workid,依次为:
[0092]
1+(0*128)=1
[0093]
1+(1*128)=129
[0094]
1+(2*128)=257
[0095]
1+(3*128)=385
[0096]
1+(4*128)=513
[0097]
1+(5*128)=641
[0098]
1+(6*128)=769
[0099]
1+(7*128)=897
[0100]
服务2的所有workid,包括备份workid,依次为:
[0101]
2+(0*128)=2
[0102]
2+(1*128)=130
[0103]
2+(2*128)=258
[0104]
2+(3*128)=386
[0105]
2+(4*128)=514
[0106]
2+(5*128)=642
[0107]
2+(6*128)=770
[0108]
2+(7*128)=898
[0109]
……
[0110]
即各个服务器的workid可以表示为:
[0111]
服务0的备份workid为128、256、384、512、640、768、896
[0112]
服务1的备份workid为129、257、385、513、641、769、897
[0113]
服务2的备份workid为130、258、386、514、642、770、898
[0114]
以此类推
……
[0115]
备份的workid数量越多,避免时钟影响的能力越强,但是可部署的服务越少,要根
据自己的业务情况去设置备份数量。
[0116]
上述分配方式是以对不同的业务进行均匀分配备份workid的情形,而对于非均匀分配备份workid的方式本公开实施例不予赘述。
[0117]
在完成自身workid和备份workid之后,对其进行初始化,并将各个备份workid所对应的lasttime初始化为0。
[0118]
根据本公开提供的解决时钟回拨问题的方法,其中,在所述选择所述备份业务流程实例标识中的一个备份业务流程实例标识以及对应的最新时间为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间之后,还包括:
[0119]
接收所述业务的第二服务器时间,并判断所述第二服务器时间是否存在时钟回退;
[0120]
若判断所述第二服务器时间不存在时钟回退,则继续以所述被选择的一个备份业务流程实例标识为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间;
[0121]
若判断所述第二服务器时间存在时钟回退,则从所述更新后的自身业务流程实例标识和其他备份业务流程实例标识中选择一个业务流程实例标识为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间。
[0122]
具体地,在出现一次时钟回退之后,选择一个备份的workid为基础继续生成相应的分布式唯一id。在以备份的workid生成相应的分布式唯一id之后,获取第二服务器时间,所述第二服务器时间是业务进程中生成的最新的workid所对应的时间戳表示的时间。通过判断第二服务器的时间是否存在比较的标准时间,从而判断是否存在时钟回退。
[0123]
在判断第二服务器不存在时钟回退的情况下,即表明生成的workid不存在重叠情形,即不存在标识id重复结果。在不存在重复的情况下,在选定的备份的workid的基础上继续生成分布式唯一标识id,同时被选定的备份workid所对应的lasttime。
[0124]
在判断第二服务器时间存在时钟回退的情况下,表明生成的workid存在重复情形,在存在重复的情况下,分布式唯一的地址就不能够得到保证,这样的地址就不能被利用,产生相应的风险和损失。需要在身业务流程实例标识workid和其他备份workid中选择一个workid为基础,生成分布式唯一id。
[0125]
举例来说,接上文的例子,在选择workid为128作为分布式唯一id基础之后通过128正常生成到9分10秒。
[0126]
{0:5分01秒,128:9分10秒,256:0l,384:0l,512:0l,640:0l,768:0l,896:0l}
[0127]
又遇到时钟回退到9分08秒,找到lasttime比9分08秒小的备份workid,找到了0去生成序列号,变成:
[0128]
{0:9分08秒,128:9分10秒,256:0l,384:0l,512:0l,640:0l,768:0l,896:0l}
[0129]
之后一直是通过0正常生成到30分10秒
[0130]
{0:30分10秒,128:9分10秒,256:0l,384:0l,512:0l,640:0l,768:0l,896:0l}。
[0131]
根据本公开提供的解决时钟回拨问题的方法,其中,所述若判断所述第一服务器时间存在时钟回退,以备份业务流程实例标识中的一个备份业务流程实例标识及其对应的最新时间为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间,具体包括:
[0132]
确定时钟回退的时间;
[0133]
确定每个所述备份业务流程实例标识中对应的最新时间;
[0134]
将所述时钟回退的时间与所述每份所述备份业务流程实例标识中对应的最新时间相比较,判断所述时钟回退的时间是否不小于每个所述备份业务流程实例标识中对应的最新时间;
[0135]
筛选出时钟回退的时间不小于备份业务流程实例标识中对应的最新时间的第一个备份业务流程实例标识;
[0136]
将所述第一个备份业务流程实例标识作为被选择的备份业务流程实例标识并用来继续生成分布式唯一标识,同时更新最新时间;
[0137]
其中,第一个备份业务流程实例标识是按照备份业务流程实例标识的顺序依次与所述时钟回退的时间相比较获得。
[0138]
具体地,由于业务的不断进行,生成的分布式唯一标识不断产生,并自身业务流程实例标识缓存中存储。
[0139]
在存在时钟回退的情形下,要避免时间戳相同导致的分布式唯一标识的重复对唯一性造成的影响,需要找到存储的workid所对应的lasttime比时钟回退的时间值小的备份workid,并以这个备份的workid为基础进行后续的分布式唯一id的生成和存储。
[0140]
假设存在7个备份workid,此时只有五个备份workid中存储有分布式唯一标识。并且每一个备份workid中的标识所对应的中的时间戳的最大值分别是8分3秒,6分12秒,5分01秒,3分10秒和1分43秒,0秒,0秒。而此时时钟回退到6分48秒,通过上述lasttime与6分48秒相比较,可以获得6分12秒,5分01秒,3分10秒和1分43秒,0秒,0秒等比6分48秒小。
[0141]
进而,比较6分12秒,5分01秒,3分10秒和1分43秒,0秒,0秒这几个lasttime,获得6分12秒是第一个时间比6分48秒的备份workid所对应的时间,然后将6分12秒对应的workid为256的备份workid作为继续生成分布式唯一id的基础。并更新备份workid256所对应的lasttime。同样以上文为例,上文中各个备份workid分别对应128、256、384、512、640、768、896,即在比较的过程中按照从左向右的顺序依次比较,找到第一个比时钟回退的时间小或者相等的备份workid,并以之为基础进行后续的分布式唯一id的生成。
[0142]
根据本公开提供的解决时钟回拨问题的方法,其中,所述若判断所述第二服务器时间存在时钟回退,则从所述更新后的自身业务流程实例标识和其他备份业务流程实例标识中选择一个业务流程实例标识为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间,具体包括:
[0143]
确定时钟回退的时间;
[0144]
确定所述自身业务流程实例标识和所述其他备份业务流程实例标识中对应的最新时间;
[0145]
将所述时钟回退的时间与所述自身业务流程实例标识和所述其他备份业务流程实例标识中对应的最新时间相比较,判断所述时钟回退的时间是否不小于所述自身业务流程实例标识和所述其他备份业务流程实例标识中对应的最新时间;
[0146]
筛选出时钟回退的时间不小于所述自身业务流程实例标识和所述其他备份业务流程实例标识中对应的最新时间的第一个业务流程实例标识;
[0147]
将所述第一个业务流程实例标识作为被选择的业务流程实例标识并用来继续生成分布式唯一标识,同时更新最新时间;
[0148]
其中,第一个业务流程实例标识是按照所述自身业务流程实例标识和所述其他备
份业务流程实例标识中顺序依次与所述时钟回退的时间相比较获得。
[0149]
具体地,与上文中判断的方式一致,其中的差别在于,进行时钟回退的比较的对象是自身业务流程实例标识workid和所述其他备份workid。按照上文中分配的workid可知,自身业务流程实例标识workid为0,排在其他备份workid之前,因此在比较时,相将时钟回退的时间与业务流程实例标识workid对应的lasttime相比较,在依次与其他备份的workid相比较,找到第一个lasttime比时钟回退时间小或者等于的workid。进而,依据找到的workid为基础生成分布式唯一id,并更新lasttime。
[0150]
根据本公开实施例提供的一种解决时钟回拨问题的方法,其中,所述接收所述业务的服务器时间,并判断所述服务器时间是否存在时钟回退的方法,具体为:
[0151]
获取业务的服务器时间;
[0152]
将所述业务的服务器时间与当前时间线相比较,判断是否存在时钟回退;其中,所述当前时间线是预先设置,且所述当前时间线的时间进度随着本地时钟的时间推进;
[0153]
若判断所述服务器时间迟于当前时间线的当前时间,则确定存在时钟回退;
[0154]
若判断所述服务器时间不迟于当前时间线的当前时间,则确定不存在时钟回退。
[0155]
具体地,在判断是否存在时钟回退时,需要将服务器时间与选择的标准进行比较。其中服务器时间与业务生成的最新的分布式唯一id所对应的时间戳时间一致。一旦最新生成的分布式唯一id的时间戳所对应的时间比选择的标准时间要迟,则说明存在时间回退,若不迟于选择的标准时间,则说明不存在时钟延迟。并且,当前时间是事先选择的,并且当前时间线的时间进度随着本地时钟的时间推进,可用来作为判断是否存在时钟回退的标准。
[0156]
参考图3,本公开实施例提供一种解决时钟回拨问题的装置,包括:
[0157]
第一处理模块31,用于接收业务请求并生成分布式唯一标识,更新自身业务流程实例标识;
[0158]
第二处理模块32,用于获取所述业务的第一服务器时间,并判断所述第一服务器时间是否存在时钟回退;
[0159]
第三处理模块33,用于若判断所述第一服务器时间不存在时钟回退,则继续以不断更新的所述自身业务流程实例标识为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间;
[0160]
第四处理模块34,用于若判断所述第一服务器时间存在时钟回退,则选择备份业务流程实例标识以及对应的最新时间为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间。
[0161]
由于本公开实施例提供的装置,可以用于执行上述实施例所述的方法,其工作原理和有益效果类似,故此处不再详述,具体内容可参见上述实施例的介绍。
[0162]
本公开实施例提供的解决时钟回拨问题的装置,通过接收业务请求并生成分布式唯一标识id,并更新自身业务流程实例标识workid。此外,获取业务的第一服务器时间,此处的第一服务时间是指生成的最新的标识id所对应的时间戳显示的时间,并依据这一时间判断所述第一服务器时间是否存在时钟回退;若判断所述第一服务器时间不存在时钟回退,则继续以不断更新的所述自身workid为基础,接收所述业务生成的分布式唯一标识id,并更新lasttime;若判断所述第一服务器时间存在时钟回退,则选择所述备份workid中的
一个备份workid以及对应的lasttime为基础,接收所述业务生成的分布式唯一id,并更新lasttime,从而避免简单地抛错处理,解决服务器时钟回退服务不可用问题。
[0163]
根据本公开实施例提供的一种解决时钟回拨问题的装置,其中,所述装置还包括预备处理模块,所述预备处理模块与所述第一模块相连且在第一模块之前,所述预备处理模块具体用于:
[0164]
设置所述业务的备份数量;
[0165]
基于所述备份数量分配所述业务的自身业务流程实例标识和每个备份的业务流程实例标识;
[0166]
初始化所述业务的所述自身业务流程实例标识、所述每个备份业务流程实例标识以及与所述每个备份业务流程实例标识对应的最新时间,其中最新时间的初始值为0毫秒。
[0167]
根据本公开提实施例供的一种解决时钟回拨问题的装置,其中,所述装置还包括:
[0168]
第五处理模块,用于接收所述业务的第二服务器时间,并判断所述第二服务器时间是否存在时钟回退;
[0169]
第六处理模块,用于若判断所述第二服务器时间不存在时钟回退,则继续以所述被选择的一个备份业务流程实例标识为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间;
[0170]
第七处理模块,若判断所述第二服务器时间存在时钟回退,则从所述更新后的自身业务流程实例标识和其他备份业务流程实例标识中选择一个业务流程实例标识为基础,接收所述业务请求并生成分布式唯一标识,并更新最新时间
[0171]
根据本公开实施例提供的一种解决时钟回拨问题的装置,其中,第二处理模块32,具体用于:
[0172]
获取业务的服务器时间;
[0173]
将所述业务的服务器时间与当前时间线相比较,判断是否存在时钟回退;其中,所述当前时间线是预先设置,且所述当前时间线的时间进度随着本地时钟的时间推进;
[0174]
若判断所述服务器时间迟于当前时间线的当前时间,则确定存在时钟回退;
[0175]
若判断所述服务器时间不迟于当前时间线的当前时间,则确定不存在时钟回退。
[0176]
根据本公开提供的一种解决时钟回拨问题的装置,其中,第四处理模块34,具体用于:
[0177]
确定时钟回退的时间;
[0178]
确定每个所述备份业务流程实例标识中对应的最新时间;
[0179]
将所述时钟回退的时间与所述每份所述备份业务流程实例标识中对应的最新时间相比较,判断所述时钟回退的时间是否不小于每个所述备份业务流程实例标识中对应的最新时间;
[0180]
筛选出时钟回退的时间不小于备份业务流程实例标识中对应的最新时间的第一个备份业务流程实例标识;
[0181]
将所述第一个备份业务流程实例标识作为被选择的备份业务流程实例标识并用来继续生成分布式唯一标识,同时更新最新时间;
[0182]
其中,第一个备份业务流程实例标识是按照备份业务流程实例标识的顺序依次与所述时钟回退的时间相比较获得。
[0183]
根据本公开提供的一种解决时钟回拨问题的方法,其中,第七处理模块,具体用于:
[0184]
确定时钟回退的时间;
[0185]
确定所述自身业务流程实例标识和所述其他备份业务流程实例标识中对应的最新时间;
[0186]
将所述时钟回退的时间与所述自身业务流程实例标识和所述其他备份业务流程实例标识中对应的最新时间相比较,判断所述时钟回退的时间是否不小于所述自身业务流程实例标识和所述其他备份业务流程实例标识中对应的最新时间;
[0187]
筛选出时钟回退的时间不小于所述自身业务流程实例标识和所述其他备份业务流程实例标识中对应的最新时间的第一个业务流程实例标识;
[0188]
将所述第一个业务流程实例标识作为被选择的业务流程实例标识并用来继续生成分布式唯一标识,同时更新最新时间;
[0189]
其中,第一个业务流程实例标识是按照所述自身业务流程实例标识和所述其他备份业务流程实例标识中顺序依次与所述时钟回退的时间相比较获得。
[0190]
图4示例了一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(communications interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行一种解决时钟回拨问题的方法,该方法包括:接收业务生成的分布式唯一标识id,并更新自身业务流程实例标识workid、备份的workid和所述每个备份workid对应的时间最大值lasttime;获取所述业务的第一服务器时间,并判断所述第一服务器时间是否存在时钟回退;若判断所述第一服务器时间不存在时钟回退,则继续以不断更新的所述自身workid为基础,接收所述业务生成的分布式唯一标识id,并更新lasttime;若判断所述第一服务器时间存在时钟回退,则选择所述备份workid中的一个备份workid以及对应的lasttime为基础,接收所述业务生成的分布式唯一id,并更新lasttime。
[0191]
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0192]
另一方面,本公开还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的一种解决时钟回拨问题的方法,该方法包括:接收业务生成的分布式唯一标识id,并更新自身业务流程实例标识workid、备份的workid和所述每个备份workid对应的时间最大值lasttime;获取所述业务的第一服务器时间,并判断所述第一服务器时间是否存在时钟回退;若判断所述第一服务
器时间不存在时钟回退,则继续以不断更新的所述自身workid为基础,接收所述业务生成的分布式唯一标识id,并更新lasttime;若判断所述第一服务器时间存在时钟回退,则选择所述备份workid中的一个备份workid以及对应的lasttime为基础,接收所述业务生成的分布式唯一id,并更新lasttime。
[0193]
又一方面,本公开还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的一种解决时钟回拨问题的方法,该方法包括:接收业务生成的分布式唯一标识id,并更新自身业务流程实例标识workid、备份的workid和所述每个备份workid对应的时间最大值lasttime;获取所述业务的第一服务器时间,并判断所述第一服务器时间是否存在时钟回退;若判断所述第一服务器时间不存在时钟回退,则继续以不断更新的所述自身workid为基础,接收所述业务生成的分布式唯一标识id,并更新lasttime;若判断所述第一服务器时间存在时钟回退,则选择所述备份workid中的一个备份workid以及对应的lasttime为基础,接收所述业务生成的分布式唯一id,并更新lasttime。
[0194]
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0195]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0196]
最后应说明的是:以上实施例仅用以说明本公开的技术方案,而非对其限制;尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1