优化雪花算法在金融业务中应用的方法、装置、电子设备与流程

文档序号:18475151发布日期:2019-08-20 20:55阅读:225来源:国知局
优化雪花算法在金融业务中应用的方法、装置、电子设备与流程

本发明涉及一种优化雪花算法在金融业务中应用的方法、电子设备以及计算机可读存储介质。



背景技术:

分布式系统中,服务器时钟的时间不稳定就可能引发时钟回拨现象,导致前面已经生成的id序号(又称id流水号)与回拨后生成的id序号重复。现有技术存在两种方式来解决时钟回拨问题,第一种是通过单个数据库来集中产生id序号,这种方式存在单点故障导致系统瘫痪的危险;第二种则是将id序号设置成全局唯一标识符(guid),但guid是128位的数字标识符,其会导致系统的文件数据量大增,造成访问过慢,且不宜排序。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的基于rabbitmq的多集群动态负载方法、装置、电子设备和计算机可读存储介质。

依据本发明的一个方面,提供了一种优化雪花算法在金融业务中应用的方法,包括:

创建用雪花算法来生成分布式id序号的金融业务进程;

在所述金融业务进程中,若发生服务器时钟回拔,则以雪花算法计数到的最后毫秒数作为当前时间戳来继续生成id序号,分配金融业务进程。

可选地,当前时间戳所能生成的id序号耗尽,则等待特定时长后使当前时间戳增加特定时长所对应的数值,从而形成新的时间戳来继续生成id序号。

所述待特定时长后使当前时间戳增加特定时长所对应的数值的步骤,进一步包括:仅在服务器时钟处于回拔状态下实施。

可选地,方法还包括:服务器时钟恢复正常则以服务器系统时间毫秒数作为当前时间戳。

可选地,方法还包括:所述耗尽发生则触发检测服务器时钟的状态。

可选地,方法还包括:根据金融业务所需id序号的速率调节所述特定时长。

可选地,所述特定时长具体是单个服务器时钟。

可选地,判定发生服务器时钟回拔的方式是:识别到取回的服务器系统时间毫秒数小于当前时间戳所对应的毫秒数。

依据本发明的另一个方面,提供了一种优化雪花算法在金融业务中应用的装置,包括:

序号生成模块,适于创建用雪花算法来生成分布式id序号的金融业务进程;

时钟回拔处理模块,适于在所述金融业务进程中,若发生服务器时钟回拔,则以雪花算法计数到的最后毫秒数作为当前时间戳来继续生成id序号,分配金融业务进程。

可选地,所述时钟回拔处理模块,进一步适于:

当前时间戳所能生成的id序号耗尽,则等待特定时长后使当前时间戳增加特定时长所对应的数值,从而形成新的时间戳来继续生成id序号。

可选地,所述时钟回拔处理模块,进一步适于:仅在服务器时钟处于回拔状态下实施。

可选地,所述时钟回拔处理模块,进一步适于:服务器时钟恢复正常则以服务器系统时间毫秒数作为当前时间戳。

可选地,所述时钟回拔处理模块,进一步适于:所述耗尽发生则触发检测服务器时钟的状态。

可选地,所述时钟回拔处理模块,进一步适于:根据金融业务所需id序号的速率调节所述特定时长。

可选地,所述特定时长具体是单个服务器时钟。

可选地,判定发生服务器时钟回拔的方式是:识别到取回的服务器系统时间毫秒数小于当前时间戳所对应的毫秒数。

依据本发明的另一个方面,提供了一种电子设备,其中,该电子设备包括:

处理器;以及,

被安排成存储计算机可执行指令的存储器,可执行指令在被执行时使处理器执行上述的方法。

依据本发明的另一个方面,提供了一种计算机可读存储介质,其中,计算机可读存储介质存储一个或多个程序,一个或多个程序当被处理器执行时,实现上述的方法。

有益效果:

本发明鉴于金融业务对时间的敏感性等原因,对传统的雪花算法进行优化,通过在发生服务器时钟回拔时,以雪花算法所计数到的最后毫秒数作为当前时间戳来继续生成id序号,分配金融业务进程,实现在高并发金融业务场景下,持续稳定地产生趋势增长、全局唯一的id序号。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了用twitter的雪花算法所生成id序号的数据结构;

图2示出了实施本发明方法的流程图;

图3示出了根据本发明一个实施例的优化雪花算法在金融业务中应用的装置的结构示意图;

图4示出了根据本发明一个实施例的电子设备的结构示意图;

图5示出了根据本发明一个实施例的计算机可读存储介质的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本发明基于twitter公司开源的snowflake(雪花)算法作出改进,其中twitter的雪花算法的原理如下:雪花算法会生成一个64位的long型二进制数据,数据的基本结构如图1所示,包括:

第一位:未被使用;

第二部分:时间戳,可以表示毫秒级别时间,共41位(41位的长度可以使用69年);

第三部分:5位datacenterid和5位workerid(10位的长度最多支持部署1024个节点);

第四部分:最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个id序号)。

twitter的雪花算法生成的id整体按照时间自增排序,算法每隔一毫秒就获取一次毫秒级别的系统时间,以系统时间作为时间戳来实现新di序号的产生。出于该机制,twitter的雪花算法比较依赖系统时间,当服务器时钟发生回拔时,系统时间本身错误,twitter的雪花算法无法正常产生id。

鉴于金融业务对时间的敏感性等原因,对金融业务不能关闭服务器的时钟同步,导致毫秒级别的回拔不可避免,藉此,基于对上述的雪花算法进行优化,本发明一种优化雪花算法在金融业务中应用的方法,用以实现在高并发金融业务场景下,持续稳定地产生趋势增长、全局唯一的id序号。该方法的实施流程如图2所示,包括以下步骤:

