掌桥专利:专业的专利平台
掌桥专利
首页

一种分布式序列号的获取方法及装置

文献发布时间:2024-04-18 20:02:40


一种分布式序列号的获取方法及装置

技术领域

本发明属于分布式系统技术领域,具体涉及一种分布式序列号的获取方法、装置及系统。

背景技术

在分布式系统中,经常需要使用全局唯一序列号来定义不同应用场景的数据,如:订单号、交易号、链路跟踪ID、支付流水号等。

不同的应用场景对全局唯一序列号的要求是不一样的,归结起来通常会有以下要求:顺序递增要求,方便查找和维护;标识使用场景要求,区分不同场景;长度要求,限制序列号的长度,减少存储压力;不可预测要求,序列号是不可预测的;高可用、高并发、高性能要求等。但是,现有的分布式序列号生成方法包括UUID、数据库自增序列、雪花算法、NanoID等,都无法满足不同应用场景下的序列号定制化需求。

例如现有的申请公开号为CN114064806A的专利本申请涉及一种分布式序列号生成方法、装置、计算机设备、存储介质和计算机程序产品。所述方法包括:获取第一安全分区的数据库表,根据数据库表,获得对应数据库表的第一安全分区分布式序列号号段,根据第一安全分区分布式序列号号段,获得第二安全分区的分布式序列号号段和号段分配阈值,定时监测第二安全分区的分布式序列号号段的使用,获得第二安全分区的当前分布式序列号,若第二安全分区的当前分布式序列号超过号段分配阈值,则重新分配对应的第二安全分区的分布式序列号号段和号段分配阈值。采用本方法能够支持跨安全分区的分布式序列号生成。

但是上述专利中存在:虽然分区多样保证了分布式序列号的获取,但是同时带来了其系统的高负载性,对性能要求较高,同时响应速度慢,算法繁琐,无法通过确定的时间控制缓存缓存大小,造成了资源的浪费。

本发明的有益效果:满足不同应用场景下的序列号定制化需求。满足分布式场景下的高可用、高并发、高性能要求。统一的获取方式,可以快速接入,进行统一接入管理。序列号存放在数据库,方便统一管理和监控。通过确定预定时间内的所需序列号数量来控制缓存大小,减少资源占用。

发明内容

本部分的目的在于概述本发明的实施例的一些方面以及简要介绍一些较佳实施例。在本部分以及本申请的说明书摘要和发明名称中可能会做些简化或省略以避免使本部分、说明书摘要和发明名称的目的模糊,而这种简化或省略不能用于限制本发明的范围。

为解决上述技术问题,本发明的主要目的在于提供一种分布式序列号的获取系统,包括:

序列号获取模块,包括用于接收序列号的获取单元,用于确定特定时间内所需的序列号数量的预测单元,用于在数据库中国获取序列号的更新单元;

序列号生成模块,包括用于配置序列号个性化定值信息的配置单元,用于收集序列号获取系统的序列号缓存信息的收集单元,用于预生成序列号;

序列号数据库模块,用于存放序列号个性化定制信息和序列号记录信息。

作为本发明一种分布式序列号的获取系统的一种优选方案,其中:

通过所述获取单元接收来自客户端的获取序列号请求;

所述预测单元通过时间序列预测确定待定时间内所需的序列号数量;

通过更新单元对序列号缓存队列进行判断,若序列号缓存队列小于预测模块给出的预测值,则从序列号数据库模块中获取所需数量的序列号,并追加到序列号缓存队列中,若序列号缓存队列等于预测模块给出的预测值,则输出序列号缓存信息。

作为本发明一种分布式序列号的获取系统的一种优选方案,其中:

所述序列号缓存信息,包括序列号个性化定值信号、序列号获取服务标识、序列号缓存队列、特定时间内每秒小号序列号LRUMap、预测值和触发预生成标志;

所述配置单元用来配置序列号个性化定制信息;

所述收集单元用来收集序列号获取装置中的序列号缓存信息;

