一种流水号生成方法、装置及服务器的制造方法

文档序号:9352897阅读:1011来源:国知局
一种流水号生成方法、装置及服务器的制造方法
【技术领域】
[0001]本发明涉及计算机数据结构领域,尤其涉及一种流水号生成方法、装置及服务器。
【背景技术】
[0002]目前,基于数据库系统生成流水号的方案中,需要依赖集中式的数据库,当多个应用访问同一数据库获取流水号时,数据库的压力过大。而且依赖单一的数据库,存在集中式单点,单点发生故障的时候会波及到整个系统或者网络,从而导致整个系统或者网络的瘫痪。因此,依赖数据库生成流水号的方案存在集中式单点,系统性能存在瓶颈。
[0003]现有方案中往往通过增加外部数据库进行分布式改造来解决上述集中式问题,如,通过跨机房数据库双活来进行跨IDC机房的分布式改造,但是交替访问不同数据库会存在交互效率慢的劣势,而且按照此方案获取到的流水号无法保证唯一。
[0004]在目前“互联网+”的大环境下,电子商务和020应用的井喷式增长,对后端业务处理能力有了更高的要求。需要后端应用能够提供分布式处理的能力,支持分布式集群部署,尤其是跨IDC机房的分布部署。
[0005]在分布式集群环境中,要求生成流水号的服务的应用端具有更高的并发处理能力,更好的可扩展性。目前在已有的方案中对以上都没有较好的解决。

【发明内容】