步骤s101,创建金融业务进程来产生分布式id序号。

金融业务进程在正常情况下,即进程中无发生服务器时钟回拨时,使用twitter的雪花算法来生成分布式id序号,实现每个节点每毫秒产生4096个id序号。

步骤s102,在金融业务进程中,若发生服务器时钟回拔,以改造后的雪花算法继续生成id序号。

在金融业务进程中,若发生服务器时钟回拔,以雪花算法所计数到的最后毫秒数作为新的时间戳,来继续生成id序号。

系统每次请求生成id序号时都要判断服务器时钟有无回拔,其中判断服务器时钟发生回拔的方式是,识别到取回的服务器系统时间毫秒数小于当前时间戳所对应的毫秒数。

比如,假设雪花算法所计数到的最后毫秒数为n,再次请求生成id序号时,发现所取得的服务器系统时间毫秒数为n-20,即意味着服务器发生了20毫秒的回拔,此时系统以最后毫秒数n,利用雪花算法的规则,继续生成id。

步骤s103,当前时间戳所能生成的id序号耗尽时,递增当前时间戳后继续产生id。

由于每个节点每毫秒只能产生4096个id序号,以雪花算法所计数到的最后毫秒数来生成的id序号有可能发生耗尽情况。比如,在用最后毫秒数n作为新时间戳进行生成id时,系统收到5000个请求,那么这5000个请求会瞬间消耗完最后毫秒数n所能生成的4096个id序号。为简述,后文称这种情况为最后毫秒数序号耗尽场景。

在服务器时钟处于回拔状态下,当发生最后毫秒数序号耗尽场景时,即当前时间戳所能生成的id序号耗尽时,系统等待特定时长后使当前时间戳增加特定时长所对应的数值,从而形成新的时间戳来继续生成id序号。

所述特定时长根据金融业务所需id序号的速率进行调节。优选地,将特定时长设置为单个服务器时钟,即1毫秒,如此可实现资源最大化利用。

步骤s104,当前时间戳序号耗尽时触发检测回拨状态,以更新当前时间戳。

当前时间戳所能生成的id序号耗尽时,触发检测服务器时钟的状态,若服务器时钟仍处于回拨状态,则继续执行上述递增操作以继续生成id序号;若服务器时钟回复正常,则以服务器系统时间毫秒数作为当前时间戳,继续生成id序号。

示例:

每一毫秒可以产生4096个id序号,若系统收到5000个请求,当前时间戳已经无新id序号可以生成,则系统会尝试获取新的系统时间毫秒数来判断是否还发生服务器时钟回拨,若发生回拔,等待1毫秒,然后以当前时间戳+1作为新的时间戳,继续产生id序号;若无回拔则以新的系统时间毫秒数继续产生id序号。

图3示出了根据本发明一个实施例的优化雪花算法在金融业务中应用的装置的结构示意图。如图3所示,本发明实施例的优化雪花算法在金融业务中应用的装置包括:

序号生成模块31,适于对金融业务,创建用雪花算法来生成分布式id序号的金融业务进程;

时钟回拔处理模块32,适于在所述金融业务进程中,若发生服务器时钟回拔,则以雪花算法所计数到的最后毫秒数作为当前时间戳来继续生成id序号,分配金融业务进程。

在本发明的另一个实施例中,图3所示装置的时钟回拔处理模块32,进一步适于:

当前时间戳所能生成的id序号耗尽,则等待特定时长后使当前时间戳增加特定时长所对应的数值,从而形成新的时间戳来继续生成id序号。

在本发明的另一个实施例中,图3所示装置的时钟回拔处理模块32,进一步适于:仅在服务器时钟处于回拔状态下实施。

在本发明的另一个实施例中,图3所示装置的时钟回拔处理模块32:服务器时钟恢复正常则以服务器系统时间毫秒数作为当前时间戳。

在本发明的另一个实施例中,图3所示装置的时钟回拔处理模块32,进一步适于:所述耗尽发生则触发检测服务器时钟的状态。

在本发明的另一个实施例中,图3所示装置的时钟回拔处理模块32,进一步适于:根据金融业务所需id序号的速率调节所述特定时长。

具体地,所述特定时长具体是单个服务器时钟。

判定发生服务器时钟回拔的方式是:识别到取回的服务器系统时间毫秒数小于当前时间戳所对应的毫秒数。

本发明实施例的优化雪花算法在金融业务中应用的装置可以用于执行上述方法实施例,其原理和技术效果类似,此处不再赘述。

需要说明的是:

在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的检测电子设备的佩戴状态的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

例如,图4示出了根据本发明一个实施例的电子设备的结构示意图。该电子设备传统上包括处理器41和被安排成存储计算机可执行指令(程序代码)的存储器42。存储器42可以是诸如闪存、eeprom(电可擦除可编程只读存储器)、eprom、硬盘或者rom之类的电子存储器。存储器42具有存储用于执行图1所示的以及各实施例中的任何方法步骤的程序代码44的存储空间43。例如,用于程序代码的存储空间43可以包括分别用于实现上面的方法中的各种步骤的各个程序代码44。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。这些计算机程序产品包括诸如硬盘,紧致盘(cd)、存储卡或者软盘之类的程序代码载体。这样的计算机程序产品通常为例如图5所述的计算机可读存储介质。该计算机可读存储介质可以具有与图4的电子设备中的存储器42类似布置的存储段、存储空间等。程序代码可以例如以适当形式进行压缩。通常,存储单元存储有用于执行根据本发明的方法步骤的程序代码51,即可以由诸如41之类的处理器读取的程序代码,当这些程序代码由电子设备运行时,导致该电子设备执行上面所描述的方法中的各个步骤。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1