所述生成单元用于根据收集到的序列号缓存信息预生成序列号。

作为本发明一种分布式序列号的获取系统的一种优选方案,其中:

所述序列号数据库模块,用于存放序列号个性化定制信息和序列号记录信息;

通过个性化需求生成所述序列号个性化定制信号;

所述序列号记录信息包括序列号生成记录、序列号缓存记录和序列号个性化信息。

作为本发明一种分布式序列号的获取方法的一种优选方案,其中:

S1、根据序列号服务标识获取序列号个性化定制信息;

S2、根据个性化定制信息、序列号请求数量从序列号缓存队列中获取序列号;

S3、通过预测值与序列号缓存队列进行对比,并对序列号缓存队列大小是否小于预测值进行判断;

S4、若序列号缓存队列小于预测值,则通过序列号数据库获取序列号追加到序列号缓冲队列中;

S5、完成个性化序列号获取,最后预生成序列号数据库中对应的序列号记录信息。

作为本发明一种分布式序列号的获取方法的一种优选方案,其中:

所述序列号获取根据个性化定制号、序列号请求数量从序列号缓存队列中获取序列号,判断序列号缓存队列大小是否小于预测值;

若序列号缓存队列小于预测值,则根据个性化定制号、预测值和序列号获取服务标识,从数据库获取对应数量的序列号,若序列号缓存队列不小于预测值,则输出序列号缓存队列;

作为本发明一种分布式序列号的获取方法的一种优选方案,其中:

通过收集序列号个性化定制信息中序列号获取所述序列号缓存队列;

通过所述从数据库获取对应数量的序列号,则将获取到的序列号追加到序列号缓存队列中。

作为本发明一种分布式序列号的获取方法的一种优选方案,其中:

通过预测单元生成所述预测值,所述预测值由时间序列预测方法确定特定时间内所需的序列号数量;

通过预测值对比序列号缓存队列,并对序列号缓存队列进行追加序列号处理。

作为本发明一种分布式序列号的获取方法的一种优选方案,其中:

所述追加序列号包括,监控序列号缓存队列大小,根据时间序列预测方法确定特定时间内所需的序列号数量,然后从序列号数据库模块获取所需数量的序列号,最后追加到序列号缓存队列。

作为本发明一种分布式序列号的获取方法的一种优选方案,其中:

所述序列号数据库模块包括PostgreSQL、MySQL和Oracle。

本发明的有益效果:满足不同应用场景下的序列号定制化需求。满足分布式场景下的高可用、高并发、高性能要求。统一的获取方式,可以快速接入,进行统一接入管理。序列号存放在数据库,方便统一管理和监控。通过确定预定时间内的所需序列号数量来控制缓存大小,减少资源占用。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。其中:

图1为本发明一种分布式序列号的获取系统的整体系统流程图;

图2为本发明一种分布式序列号的获取系统的序列号缓存信息的存储结构图;

图3为本发明一种分布式序列号的获取方法的实现流程图;

图4为本发明一种分布式序列号的获取方法的定时更新序列号缓存队列方法的流程图;

图5为本发明一种分布式序列号的获取系统的系统组成结构框图;

图6为本发明一种分布式序列号的获取系统的序列号获取装置的结构框图;

图7为本发明一种分布式序列号的获取系统的序列号生成装置的结构框图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合说明书附图对本发明的具体实施方式做详细的说明。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。

其次,此处所称的“一个实施例”或“实施例”是指可包含于本发明至少一个实现方式中的特定特征、结构或特性。在本说明书中不同地方出现的“在一个实施例中”并非均指同一个实施例,也不是单独的或选择性的与其他实施例互相排斥的实施例。

再其次,本发明结合示意图进行详细描述,在详述本发明实施例时,为便于说明,表示器件结构的剖面图会不依一般比例作局部放大,而且示意图只是示例,其在此不应限制本发明保护的范围。此外,在实际制作中应包含长度、宽度及深度的三维空间尺寸。

实施例一

