一种分布式不重复随机序列生成方法和系统与流程

文档序号:26919874发布日期:2021-10-09 16:31阅读:258来源:国知局
一种分布式不重复随机序列生成方法和系统与流程

1.本技术涉及计算机应用技术领域,具体而言,涉及一种分布式不重复随机序列生成方法和系统。


背景技术:

2.序列号用于唯一标识系统元素,被广泛地应用于各种应用系统中,例如用于售货系统、保险系统、理财系统、以及金融系统等。随着数据量越来越大,要保证业务流水或者订单的唯一性,需要高可用、高可靠的序列号生成器来产生唯一的序列号。例如对于现有的大规模的理财系统来说,目前已经需要每天新生成万亿级的序列号。
3.以12位序列号为例,目前通常采用的生成方法是对数据库里存放使用过的数字,并配置为唯一约束,每次用伪随机数生成器生成12位数字,然后插入数据库,如果出现重复错误,则放弃该数字,继续循环尝试,直至插入数据成功。这种方法实现简单,但是缺点明显:生成耗时不可控,在已经有上亿条存量记录时,生成的随机数和存量数据重复的几率越来越高,导致重试次数很大的几率越来越高;利用数据库的重复插入错误会耗费数据库的性能,在大量请求的场景下,数据库负载压力很大。
4.还有一种方案是,将数字范围分成108个区间,对于12位数字,每个区间包含104个数字;每个区间按顺序编号1,2,3
……
,总计108个数字列表载入内存中,随机打乱顺序,然后存入区号队列(某些数据库例如redis,提供队列型数据结构);每次需要时,从区号队列中取出一个区号然后将该区的104个数字载入内存,随机打乱顺序,然后存入数字队列;新数字请求到来时,如果数字队列为空,则采用上一步的方法生成一批存入数字队列,然后从数字队列中取出。这种方案的序列号生成方法对数据库的性能压力小,并且生成新数字的速度较快。但是存在的缺陷是:生成的数字会有一段时间内属于同一个区间,大幅降低了随机性;由于区号顺序初始化生成后就固定了,故存在一定的安全隐患;对于判断一个数字是否使用过,定位到区间范围后,还需遍历整个区间内所有数字,降低系统性能。


技术实现要素:

