一种序列值生成方法、装置及系统
技术领域
本申请涉及计算机技术领域,尤其涉及一种序列值生成方法、装置及系统。
背景技术
分布式系统(distributed system)是建立在网络之上的软件系统,该系统由一组(少至几台,多则成千上万台)独立的计算机(设备)以统一的整体提供服务。利用分布式系统,服务能力得到灵活扩展和有效提高。序列,是被排成一列的对象(或事件),这样每个对象不是在其他对象之前,就是在对象之后;单调递增序列就是序列中每个对象都大于等于之前的对象;若每个对象都严格大于之前的对象,这个序列就是严格(单调)递增的,具体地,可以通过序列值的大小进行表示序列。
当前,很多业务场景都需要严格递增序列,比如数据同步业务,需要用一个序列值来标识一条数据,由于数据更新,所以更新后的数据对应的序列值一定要严格大于更新前的数据对应的序列值。分布式系统中包含多台独立设备,每台设备都可能出现不可用的情况(宕机、重启、被替换等,统称宕机),所以分布式系统下需要考虑对局部宕机进行容错,以保证序列值严格递增。
现有技术中,是通过设备标识号保证生成的序列值严格递增。具体地,以设备标识号的大小作为严格递增序列的依据,当一台设备宕机后,通过比该设备标识号大的设备继续执行该设备的任务,由于设备标识号大,那么就可以实现严格递增。但是如果标识号最大的设备宕机,由于无法找到更大标识号的设备,所有就要由其他标识号较小的设备执行该设备的任务,就会导致由于标识号小,破坏原有序列值的有序性。所以现有技术无法保证在分布式系统下,生成的序列值严格递增。
发明内容
本申请实施例提供一种序列值生成方法,用于在设备正常运行状态下,保证生成的序列值严格递增,并且当设备出现宕机时,也能保证生成的序列值严格递增。
本申请实施例提供一种序列值生成装置,用于在设备正常运行状态下,保证生成的序列值严格递增,并且当设备出现宕机时,也能保证生成的序列值严格递增。
本申请实施例提供一种序列值生成系统,用于在设备正常运行状态下,保证生成的序列值严格递增,并且当设备出现宕机时,也能保证生成的序列值严格递增。
本申请实施例采用下述技术方案:
一种序列值生成方法,包括:
当第一设备正常运行时,根据时间戳生成序列值,并将生成的序列值发送到备份记录中;
当第一设备宕机,第二设备从所述备份记录中查找对应所述第一设备发送的最大序列值;
根据所述最大序列值,确定第二设备序列下限值;
在所述第二设备首次生成序列值,且当前时间戳大于所述第二设备序列下限值中包含的时间戳时,根据当前时间戳生成序列值。
优选地,根据时间戳生成序列值,包括:
根据时间戳以及自增序列生成序列值;则
根据当前时间戳生成序列值,包括:
根据当前时间戳以及自增序列生成序列值。
优选地,根据所述最大序列值,确定第二设备序列下限值,包括:
根据大于所述最大序列值中时间戳至少一个时间周期的时间戳,确定第二设备序列下限值。
优选地,所述方法还包括:
将首次生成的序列值发送到备份记录中。
优选地,当第一设备在正常运行状态下,根据时间戳生成序列值,包括:
当第一设备正常运行时,根据时间戳生成候选序列值;
当所述候选序列值不大于第一设备序列上限值,将所述候选序列值确定为序列值。
优选地,将生成的序列值发送到备份记录中,包括:
按照预设时间周期,将生成的序列值发送到备份记录中,并更新第一设备序列上限值。
优选地,更新第一设备序列上限值,包括:
根据大于所述序列值中时间戳至少一个时间周期的时间戳,更新第一设备序列上限值。
优选地,根据时间戳生成序列值,包括:
根据时间戳生成候选序列值;
当所述候选序列值大于第一设备序列下限值,将所述候选序列值确定为序列值,所述第一设备序列下限值为所述第一设备首次接收序列请求时确定的序列值。
一种序列值生成装置,包括:第一设备中的第一生成单元以及第一备份单元,第二设备中的第二查找单元、第二确定单元以及第二生成单元,其中,
所述第一生成单元,当第一设备正常运行时,根据时间戳生成序列值;
所述第一备份单元,将生成的序列值发送到备份记录中;
所述第二查找单元,当第一设备宕机,第二设备从所述备份记录中查找对应所述第一设备发送的最大序列值;
所述第二确定单元,根据所述最大序列值,确定第二设备序列下限值;
所述第二生成单元,在所述第二设备在首次生成序列值时,并确定出当前时间戳大于所述第二设备序列下限值中包含的时间戳时,根据当前时间戳生成序列值。
优选地,所述第一生成单元,
根据时间戳以及自增序列生成序列值;则
所述第二生成单元,
根据当前时间戳以及自增序列生成序列值。
优选地,所述第二确定单元,
根据大于所述最大序列值中时间戳至少一个时间周期的时间戳,确定第二设备序列下限值。
优选地,所述装置还包括:第二备份单元,
将首次生成的序列值发送到备份记录中。
优选地,所述第一生成单元,
当第一设备正常运行时,根据时间戳生成候选序列值;
当所述候选序列值不大于第一设备序列上限值,将所述候选序列值确定为序列值。
优选地,所述第一备份单元,
按照预设时间周期,将生成的序列值发送到备份记录中;
所述装置还包括第一更新单元,
更新第一设备序列上限值。
优选地,所述第一更新单元,
根据大于所述序列值中时间戳至少一个时间周期的时间戳,更新第一设备序列上限值。
优选地,所述第一生成单元,
根据时间戳生成候选序列值;
当所述候选序列值大于第一设备序列下限值,将所述候选序列值确定为序列值,所述第一设备序列下限值为所述第一设备首次接收序列请求时确定的序列值。
一种序列值生成系统,包括:第一设备、第二设备以及备份记录,其中,
所述第一设备,
在正常运行时,根据时间戳生成序列值,并将生成的序列值发送到备份记录中;
所述第二设备,
当第一设备宕机,从所述备份记录中查找对应所述第一设备发送的最大序列值;
根据所述最大序列值,确定第二设备序列下限值;
在所述第二设备首次生成序列值,且当前时间戳大于所述第二设备序列下限值中包含的时间戳时,根据当前时间戳生成序列值;
将首次生成的序列值发送到备份记录中;
所述备份记录,
接收第一设备发送的序列值;响应第二设备的查询请求。
优选地,第一设备,可以根据时间戳以及自增序列生成序列值;
则第二设备,可以根据当前时间戳以及自增序列生成序列值。
优选地,第二设备,可以
根据大于最大序列值中时间戳至少一个时间周期的时间戳,确定第二设备序列下限值。
优选地,第一设备,可以
当正常运行时,根据时间戳生成候选序列值;
当候选序列值不大于第一设备序列上限值,且当候选序列值大于第一设备序列下限值,将候选序列值确定为序列值,第一设备序列下限值为第一设备首次接收序列请求时确定的序列值。
优选地,第一设备,可以
按照预设时间周期,将生成的序列值发送到备份记录中,并更新第一设备序列上限值。
优选地,第一设备,可以
根据大于序列值中时间戳至少一个时间周期的时间戳,更新第一设备序列上限值。
本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:在分布式系统中,当第一设备正常运行时,根据时间戳生成序列值,并进行备份。当第一设备出现宕机,其他设备从备份记录中找到第一设备最后一次备份的最大序列值,将该最大序列值设置为第二设备的下限值,并在首次生成序列值时,以该设备的下限值为准,生成大于该下限值的序列值,并完成接替。通过在正常运行时备份序列值,在其他设备接替时,保证了序列严格递增。此外,还可以通过在正常运行的设备中设定上限值,保证生成的序列值严格递增的同时,提高生成序列值的正确性,并且当设备出现宕机时,也能保证生成的序列值严格递增的同时,降低业务迁移时出现序列冲突的可能性。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为现有技术序列值生成的示意图;
图2为本申请实施例1提供的序列值生成方法的流程示意图;
图3为本申请实施例1提供的序列值生成方法的示意图;
图4为本申请实施例1提供的根据时间戳生成序列值的示意图;
图5为本申请实施例1提供的根据时间戳以及自增序列生成序列值的示意图;
图6为本申请实施例2提供的序列值生成方法的流程示意图;
图7为本申请实施例2提供的序列值生成方法的示意图;
图8为本申请实施例3提供的序列值生成装置的结构图;
图9为本申请实施例4提供的序列值生成系统的结构图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
以下结合附图,详细说明本申请各实施例提供的技术方案。
实施例1
如前所述,很多业务场景都需要严格递增序列,比如收藏夹同步业务,业务服务器需要为每一条收藏夹数据生成序列值,并且要保证为在后时间的收藏夹数据生成的序列值一定要比在先时间的收藏夹数据生成的序列值要大,只有这样才能保证收藏夹同步时数据的完整性。若在后时间的收藏夹数据比在先时间的收藏夹数据对应的序列值小,则会出现数据丢失。由于分布式系统中的设备可能出现不可用情况(宕机、重启、被替换等),所以如何保证生成的序列值严格递增就非常重要。现有技术中,通过时间戳和设备标识号保证生成的序列值严格递增,具体地,时间戳可以保证序列值唯一性,而设备标识号可以保证序列值有序性,如图1所示为分布式系统,包含m个单独的设备,每个设备都有标识号(设备1的标识号为“1”),当接收到序列值生成请求后,根据设备标识号和时间戳生成序列值,比如“10001”中第一位“1”代表设备标识号,后四位“0001”代表时间戳,当设备1出现宕机(比如生成到“1 1256”),那么就可以找到设备标识号大于“1”的设备,比如设备m-1,继续提供设备1提供的服务,由于序列值中包含设备标识,所以就可以暂时保证序列值的有序性,类似地,当设备m-1出现宕机,则可以通过设备m继续提供服务。但是当设备m(“m”为该分布式系统系统中最大设备标识号)出现宕机时,该分布式系统系统中不存在设备的标识号大于“m”,此时就只能找到设备标识号小于“m-1”的设备,比如设备2,但是设备2生成的序列值第一位一定是“2”,由于设备m宕机之前生成的序列值第一位是“m”,所以第一位是“2”的序列值就破坏了原有的有序性。所以在分布式系统下,现有技术无法保证生成的序列值严格递增。基于此缺陷,本申请提供了一种序列值生成方法,用于在设备正常运行状态下,保证生成的序列值严格递增,并且当设备出现宕机时,也能保证生成的序列值严格递增。由于设备出现宕机就需要有其他设备接替,以便完成业务迁移,所以本方法可以假设执行主体为第一设备和第二设备,该方法流程示意图以及示意图分别如图2和图3所示,包括下述步骤:
步骤11:当第一设备在正常运行状态下,根据时间戳生成序列值,并将生成的序列值发送到备份记录中。
在一些业务场景下,每次业务数据发生变化,都需要对应一个序列值,比如收藏夹同步业务,当用户在PC(personal computer,个人电脑)端添加网站到收藏夹后,浏览器需要将收藏夹数据进行备份,此时浏览器的服务器就需要一个序列值,用于对应保存收藏夹数据,当用户在智能手机中需要同步收藏夹数据时,浏览器的服务器会找到针对收藏夹同步业务的最大序列值,并找到对应保存的收藏夹数据,以便完成同步。这里收藏夹同步业务可以是针对每个用户,也可以针对多个用户,甚至针对全部用户。当业务需要序列值时,业务服务器可以向用于生成序列值的设备发送序列请求。在实际应用中,针对不同的业务,还可以有业务标识,并且在分布式系统中,由于存在很多台设备(设备),所以可以布置一个调度中心,当业务服务器将带有业务标识的序列请求发送到调度中心后,调度中心可以通过一致性哈希路由,根据业务标识找到对应的设备,比如收藏夹同步业务原定由第一设备生成序列值,那么通过一致性哈希就可以根据收藏夹同步业务的业务标识找到第一设备,并将序列请求发送给第一设备。在实际应用中,在生成序列值之前,还可进行前置判断,比如判断业务的合法性,判断业务与设备是否有预先设置的请求响应关系等。
时间戳(timestamp),通常是一个字符序列,唯一地标识某一刻的时间,是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数(或总毫秒数),所以只要时间不同,时间戳就不同,比如,可以根据如图4所示的时间戳,生成序列值。
在本步骤中,根据时间戳生成序列值,是指设备在正常运行状态下,也就是不同时间的情况下,在后时间生成的时间戳一定大于在前时间生成的时间戳。
在实际应用中,可能出现高并发的情况,比如同一时间戳内接收到多个序列请求,此时就可以引入自增序列,也就是本步骤也可以根据时间戳以及自增序列,为序列请求生成序列值,自增序列可以保证同一单位时间内的有序性,比如,在同一时间戳内,同时有60个请求,那么就可以将这60个请求通过“001”至“060”进行排序,每个自增序列的值就可以表示这一时间戳内的顺序,在实施例中可以将时间戳作为保证序列值有序性的主要部分,而自增序列作为次要部分,比如如图5所示,为根据时间戳和自增序列生成的序列值,其中,时间戳在前,自增序列在后。
现有技术在生成完序列值后,就可以将序列值发送给业务服务器了,但本步骤中,除了可以将序列值发送给业务服务器以响应序列请求外,还可以将生成的序列值发送到备份记录中进行备份,比如将如图5生成的序列值发送到备份记录中,发送的内容还可以包含设备标识,比如设备1。具体地,由于序列值可以只由时间戳来生成,也可以由时间戳和自增序列共同生成,所以在将序列值进行备份时,可以只将时间戳进行备份,也可以将由时间戳和自增序列生成的序列值备份,在将时间戳和自增序列组成的序列值备份时,可以将实际的自增序列的值作为备份时的值,也可以将自增序列调整为最大值,作为备份时的值,比如根据图4或5所示,将序列值中的时间戳“1431230123”进行备份,或根据图5,直接将序列值“1431230123 000123”进行备份,又或将自增序列调整为最大值,将得到的“143123012399999”进行备份。
由于将生成的序列值进行了备份,所以当第一设备出现宕机时,其他设备可以根据备份记录中的记载,接替第一设备的业务。具体地,
步骤12:当第一设备出现宕机,第二设备从备份记录中查找对应第一设备发送的最大序列值。
当第一设备出现宕机后,可以由第二设备接替,但在接替业务之前,需要进行准备工作。具体地,前文已经介绍,备份记录中记载了第一设备的生成序列值的情况,所以,当有第二设备接替第一设备的业务时,可以先从备份记录中查找到对应第一设备的最大序列值,比如找到最大序列值即为步骤13中备份的“1431230123”序列值。具体比如收藏夹同步业务原来是由第一设备生成序列值,由于第一设备出现宕机,现由第二设备接替。在实际应用中,还可以考虑业务标识的因素。
步骤13:根据该最大序列值,确定第二设备序列下限值。
由于备份记录中的序列值,是第一设备生成过的序列值,所以在接替该第一设备的业务时,至少要从这个最大序列值之后开始,所以可以根据该最大序列值,确定第二设备序列下限值,也就是第二设备在接替第一设备后,首次生成的序列值需要大于第一设备最后一次备份的序列值,比如最大序列值为“1431230123”,那么该序列值就可以被确定为第二序列下限值,且第二序列下限值中包含的时间戳即为“1431230123”。类似地,当最大序列值为“1431230123 000123”或“1431230123 99999”,也可以确定出第二设备序列下限值为“1431230123”或“1431230123 000123”或“1431230123 99999”。
步骤14:当第二设备首次生成序列值,且当前时间戳大于第二设备序列下限值中包含的时间戳时,根据当前时间戳生成序列值。
当业务服务器再次将带有业务标识的序列请求发送到调度中心后,调度中心可以通过一致性哈希路由,根据业务标识找到对应的设备,由于第一设备出现宕机,且由第二设备接替,可以通过一致性哈希路由,直接将该序列请求发送到第二设备中。比如收藏夹同步业务由第二设备代替第一设备执行,那么通过一致性哈希就可以根据收藏夹同步业务的业务标识找到第二设备,并将序列请求发送给第二设备,此时就是第二设备首次生成序列值。
需要说明的是,这里提到的首次生成序列值,是指在接替第一设备后,针对原第一设备对指定业务而言的,比如原第一设备在正常运行状态下,为收藏夹同步业务生成序列值,当第一设备宕机后,由第二设备接替该收藏夹同步业务,当收藏夹同步业务请求序列时,调度中心将该请求发送给第二设备,此时就是第二设备接收针对该收藏夹同步业务的首次序列请求,也就是首次生成针对该收藏夹同步业务序列值。
当第二设备首次生成序列值时,第二设备需要判断当前时间戳是否大于第二序列下限值中包含的时间戳(也就是当前时间戳是否大于第一设备最后一次备份时的时间戳),只有在确定大于的情况下,第二设备才会根据当前时间戳生成序列值,并且可以保证严格递增。一般情况,如果第一设备和第二设备时间设定均为准确,那么只要时间向后推移,第二设备首次生成序列值时,时间戳一定大于第二序列下限值中包含的时间戳。所以在第二设备接替第二设备之间,也可以由调度中心向第二设备发送时间校对指令,以便顺利接替第一设备。比如,第二序列下限值中包含的时间戳即为“1431230123”,第二设备当前时间戳为“1431230125”,就可以根据“1431230125”生成序列值,保证严格递增。
由于第二设备首次生成的序列值,保证了(为同一业务提供的)序列值严格递增,所以也就可以认为第二设备完成了接替第二设备的业务,从第二次接收到序列请求起,可以看作第二设备是在正常运行状态下进行的序列值生成操作。由于第一设备在正常运行状态下,生成序列值后进行了备份,所以第二设备也可以将首次生成的序列值发送到备份记录中。
采用实施例1提供的方法,在分布式系统中,当第一设备正常运行时,根据时间戳生成序列值,并进行备份。当第一设备出现宕机,其他设备从备份记录中找到第一设备最后一次备份的最大序列值,将该最大序列值设置为第二设备的下限值,并在首次生成序列值时,以该设备的下限值为准,生成大于该下限值的序列值,并完成接替。通过在正常运行时备份序列值,在其他设备接替时,保证了序列严格递增。
在后续的序列值生成过程中,当第二设备宕机后,类似地,可以由第三设备从备份记录中查找对应第二设备的最大序列值,将该最大序列值确定为第三序列下限值,并当第三设备首次生成序列值时,确定第三设备的当前时间戳大于第三序列下限值中包含的时间戳,并根据第三设备的当前时间戳为请求生成序列值。以此类推,当第n-1设备宕机时,依旧可以有第n设备接替。只要分布式系统中,不同时全部宕机,就可以一致保证生成的序列值严格递增。
实施例2
在背景技术中已经介绍,宕机、重启、被替换等,统称宕机,所以也有可能出现设备正常但需要被替换,以及设备短暂的假死,这两种情况都需要用其他设备接替该设备的业务。但是,在业务迁移时,也是需要时间的,如果仅凭借从备份记录中获取最大序列值,并确定为第二设备序列下限值,有可能造成后续的序列冲突,比如,第一设备最后一次备份的序列值,即第二序列下限值为“1431230123”,但是由于第一设备出现了假死,时间戳到了“1431230124”时,又生成了序列值,而第二设备在时间戳为“1431230124”时也生成了序列值,这就造成了序列冲突,可见,在业务迁移时需要一段时间作为缓冲。此外,在设备正常运行时,虽然每次均按照严格递增生成序列,但也不排除有可能出现“时间戳跳跃”的情况,即时间戳为“1431230124”,但生成的序列值中的时间戳为“1431230130”,可见,在设备正常运行时,也需要序列值进行适当地限制。基于此缺陷,也基于与实施例1相同的发明思路,本申请实施例又提出了一种序列值生成方法,用于设备正常运行状态下,保证生成的序列值严格递增的同时提高生成的序列值的正确性,并且当设备出现宕机时,也能保证生成的序列值严格递增,同时降低业务迁移时出现序列冲突的可能性。与实施例1类似,所以本方法也可以假设执行主体为第一设备和第二设备,该方法流程示意图和示意图如图6和图7所示,包括下述步骤:
步骤21:当第一设备正常运行时,根据时间戳生成候选序列值。
步骤22:当该候选序列值不大于第一设备序列上限值,将该候选序列值确定为序列值。
与实施例1中类似,当第一设备正常运行时,生成序列值,但步骤21是生成候选序列值,并在步骤22中,判断候选序列值与第一设备序列上限值的大小关系,如果候选序列值不大于第一设备序列上限值,则认为满足上限要求,也就可以将该候选序列值确定为序列值。
第一设备序列上限值可以有多种确定方法,由于其目的是为了对生成的序列值进行纠错,所以该序列上限值是需要随着时间推移而变化的。比如当时间戳的单位时间为1秒(或1毫秒、1微秒)时,上限值中的时间戳可以设定为大于当前时间戳几个单位时间。比如当前时间戳为“1431230124”,那么就可以时间戳“1431230127”作为序列上限值中的时间戳,如果上限值就是由时间戳直接生成,那么序列上限值即为“1431230127”。
在实施例1中已经介绍,在业务交替时,是通过下限值保证严格递增,所以,每个设备在接替业务的首次生成序列值时,均会确定一个下限值,所以步骤22还可以包括:当该候选序列值大于第一设备序列下限值,将该候选序列值确定为序列值,其中,该第一设备序列下限值为该第一设备首次接收序列请求时确定的序列值。是实际应用中,也会有不是接替其他设备,而就是首次生成序列值的情况,此时可以通过调度中心,会程序员调试,确定最初的下限值。
步骤23:按照预设时间周期,将生成的序列值发送到备份记录中,并更新第一设备序列上限值。
在实际应用中,尤其是高并发时,也无需将每次生成的序列值都进行备份,所以就可以按照预设时间周期进行备份,具体地,前文已经介绍时间戳的单位时间可以是秒、毫秒或是微秒,那么时间周期也可以以秒、毫秒或是微秒为单位,比如时间戳“1431230124”是以毫为最小单位,时间周期为3秒,那么当时间戳为“1431230124”时,将生成的序列值发送到备份记录中,当时间戳为“1431230127”时,再将生成的序列值发送到备份记录中。
前文已经介绍,序列上限值是需要随着时间推移而变化的,所以,可以在每过一个时间周期(即每次备份序列值)时,更新第一设备序列上限值。具体地,更新时可以根据大于该序列值中时间戳至少一个时间周期的时间戳,更新第一设备序列上限值。比如每次更新第一设备序列上限值时,均根据大于该序列值中时间戳一个预设时间周期的时间戳。比如时间周期为3秒,那么每次更新第一设备序列上限值时,根据生成的序列值中时间戳加上3秒的时间戳进行更新。比如,以时间戳为序列值,当序列值为“1431230124”时,进行备份,并更新第一设备序列上限值为“1431230127”,当序列值为“1431230127”时,进行备份并更新第一设备序列上限值为“1431230130”,也就是第一设备序列上限值的更新“步调”与序列值备份的“步调”一致。
在实际应用中,也可以设定第一设备序列上限值的更新“步调”与序列值备份的“步调”不一致,比如当序列值为“1431230124”时,进行备份,并更新第一设备序列上限值为“1431230128”,当序列值为“1431230127”时,进行备份,并更新第一设备序列上限值为“1431230131”等。
可以将更新序列值看做一个循环,每个时间周期内生成序列值,均以上一时间周期确定的上限值作为限制条件。
所以在实施例1中介绍,当第二设备首次生成序列值时,可以将首次生成的序列值发送到备份记录中。这样从第二次生成序列值起,就有了上限值。
步骤24:当第一设备宕机,第二设备从该备份记录中查找对应该第一设备发送的最大序列值。
该步骤与实施例1中步骤12类似,不再赘述。
步骤25:根据大于该最大序列值中时间戳至少一个时间周期的时间戳,确定第二设备序列下限值。
在前文提到,如果仅凭借从备份记录中获取最大序列值,并确定为第二设备序列下限值,有可能造成后续的序列冲突,所以在本步骤中,可以灵活地考虑序列冲突的可能性,调节时间周期的个数,比如第一设备正常运行但需要被第二设备替换时,可以考虑根据大于该最大序列值中时间戳较多个数的时间周期的时间戳,确定第二设备序列下限值;又如确定第一设备出现损坏,可以考虑根据大于该最大序列值中时间戳较少个数的时间周期的时间戳,确定第二设备序列下限值,等。
步骤26:当第二设备首次生成序列值,且当前时间戳大于第二设备序列下限值中包含的时间戳时,根据当前时间戳生成序列值。
与实施例1中步骤14相似,不再赘述。由于第二设备接替了第一设备,并且步骤25已经考虑了接替时出现序列冲突的可能性,并且在接替后,第一设备再如何生成序列值,也没有用处,所以可以设定锁定第一设备的写入状态,即第一设备被接替后,就无法再生成序列值,或者即使生成了序列值也无法写入到对应业务中(无法发送给业务服务器)。
步骤27:将首次生成的序列值发送到备份记录中,并根据大于该首个序列值中时间戳至少一个时间周期的时间戳,确定第二设备序列上限值。
在第二设备首次生成序列值后,就可以根据该序列值,确定上限值了,在此后,就可以按照步骤23中的介绍,更新该第二设备序列上限值。
采用实施例2提供的方法,在实施例1的基础上,通过在正常运行的设备中设定上限值,保证生成的序列值严格递增的同时,提高生成序列值的正确性,并且当设备出现宕机时,也能保证生成的序列值严格递增的同时,降低业务迁移时出现序列冲突的可能性。
实施例3
基于相同的发明构思,实施例3提供了一种序列值生成装置,用于在设备正常运行状态下,保证生成的序列值严格递增,并且当设备出现宕机时,也能保证生成的序列值严格递增。图8为该装置的结构图,该装置包括:第一设备中的第一生成单元31以及第一备份单元32,第二设备中的第二查找单元41、第二确定单元42以及第二生成单元43,其中,
第一生成单元31,可以当第一设备正常运行时,根据时间戳生成序列值;
第一备份单元32,可以将生成的序列值发送到备份记录中;
第二查找单元41,可以当第一设备宕机,第二设备从备份记录中查找对应第一设备发送的最大序列值;
第二确定单元42,可以根据最大序列值,确定第二设备序列下限值;
第二生成单元43,可以在第二设备在首次生成序列值时,并确定出当前时间戳大于第二设备序列下限值中包含的时间戳时,根据当前时间戳生成序列值。
在一种实施方式中,第一生成单元31,可以根据时间戳以及自增序列生成序列值;
则第二生成单元41,可以根据当前时间戳以及自增序列生成序列值。
在一种实施方式中,第二确定单元42,可以
根据大于最大序列值中时间戳至少一个时间周期的时间戳,确定第二设备序列下限值。
在一种实施方式中,该装置还包括第二备份单元,可以
将首次生成的序列值发送到备份记录中。
在一种实施方式中,第一生成单元31,可以
当第一设备正常运行时,根据时间戳生成候选序列值;
当候选序列值不大于第一设备序列上限值,将候选序列值确定为序列值。
在一种实施方式中,第一备份单元32,可以
按照预设时间周期,将生成的序列值发送到备份记录中;
该装置还可以包括第一更新单元,可以更新第一设备序列上限值。
在一种实施方式中,第一更新单元,可以
根据大于序列值中时间戳至少一个时间周期的时间戳,更新第一设备序列上限值。
在一种实施方式中,第一生成单元31,可以根据时间戳生成候选序列值;
当候选序列值大于第一设备序列下限值,将候选序列值确定为序列值,第一设备序列下限值为第一设备首次接收序列请求时确定的序列值。
实施例4
基于相同的发明构思,实施例4提供了一种序列值生成系统,用于在设备正常运行状态下,保证生成的序列值严格递增,并且当设备出现宕机时,也能保证生成的序列值严格递增。图9为该系统的结构图,该业务监控系统50包括:第一设备、第二设备、备份记录,其中,
第一设备,可以在正常运行时,根据时间戳生成序列值,并将生成的序列值发送到备份记录中;
第二设备,可以当第一设备宕机,从备份记录中查找对应第一设备发送的最大序列值;
根据最大序列值,确定第二设备序列下限值;
在第二设备首次生成序列值,且当前时间戳大于第二设备序列下限值中包含的时间戳时,根据当前时间戳生成序列值;
将首次生成的序列值发送到备份记录中;
备份记录,可以接收第一设备发送的序列值;响应第二设备的查询请求。
在一种实施方式中,第一设备,可以根据时间戳以及自增序列生成序列值;
则第二设备,可以根据当前时间戳以及自增序列生成序列值。
在一种实施方式中,第二设备,可以
根据大于最大序列值中时间戳至少一个时间周期的时间戳,确定第二设备序列下限值。
在一种实施方式中,第一设备,可以
当正常运行时,根据时间戳生成候选序列值;
当候选序列值不大于第一设备序列上限值,且当候选序列值大于第一设备序列下限值,将候选序列值确定为序列值,第一设备序列下限值为第一设备首次接收序列请求时确定的序列值。
在一种实施方式中,第一设备,可以
按照预设时间周期,将生成的序列值发送到备份记录中,并更新第一设备序列上限值。
在一种实施方式中,第一设备,可以
根据大于序列值中时间戳至少一个时间周期的时间戳,更新第一设备序列上限值。
在实际应用中,该系统还可以包括业务服务器,用于发送序列请求,以及路由装置,业务服务器向路由装置发送包含业务标识的序列请求,路由装置根据序列请求中的业务标识,通过一致性哈希,找到分布式系统中的具体某个设备,再将该序列请求发送给该设备。并且当进行业务迁移,就其他设备替换该设备后,路由装置也需要及时调整路由设置,保证业务的序列请求能够正确到达对应的设备。
采用实施例4提供的系统,当第一设备正常运行时,根据时间戳生成序列值,并进行备份。当第一设备出现宕机,第二设备从备份记录中找到第一设备最后一次备份的最大序列值,将该最大序列值设置为第二设备的下限值,并在首次生成序列值时,以该设备的下限值为准,生成大于该下限值的序列值,并完成接替。通过在正常运行时备份序列值,在其他设备接替时,保证了序列严格递增。通过在正常运行的设备中设定上限值,保证生成的序列值严格递增的同时,提高生成序列值的正确性,并且当设备出现宕机时,也能保证生成的序列值严格递增的同时,降低业务迁移时出现序列冲突的可能性。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。