一种分布式序列号的获取系统,包括:

序列号获取模块,包括用于接收序列号的获取单元,用于确定特定时间内所需的序列号数量的预测单元,用于在数据库中国获取序列号的更新单元;

序列号生成模块,包括用于配置序列号个性化定值信息的配置单元,用于收集序列号获取系统的序列号缓存信息的收集单元,用于预生成序列号;

序列号数据库模块,用于存放序列号个性化定制信息和序列号记录信息。

在一个实施例中,序列号获取服务接收来自客户端的请求,这里的客户端采用统一的SDK接入,通过配置个性化定制号、AppId和AppSecret,然后使用统一的获取序列号API即可完成接入。SDK提供多种编程语言版本,方便不同编程语言的客户端快速接入。序列号获取服务根据个性化定制号、序列号请求数量从序列号缓存队列中获取对应数量的序列号。这里的序列号缓存队列是存放在序列号缓存信息,序列号缓存信息如图2所示,使用Map来存储,在一个实施例中,例如使用Java语言实现,采用ConcurrentHashMap来存储序列号缓存信息,键为个性化定制号,值为序列号缓存信息对象;序列号缓存队列采用LinkedBlockingQueue来存放序列号,好处在于它的性能在50万QPS级别上,能够满足分布式场景下的高并发、高性能要求;特定时间内每秒消耗序列号数采用apache的LRUMap存放,键采用Long类型存放时间戳秒,值采用AtomicLong类型存放,采用LRUMap的好处在于超过容量时会自动删除最早的记录。从序列号缓存队列中获取对应数量的序列号的一般实现就是:先根据个性化定制号找到对应的序列号缓存信息,然后从序列号缓存信息中的序列号缓存队列取对应数量的序列号,最后更新LRUMap对应时间戳秒的值。

序列号获取服务每次接收到客户端的序列号请求,都会判断序列号缓存队列大小是否小于预测值,小于预测值,设置触发预生成标志为true,否则设置为false。这里的预测值,由序列号个性化定制信息配置的时间序列预测方法和特定时间来确定的,简单说就是用特定时间内的每秒消耗序列号数,使用时间序列预测方法预测下一个特定时间内的每秒消耗序列号数。在一个实施例中,预测值的计算示意如下:假设默认序列号缓存队列大小为1200,特定时间为1分钟,初始化时,LRUMap中并没有记录,此时预测值等于默认序列号缓存队列大小,序列号缓存队列大小为1200。假设在时间戳秒1670899660,开始接收到客户端的序列号请求,并且这一秒消耗序列号数为10,则LRUMap初始化记录为{"1670899601":"0","1670899602":"0",....,"1670899660":"10"},然后根据时间序列预测方法,预测时间戳秒1670899660后1分钟的每秒消耗序列号数,假设是{"1670899661":"11","1670899662":"11",....,"1670899720":"11"},将预测时间内每秒消耗序列号数加起来就是预测值,假设计算出来得到的预测值为660,预测值小于1200,预测值取MAX{计算出来的预测值,默认序列号缓存队列大小},这里得到预测值为1200。因当前序列号缓存队列大小为1200-10=1190,小于预测值1200,然后触发根据个性化定制号、预测值和序列号获取服务标识,从数据库获取1200个序列号,追加到序列号缓存队列中,则当前序列号缓存队列大小变为1190+1200=2390。接下来,接收到客户端的序列号请求时,每过一秒,都预测下一分钟的每秒消耗序列号数,更新预测值,重复上述的步骤。实现中要注意的是序列号获取方法的后三步是异步执行的,从而可以减少了获取序列号的时间。

如图4所示,根据本发明实施例的定时更新序列号缓存队列方法的流程图所述流程包括:

监控序列号缓存队列大小;

根据时间序列预测方法确定特定时间内所需的序列号数量;

从数据库获取所需数量的序列号;

追加到序列号缓存队列中。