[0006]本发明实施例提供一种流水号生成方法、装置及服务器,用以实现分布式集群环境中的应用端不依赖数据库生成流水号,生成流水号的服务具有更高的并发处理能力。
[0007]本发明实施例提供一种流水号生成方法,该方法包括:
[0008]接收流水号分配请求;
[0009]获取接收该流水号分配请求的应用节点的节点编号,其中,在所述应用节点所属的分布式集群中任两个应用节点的节点编号不同;
[0010]获取所述应用节点所在服务器的当前系统时间;
[0011]根据所述流水号分配请求,生成与所述流水号分配请求关联的时间序列值,其中,所述应用节点在所述当前系统时间的时间精度内生成的任两个时间序列值不同;
[0012]对所述节点编号、所述当前系统时间和所述时间序列值的二进制数进行位或运算,生成单个长整型LONG数据结构类型的流水号。
[0013]上述方法流程实现了分布式集群中的单个应用节点不依赖外部数据库,单个应用节点自身就可以实时的根据流水号分配请求生成一个流水号,进而解决了依赖单一的数据库获取流水号导致数据库压力过大的问题。进一步的,分布式集群中单个应用节点在最小单位时间长度内生成的任两个时间序列值不同,使得单个应用节点在最小单位时间长度内可以为接收多个流水号分配请求,以及生成与这多个流水号分配请求关联的流水号,因此,单个应用节点在最小单位时间长度内就能生成若干多个流水号,使得分布式集群中的后端应用生成流水号的服务具有效率高,可扩展性好的特点。在应用节点所属的分布式集群中任两个应用节点的节点编号不同,可实现同一个分布式集群中的多个应用节点并发执行生成流水号的操作,使得分布式集群环境中生成流水号的服务具有更高的并发处理能力。应用节点生成的流水号可保存为单个LONG类型,流水号的长度仅为8字节,在计算机组成结构、计算机编程语言和数据库中,都对LONG类型有很好的支持,存储和检索都很方便,而且效率高。
[0014]进一步地,所述流水号分配请求是来自所述应用节点所在服务器的流水号分配请求,或者是外部服务器发送的流水号分配请求,其中,所述外部服务器与所述应用节点所在的服务器从属于同一个分布式集群。
[0015]上述方法流程中,能够实现从属于同一分布式集群中的不同服务器的应用节点所生成的流水号都是唯一的。
[0016]进一步地,获取所述应用节点所在服务器的当前系统时间,包括:
[0017]通过时间同步服务获取所述应用节点所在服务器的当前系统时间。时间同步服务可以保证在同一个分布式集群中的所有机器的时间是一致的,使得应用节点所在服务器的当前系统时间与同一个分布式集群中的其他服务器的当前系统时间同步。
[0018]进一步地,根据所述流水号分配请求,生成与所述流水号分配请求关联的时间序列值,包括:
[0019]根据所述流水号分配请求,查找内存中是否存在当前系统时间的时间精度内的计数,若有,则将所述计数标记为与所述流水号分配请求关联的时间序列值,将所述计数自增后保存在内存中;若否,则将初始值标记为与所述流水号分配请求关联的时间序列值,将所述初始值自增后的计数保存在内存中。
[0020]该实施方式将自增后的计数保存在内存中,与保存在本地文件中相比,能够提高应用节点生成时间序列值的效率,可以节省存储时间。
[0021]进一步地,在所述单个LONG数据结构类型的流水号中,
[0022]所述当前系统时间的二进制数存储在所述单个LONG数据结构的高位。将当前系统时间的二进制数存储在单个LONG数据结构的高位,便于检索一段时间长度内的流水号。如果当前系统时间的二进制数存储在单个LONG数据结构的有效存储位数不够用时,可将最高位原来置零的bit也用来存储当前系统时间的二进制数,增加当前系统时间的二进制数的存储长度,进而实现在更长的时间段内生成的流水号都是唯一的。
[0023]基于相同的发明构思,本发明实施例还提供一种流水号生成装置,所述装置包括用于根据流水号分配请求执行生成流水号操作的应用节点,所述应用节点包括:
[0024]接收单元,用于接收流水号分配请求;
[0025]第一获取单元,用于获取所述应用节点的节点编号,其中,在所述应用节点所属的分布式集群中任两个应用节点的节点编号不同;
[0026]第二获取单元,用于获取所述应用节点所在服务器的当前系统时间;
[0027]第一生成单元,用于根据所述流水号分配请求,生成与所述流水号分配请求关联的时间序列值,其中,所述应用节点在所述当前系统时间的时间精度内生成的任两个时间序列值不同;
[0028]第二生成单元,用于对所述节点编号、所述当前系统时间和所述时间序列值的二进制数进行位或运算,生成单个长整型LONG数据结构类型的流水号。
[0029]进一步地,所述流水号分配请求是来自所述应用节点所在服务器的流水号分配请求,或者是外部服务器发送的流水号分配请求,其中,所述外部服务器与所述应用节点所在的服务器从属于同一个分布式集群。
[0030]进一步地,所述第二获取单元具体用于:
[0031]通过时间同步服务获取所述应用节点所在服务器的当前系统时间。
[0032]进一步地,所述第一生成单元具体用于:
[0033]根据所述流水号分配请求,查找内存中是否存在当前系统时间的时间精度内的计数,若有,则将所述计数标记为与所述流水号分配请求关联的时间序列值,将所述计数自增后保存在内存中;若否,则将初始值标记为与所述流水号分配请求关联的时间序列值,将所述初始值自增后的计数保存在内存中。
[0034]进一步地,在所述单个LONG数据结构类型的流水号中,
[0035]所述当前系统时间的二进制数存储在所述单个LONG数据结构的高位。
[0036]基于相同的发明构思,本发明实施例还提供一种服务器,所述服务器包括M个上述实施例中的流水号生成装置,其中,M为大于或等于I的正整数。单个服务器中包括多个上述实施例中的生成流水号装置,可实现同一个分布式集群中的多个应用节点并发执行生成流水号的操作,使得分布式集群环境中生成流水号的服务具有更高的并发处理能力。
[0037]上述实施例中,应用节点根据接收到的流水号分配请求,获取该应用节点的节点编号,以及接收到该流水号分配请求时该应用节点所在服务器的当前系统时间,并生成与该流水号分配请求关联的时间序列值,通过对所述节点编号、所述当前系统时间和所述时间序列值的二进制数进行位或运算,生成单个长整型LONG数据结构类型的流水号,实现了分布式集群中的单个应用节点不依赖外部数据库,单个应用节点自身就可以实时的根据流水号分配请求生成一个流水号,进而解决了依赖单一的数据库获取流水号导致数据库压力过大的问题。进一步的,分布式集群中单个应用节点在最小单位时间长度内生成的任两个时间序列值不同,使得单个应用节点在最小单位时间长度内可以为接收多个流水号分配请求,以及生成与这多个流水号分配请求关联的流水号,因此,上述实施例中的单个应用节点在最小单位时间长度内就能生成若干多个流水号,使得分布式集群中的后端应用生成流水号的服务具
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1