5.本技术要解决的技术问题是如何使生成的序列号的随机性和不重复性达到平衡,同时保证性能。
6.为解决上述技术问题,根据本技术的一个方面,提供一种分布式不重复随机序列生成方法,其包括步骤:划分区块,便于分布式管理,即将用于生成随机数的数据存储空间划分为m个区,的每个区包含n个块,其中,m和n为自然数;m个区分别均包含缓存队列,缓存队列用于存储从块中读入的随机数;对于数据存储空间中的某一个位(bit),通过块的编号与位在块内的偏移位置计算出全局地址,该全局地址即对应为要生成的随机数字;数据存储空间的块的每一个位的值为1或0,其中,1代表对应位置的随机数已使用,0代表对应位置的随机数未使用。
7.根据本技术的实施例,分布式不重复随机序列生成方法还可包括:生成随机数,从
数据存储空间的m个区中随机选择一个区,查看该区中的缓存队列是否有数据。如缓存队列中有数据,从缓存队列中取出一个作为生成随机数的结果,返回该随机数对应的全局地址作为生成的随机数。如缓存队列中无数据,随机选择n1个块读入缓存队列的内存中;对于某一个块,随机选择一个偏移位置,然后向下搜索一个值为0的位(bit),值为0的位即为一个随机数;对于一个块,以上搜索执行n2次,返回n2个随机数;n1个块总计获得n1×
n2个随机数,存入缓存队列;n1、n2为自然数。
8.根据本技术的实施例,分布式管理可包括:序列号服务和配置管理服务。序列号服务和用于接收客户端请求,生成随机数流程;配置管理服务用于管理分布式节点信息。分布式管理可包括3个序列号服务和3个配置管理服务;多个配置管理服务节点构成一个分布式系统,有一个主节点,其余的节点为从节点。
9.根据本技术的实施例,序列号服务可管理多个数据分区,不同的序列号服务会包含同一个数据分区,对于同一个数据分区会以主节点的名义存在于某个序列号服务里,当有数据变更时,变更操作会同步至其他的从节点,同一个数据分区即为分布式数据组。
10.根据本技术的另一方面,提供一种分布式不重复随机序列生成系统,其包括:序列号服务模块、随机数生成模块和配置管理服务模块。序列号服务模块用于接收客户端请求,生成随机数流程;随机数生成模块,用于生成不重复随机数;配置管理服务模块,用于管理分布式节点信息。此分布式不重复随机序列生成系统可通过媒介加载在计算机或任何服务器上。
11.根据本技术的实施例,随机数生成模块可用于生成随机数的数据存储空间划分区块,用于分布式管理,将用于生成随机数的数据存储空间划分为m个区,的每个区包含n个块,m和n为自然数;m个区分别均包含缓存队列,缓存队列用于存储从块中读入的随机数;对于数据存储空间中的某一个位,通过块的编号与位在块内的偏移位置计算出全局地址,该全局地址即对应为要生成的随机数字;数据存储空间的块的每一个位的值为1或0,其中,1代表对应位置的随机数已使用,0代表对应位置的随机数未使用。
12.根据本技术的实施例,随机数生成模块可生成随机数,从数据存储空间的m个区中随机选择1个区,查看该区中的缓存队列是否有数据,如缓存队列中有数据,从缓存队列中取出一个作为生成随机数的结果,返回该随机数对应的全局地址作为生成的随机数;如缓存队列中无数据,随机选择n1个块读入缓存队列的内存中;对于某一个块,随机选择一个偏移位置,然后向下搜索一个值为0的位,值为0的位即为一个随机数;对于一个块,以上搜索执行n2次,返回n2个随机数;n1个块总计获得n1×
n2个随机数,存入缓存队列;n1、n2为自然数,一般取100~1000较为合适,具体数值依据实际需要随机数数量确定,不受此限。
13.根据本技术的实施例,配置管理服务模块可接收配置管理客户端的请求,接收序列号服务模块发送的节点心跳,收集在线中的序列号服务节点信息;序列号服务节点增加或减少时,重新分配分区给合适的序列号节点;通过节点心跳响应实现:节点停止、启动分区;通过分区心跳响应实现:分区停止、分区增加节点、分区主节点变更。
14.根据本技术的实施例,序列号服务模块可接收序列号客户端的请求,由分区的从节点转发客户端请求至分区的主节点;维护节点状态;定时上报节点心跳;维护多个分区的状态,每个分区定时上报分区心跳;分区的从节点定时发送心跳给主节点;分区主节点在从节点心跳的响应中,同步数据块的写操作。
15.因为依据本技术实施例的分布式不重复随机序列生成方法,其包括步骤:划分区块,便于分布式管理,即将用于生成随机数的数据存储空间划分为m个区,的每个区包含n个块,其中,m和n为自然数;m个区分别均包含缓存队列,缓存队列用于存储从块中读入的随机数;对于数据存储空间中的某一个位(bit),通过块的编号与位在块内的偏移位置计算出全局地址,该全局地址即对应为要生成的随机数字;数据存储空间的块的每一个位的值为1或0,其中,1代表对应位置的随机数已使用,0代表对应位置的随机数未使用,所以可实现如下有益效果:
16.对比只考虑一个运算的流程的传统方案,本方案成为了一个完整的系统,涵盖了系统的数据可靠性、服务的可用性;使生成的序列号随机数随机性和不重复性达到一个平衡,同时也保证了生成方法和系统的性能。
附图说明
17.为了更清楚地说明本技术实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本技术的一些实施例,而非对本技术的限制。
18.图1是根据本技术实施例的分布式不重复随机数序列生成方法的流程图;
19.图2是根据本技术实施例的分布式不重复随机数序列生成系统的示意图;
20.图3是根据本技术实施例的配置管理服务的示意图;
21.图4是根据本技术实施例的序列号服务的示意图。
具体实施方式
22.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例的附图,对本技术实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本技术的一部分实施例,而不是全部的实施例。基于所描述的本技术的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其它实施例,都属于本技术保护的范围。
23.除非另作定义,此处使用的技术术语或者科学术语应当为本技术所属领域内具有一般技能的人士所理解的通常意义。本技术专利申请说明书以及权利要求书中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”或者“一”等类似词语也不表示数量限制,而是表示存在至少一个。
24.图1是根据本技术实施例的分布式不重复随机数序列生成方法的流程图。
25.如图1所示,根据本技术实施例的分布式不重复随机序列生成方法步骤包括:划分区块,便于分布式管理,即将用于生成随机数的数据存储空间划分为m个区,的每个区包含n个块,其中,m和n为自然数;m个区分别均包含缓存队列,缓存队列用于存储从块中读入的随机数;对于数据存储空间中的某一个位(bit),通过块的编号与位在块内的偏移位置计算出全局地址,该全局地址即对应为要生成的随机数字;数据存储空间的块的每一个位的值为1或0,其中,1代表对应位置的随机数已使用,0代表对应位置的随机数未使用。
26.分布式不重复随机序列生成方法还可包括:生成随机数,从数据存储空间的m个区中随机选择一个区,查看该区中的缓存队列是否有数据。如缓存队列中有数据,从缓存队列中取出一个作为生成随机数的结果,返回该随机数对应的全局地址作为生成的随机数。如缓存队列中无数据,随机选择n1个块读入缓存队列的内存中;对于某一个块,随机选择一个
偏移位置,然后向下搜索一个值为0的位(bit),值为0的位即为一个随机数;对于一个块,以上搜索执行n2次,返回n2个随机数;n1个块总计获得n1×
n2个随机数,存入缓存队列;n1、n2为自然数,一般取100~1000较为合适,具体数值依据实际需要随机数数量确定,不受此限。
27.图2是根据本技术实施例的分布式不重复随机数序列生成系统的示意图。
28.如图2所示,根据本技术的实施例的分布式管理可包括:序列号服务(serial number,sn服务)和配置管理服务(placement driver,pd服务)。序列号服务和用于接收客户端请求,生成随机数流程;配置管理服务用于管理分布式节点信息。分布式管理可包括3个序列号服务和3个配置管理服务;多个配置管理服务节点构成一个分布式系统,有一个主节点,其余的节点为从节点。
29.根据本技术的实施例的序列号服务可管理多个数据分区,不同的序列号服务会包含同一个数据分区,对于同一个数据分区会以主节点的名义存在于某个序列号服务里,当有数据变更时,变更操作会同步至其他的从节点,同一个数据分区即为分布式数据组。
30.以生成12位分布式不重复序列号为例,10
12
个数字作为1个位(bit)的地址,对应的存储空间中的1个位(bit)上,可以存储0或1。1个位(bit)的值,1代表对应位置的随机数已使用,0代表对应位置的随机数未使用。1个字节(byte)有8个位(bit),所以10
12
个数字仅需存储空间约117gb。
31.将数字范围分成多个块(block),1个块作为1个单独的文件存储。
32.譬如目前市面上通常的ssd磁盘的性能大概如下:
33.顺序读写:读,约500(mb/s);写,约500(mb/s);
34.512kb随机读写:读,约450(mb/s);写,约400(mb/s);
35.4kb随机读写:读,约40(mb/s);写,约150(mb/s)。
36.可以设定1个块的大小为4mb,即为512kb的8倍,有利于随机读写性能。此时总共有238419个块。每次读写都以块为最小单位;所有的块都按顺序编号:0、1、2
……
对于某一个位(bit),通过块的编号,以及位在块内的偏移位置,很容易计算出全局地址,该全局地址就是我们所需要的随机数字。
37.生成操作时,通过批量操作来提升性能。可以设定为每个批次生成10000个序列号/随机数。对于每一个批次,可以随机挑选100个块,对于其中的每一个块,因为已经读入内存中,随机挑选1个位置,向下搜索100个空闲的位(bit)可以快速实现。将1个批次生成的数字再进行打乱顺序后,存入内存作为缓存。
38.为方便设计分布式系统,数据存储分为多个区(region),一个区包含多个块。
39.存储空间分为多个区后,进行随机序列号生成。从数据存储空间的区中随机选择一个区,查看该区中的缓存队列是否有数据。如缓存队列中有数据,从缓存队列中取出一个作为生成随机数的结果,返回该随机数对应的全局地址作为生成的随机数。如缓存队列中无数据,随机选择100个块读入缓存队列的内存中;对于某一个块,随机选择一个偏移位置,然后向下搜索一个值为0的位(bit),值为0的位即为一个随机数;对于一个块,以上搜索执行100次,返回100个随机数;100个块总计获得10000个随机数,存入缓存队列。
40.根据本技术的实施例的分布式不重复随机序列生成系统包括:序列号服务模块、随机数生成模块和配置管理服务模块。序列号服务模块用于接收客户端请求,生成随机数流程;随机数生成模块,用于生成不重复随机数;配置管理服务模块,用于管理分布式节点
信息。此分布式不重复随机序列生成系统可通过媒介加载在计算机或任何服务器上。
41.根据本技术的实施例的随机数生成模块可用于生成随机数的数据存储空间划分区块,用于分布式管理,将用于生成随机数的数据存储空间划分为m个区,的每个区包含n个块,m和n为自然数;m个区分别均包含缓存队列,缓存队列用于存储从块中读入的随机数;对于数据存储空间中的某一个位,通过块的编号与位在块内的偏移位置计算出全局地址,该全局地址即对应为要生成的随机数字;数据存储空间的块的每一个位的值为1或0,其中,1代表对应位置的随机数已使用,0代表对应位置的随机数未使用。
42.根据本技术的实施例的随机数生成模块可生成随机数,从数据存储空间的m个区中随机选择1个区,查看该区中的缓存队列是否有数据,如缓存队列中有数据,从缓存队列中取出一个作为生成随机数的结果,返回该随机数对应的全局地址作为生成的随机数;如缓存队列中无数据,随机选择n1个块读入缓存队列的内存中;对于某一个块,随机选择一个偏移位置,然后向下搜索一个值为0的位,值为0的位即为一个随机数;对于一个块,以上搜索执行n2次,返回n2个随机数;n1个块总计获得n1
×
n2个随机数,存入缓存队列;n1、n2为自然数。
43.图3是根据本技术实施例的配置管理服务的示意图。
44.如图3所示,根据本技术的实施例的配置管理服务模块可接收配置管理客户端的请求,接收序列号服务模块发送的节点心跳,收集在线中的序列号服务节点信息;序列号服务节点增加或减少时,重新分配分区给合适的序列号节点;通过节点心跳响应实现:节点停止、启动分区;通过分区心跳响应实现:分区停止、分区增加节点、分区主节点变更。
45.图4是根据本技术实施例的序列号服务的示意图。
46.如图4所示,根据本技术的实施例的序列号服务模块可接收序列号客户端的请求,由分区的从节点转发客户端请求至分区的主节点;维护节点状态;定时上报节点心跳;维护多个分区的状态,每个分区定时上报分区心跳;分区的从节点定时发送心跳给主节点;分区主节点在从节点心跳的响应中,同步数据块的写操作。
47.因为依据本技术实施例的分布式不重复随机序列生成方法,其包括步骤:划分区块,便于分布式管理,即将用于生成随机数的数据存储空间划分为m个区,的每个区包含n个块,其中,m和n为自然数;m个区分别均包含缓存队列,缓存队列用于存储从块中读入的随机数;对于数据存储空间中的某一个位(bit),通过块的编号与位在块内的偏移位置计算出全局地址,该全局地址即对应为要生成的随机数字;数据存储空间的块的每一个位的值为1或0,其中,1代表对应位置的随机数已使用,0代表对应位置的随机数未使用,所以可实现如下有益效果:
48.对比只考虑一个运算的流程的传统方案,本方案成为了一个完整的系统,涵盖了系统的数据可靠性、服务的可用性;使生成的序列号随机数随机性和不重复性达到一个平衡,同时也保证了生成方法和系统的性能。
49.以上所述仅是本技术的示范性实施方式,而非用于限制本技术的保护范围,本技术的保护范围由所附的权利要求确定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1