监控序列号缓存队列大小的时间间隔是每秒判断一次的。先根据序列号个性化定制信息中的时间序列预测方法和序列号缓存信息中的LRUMap记录的每秒消耗序列号数,预测特定时间内的每秒消耗序列号数,将特定时间内的每秒消耗序列号数加起来即可得到预测值。预测值的计算示意方法见上文,这里不再赘述。接下来,将序列号缓存队列大小和预测值进行比较,小于时,设置触发预生成标志为true,否则设置为false。如果序列号缓存队列大小小于预测值,则从数据库获取预测值数量的序列号,并追加到序列号缓存队列中。通过定时主动更新序列号缓存队列,减少了获取序列号的时间,从而提供更高的并发量和性能。

如图5所示,根据本发明实施例的序列号获取系统的结构框图,如图5所示,所述系统包括:序列号获取装置、序列号生成装置和数据库。其中,序列号获取装置用于实现上述实施例中的序列号获取方法、定时更新序列号缓存队列方法,以及使用上述实施例提到的序列号缓存信息的存储结构。序列号生成装置用于实现上述实施例中的序列号生成方法。数据库用于存放上述实施例中提到的序列号个性化定制信息和序列号记录信息。

在一个实施例中,序列号获取装置是一个独立的服务,称之为序列号获取服务,并且根据性能要求部署多个节点,接收来自客户端的序列号请求。序列号获取装置的结构框图,如图6所示,所述装置包括:获取模块,用于接收来自客户端的获取序列号的请求;预测模块,使用时间序列预测方法确定特定时间内所需的序列号数量;更新模块,当序列号缓存队列大小小于预测模块给出的预测值时,从数据库获取所需数量的序列号,并追加到序列号缓存队列中。实现上,获取模块一方面提供统一的HTTP序列号获取接口:入参是个性化定制号、序列号请求数量,返参是序列号列表,并给客户端提供统一的SDK接入;另一方面,根据客户端的序列号请求,更新序列号缓存信息,提供数据给预测模块用。预测模块一方面实现序列号个性化定制信息中的时间序列预测方法例如Holt-Winters法等,并根据序列号缓存信息中LRUMap,预测特定时间内每秒消耗序列号数,计算得出预测值,提供给更新模块用;另一方面,提供统一的HTTP序列号缓存信息收集接口,提供给序列号生成服务收集缓存信息用。更新模块实现当序列号缓存队列大小小于预测值,从数据库中获取预测值数量的序列号,并将获取到的序列号追加到序列号缓存信息中的序列号缓存队列中。

序列号生成装置也是一个独立的服务,称之为序列号生成服务,并且根据性能要求部署多个节点,负责预生成序列号到数据库中。序列号生成装置的结构框图,如图7所示,所述装置包括:配置模块,用来配置序列号个性化定制信息;收集模块,用来收集序列号获取装置中的序列号缓存信息;生成模块,根据收集到的序列号缓存信息预生成序列号。实现上,配置模块一方面实现序列号个性化定制信息的配置,另一方面提供配置界面,方便管理员进行配置。收集模块,通过调用序列号获取服务统一的HTTP序列号缓存信息收集接口,收集序列号缓存信息,提供给生成模块用。生成模块一方面实现序列号个性化定制信息中的序列号生成方式,例如本发明提供的一种自定义序列号生成方式:场景标识+序列号生成服务标识+毫秒数+N位递增数;另一方面并根据收集模块收集到的序列号缓存信息中的触发预生成标志、预测值、序列号个性化定制信息,使用对应的序列号生成方式,预生成预测值数量的序列号到数据库的序列号记录信息表中。

最后,数据库可以用独立的数据库比如MySQL,或者是多个数据库组成的数据库集群来实现。序列号个性化定制信息和序列号记录信息都存放在数据库表中,并且序列号记录信息是根据个性化分表的。

根据本发明实施例的一种序列号获取的系统,分为展示层、业务层、数据层、数据库和运行环境。展示层包括序列号获取SDK客户端和序列号管理系统,序列号管理系统提供统一的配置界面和展示和监控序列号使用情况等;业务层承载序列号生成装置和序列号获取装置的能力;数据层提供操作数据库的能力;数据库可以是PostgreSQL集群、MySQL集群和Oracle集群等;运行环境可以是独立的服务器、云主机和第三方虚拟主机等。

实施例二

如图1所示,一种分布式序列号的获取方法,包括:

S1、根据序列号服务标识获取序列号个性化定制信息;

S2、根据个性化定制信息、序列号请求数量从序列号缓存队列中获取序列号;

S3、通过预测值与序列号缓存队列进行对比,并对序列号缓存队列大小是否小于预测值进行判断;

S4、若序列号缓存队列小于预测值,则通过序列号数据库获取序列号追加到序列号缓冲队列中;

S5、完成个性化序列号获取,最后预生成序列号数据库中对应的序列号记录信息。

通过举例对一种分布式序列号的获取过程进行详细说明,其中序列号生成服务标识指用来生成序列号的服务的唯一标识,例如数字01。序列号个性化定制信息是存储在数据库表中的记录,记录可以包括个性化定制号、AppId、AppSecret、默认序列号缓存队列大小、时间序列预测方法、特定时间、场景标识、序列号长度、序列号生成方法、序列号生成服务标识、序列号获取服务标识列表。其中,个性化定制号唯一标识序列号个性化定制信息;AppId和AppSecret,用于SDK接入;默认序列号缓存队列大小,用于初始化时和预测值少于默认时,序列号缓存队列中存放的序列号个数;时间序列预测方法,例如ARIMA方法、Holt-Winters法等;特定时间,用来控制预测多长时间范围内的序列号数,通常是1分钟;场景标识,用来标识场景,需要标识场景时设置,例如订单场景采用ord为场景标识;序列号长度,对序列号长度有限制时设置;序列号生成方式,例如UUID、雪花算法、NanoID等,还可以采用本发明提供的一种自定义序列号生成方式:场景标识+序列号生成服务标识+毫秒数+N位递增数;序列号生成服务标识,用来标识使用哪个序列号生成服务来生成序列号;序列号获取服务标识列表,用来标识哪些序列号获取服务正在获取该个性化定制号对应的序列号,同时提供信息给序列号生成服务收集序列号缓存信息用,通常是序列号获取服务的IP:端口。

序列号生成服务根据获取到的序列号个性化定制信息中序列号获取服务标识列表,收集序列号缓存信息,收集的方式是通过HTTP方式,收集的时机一般是每秒收集一次。序列号缓存信息如图2所示,使用Map来存储,键为个性化定制号,值为序列号缓存信息对象,对象里的信息包括:序列号个性化定制信息、序列号获取服务标识、序列号缓存队列、特定时间内每秒消耗序列号数LRUMap、预测值、触发预生成标志。其中个性化定制号、序列号个性化定制信息、序列号获取服务标识上文已描述过,不再赘述;序列号缓存队列,用来缓存序列号,提供给获取序列号用;特定时间内每秒消耗序列号数LRUMap,用来存放特定时间内每秒消耗的序列号数,键为时间戳秒,值为这一秒消耗的序列号数,容量是特定时间内的秒数;预测值,为预测特定时间内需要的序列号数;触发预生成标志,用来标识是否需要预生成序列号。在一个实施例中,例如使用Java语言实现,采用ConcurrentHashMap来存储序列号缓存信息;序列号缓存队列采用LinkedBlockingQueue来存放序列号;特定时间内每秒消耗序列号数采用apache的LRUMap存放,键采用Long类型存放时间戳秒,值采用AtomicLong类型存放。

序列号生成服务根据序列号个性化定制信息和收集到的序列号缓存信息,预生成序列号数据库中对应的序列号记录信息。在一个实施例中,序列号记录信息包括序列号记录ID、个性化定制号、序列号获取服务标识、序列号、获取状态。其中,序列号记录ID是序列号记录信息的唯一标识;序列号获取服务标识,标识这些记录可以由哪个序列号获取服务获取;序列号,根据序列号个性化定制信息生成的序列号;获取状态,标识这个记录是否已被获取。为了提升从数据库获取序列号的并发量和性能,在实际操作中,序列号记录信息是按个性化定制号进行分表的。序列号生成服务根据收集到的序列号缓存信息中的触发预生成标志,如果预生成标志为true,则根据个性化定制号、序列号获取服务标识、预测值,往数据库对应个性化定制号的序列号记录信息表中增加预测值数量的序列号记录信息。序列号记录信息中的序列号的值,具体看序列号个性化定制信息中的场景标识、序列号长度、序列号生成方式、序列号生成服务标识,举个例子,如果配置的是自定义序列号生成方式,场景标识是ord,序列号长度28,序列号生成服务标识01,预测值为1000,当前毫秒数为1670677385061,则序列号的值为

ord011670677385061000000000~ord011670677385061000000999。数据库可以用独立的数据库比如MySQL,或者是多个数据库组成的数据库集群来实现。由于序列号存在数据库中,方便了对序列号的统一管理和监控,也可以随时对数据库进行监控,进一步提高序列号生成的可靠性。此外,通过数据库来存储序列号,还可以支持多个序列号生成服务同时运行,满足分布式场景下的高可用要求。图3是根据本发明实施例的序列号获取方法的流程图,如图3所示,所述方法包括:

根据个性化定制号、序列号请求数量从序列号缓存队列中获取序列号;

判断序列号缓存队列大小是否小于预测值,该预测值由时间序列预测方法确定特定时间内所需的序列号数量;

根据个性化定制号、预测值和序列号获取服务标识,从数据库获取对应数量的序列号;

将获取到的序列号追加到序列号缓存队列中。

重要的是,应注意,在多个不同示例性实施方案中示出的本申请的构造和布置仅是例示性的。尽管在此公开内容中仅详细描述了两个实施方案,但参阅此公开内容的人员应容易理解,在实质上不偏离该申请中所描述的主题的新颖教导和优点的前提下,许多改型是可能的例如,各种元件的尺寸、尺度、结构、形状和比例、以及参数值(例如,温度、压力等)、安装布置、材料的使用、颜色、定向的变化等。例如,示出为整体成形的元件可以由多个部分或元件构成,元件的位置可被倒置或以其它方式改变,并且分立元件的性质或数目或位置可被更改或改变。因此,所有这样的改型旨在被包含在本发明的范围内。可以根据替代的实施方案改变或重新排序任何过程或方法步骤的次序或顺序。在权利要求中,任何“装置加功能”的条款都旨在覆盖在本文中所描述的执行功能的结构,且不仅是结构等同而且还是等同结构。在不背离本发明的范围的前提下,可以在示例性实施方案的设计、运行状况和布置中做出其他替换、改型、改变和省略。因此,本发明不限制于特定的实施方案,而是扩展至仍落在所附的权利要求书的范围内的多种改型。

此外,为了提供示例性实施方案的简练描述,可以不描述实际实施方案的所有特征(即,与当前考虑的执行本发明的最佳模式不相关的那些特征,或于实现本发明不相关的那些特征)。

应理解的是,在任何实际实施方式的开发过程中,如在任何工程或设计项目中,可做出大量的具体实施方式决定。这样的开发努力可能是复杂的且耗时的,但对于那些得益于此公开内容的普通技术人员来说,不需要过多实验,开发努力将是一个设计、制造和生产的常规工作。

应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

相关技术
  • 一种序列号的生成方法及装置
  • 一种植入式控制系统数据获取装置及数据获取方法
  • 基于分布式系统的信息获取方法、装置、电子设备和介质
  • 一种图像获取控制方法、装置及拍摄装置、存储介质
  • 一种校正关系获取装置、方法及校正光探测元件的装置
  • 一种服务器序列号获取方法、装置和计算机设备
  • 一种服务器序列号获取方法、装置和计算机设备
技术分类

06120116586893