分布式全球唯一ID生成方法技术

技术编号:15401078 阅读:92 留言:0更新日期:2017-05-24 12:13
本发明专利技术提出了一种分布式全球唯一ID生成方法,包括如下步骤:S1:设定为逻辑进程编码的进程ID区间的位数和个体ID区间的位数;S2:设定游戏出生时间;S3:启动服务器,计算个体ID区间的可分配初始值;S4:接收ID分配指令,生成分布式全球唯一ID;S5:当关闭服务器后,服务器重新启动时执行步骤S3。本发明专利技术的分布式全球唯一ID生成方法,能有效应对进程意外崩溃的问题、避免了对计算机IO所造成巨大压力的唯一ID生成算法,并且生成的ID便于保存和传输,满足游戏服务器的实际使用需求。

Distributed global unique ID generation method

The invention provides a distributed only global ID generation method, which comprises the following steps: S1: set the interval process ID as the logical process of encoding digits and individual ID interval number; S2: set the game time of birth; S3: start the server, to calculate the individual ID interval can be divided with the initial value; S4: receiving ID distribution of instruction, the only global ID distributed generation; S5: when shut down the server, S3 server restarts execution steps. The present invention distributed only global ID generation method can effectively deal with the problem, the process of collapse of the accident is avoided only ID generation algorithm of the enormous pressure on the computer IO, and generates the ID for storage and transmission, meet the actual needs of game servers.

【技术实现步骤摘要】
分布式全球唯一ID生成方法
本专利技术涉及游戏服务器处理技术,具体涉及分布式全球唯一ID的生成方法。
技术介绍
游戏服务器为了支撑游戏的正常运行,对游戏中每个人物、物品甚至每项变量都需要设置一个唯一的ID,以保证游戏的正常运行。现有的唯一ID生成方法一般有两种形式,UUID生成算法和累加生成法。UUID生成算法虽然技术成熟、效果好,但其长度太长,不利于保存和传输,难以在游戏服务器中应用;而累加生成法在生成下一个ID前,必须记录当前生成的最大ID,如果当前生成的最大ID是记录在内存上,当出现异常情况时将丢失记录;如果当前生成的最大ID记录在硬盘中的话,由于ID生成是一个非常频繁的操作,将会对计算机的硬盘IO造成压力。
技术实现思路
针对上述现有技术不足,本专利技术要解决的技术问题是提供一种能有效应对进程意外崩溃的问题、避免了对计算机IO所造成巨大压力的唯一ID生成算法,并且生成的ID便于保存和传输,满足游戏服务器的实际使用需求。为解决上述技术问题,本专利技术采用的技术方案为,分布式全球唯一ID生成方法,其特征在于:包括如下步骤:S1:设定为逻辑进程编码的进程ID区间的位数,并为每个逻辑进程编码生成一个进程ID区间的值;设定个体ID区间的位数,为每个单位时间段按顺序划分个体ID区间的可分配值;所述分布式全球唯一ID由进程ID区间和个体ID区间拼接而成;每个逻辑进程的进程ID区间的值对应的个体ID区间,为该逻辑进程可分配ID的区间;S2:设定游戏出生时间;S3:启动服务器,获取启动当时的时间,根据启动当时时间与游戏出生时间,计算个体ID区间的可分配初始值,并将所述可分配初始值减1作为每个逻辑进程的已分配值,并分别缓存所述已分配值;S4:接收ID分配指令,确定对应的逻辑进程,对该逻辑进程的已分配值进行加1,作为待分配个体ID区间的值;根据接收ID分配指令的时间与游戏出生时间,计算个体ID区间的可分配最大值;判断待分配个体ID区间的值是否小于个体ID区间的可分配最大值,若是,则保存该待分配个体ID区间的值缓存为新的已分配值,并把该待分配个体ID区间的值与其对应的逻辑进程的进程ID区间的值拼接成新分配的分布式全球唯一ID,分布式全球唯一ID生成完毕,返回本步骤的开始之处,等待下一个ID分配指令;否则终止进程;S5:当关闭服务器后,服务器重新启动时执行步骤S3。这样的方案使,ID分配的初始值不依赖原始的累加,而是根据时间计算出,即使出现异常情况丢失记录,新的初始值也必然不会与已生成的ID值重复,保证ID的唯一性;同时也采用局部累加的方式对ID号进行新分配,使得ID的位数可以大大缩短也能满足实际需要。进一步的技术方案为,所述步骤S1中,为每个单位时间段按顺序划分个体ID区间的可分配值的步骤,具体为:设定在一个单位时间段内的每个逻辑进程可分配的ID数量的最大值,以该最大值为周期划分个体ID区间的取值范围,每个取值范围按顺序对应一个单位时间段;所述步骤S3中,根据启动当时时间与游戏出生时间,计算个体ID区间的可分配初始值的步骤,具体为:根据启动当时时间与游戏出生时间的差值,以游戏出生时间作为第一个单位时间段的起点,确定启动当时时间所在的单位时间段,确定该单位时间段对应的个体ID区间取值范围,该取值范围的最小值为所述可分配初始值;所述步骤S4中,根据接收ID分配指令的时间与游戏出生时间,计算个体ID区间的可分配最大值的步骤,具体为:根据接收ID分配指令的时间与游戏出生时间的差值,以游戏出生时间作为第一个单位时间段的起点,确定启动当时时间所在的单位时间段,确定该单位时间段对应的个体ID区间取值范围,该取值范围的最大值为所述个体ID区间的可分配最大值。进一步的技术方案为,所述步骤S1中,进程ID区间的位数根据游戏所需逻辑进程数量而确定,逻辑进程的数量减1后以二进制数表示,该二进制数的位数为进程ID区间的最少所需位数;个体ID区间的位数由一个单位时间段内的每个逻辑进程可分配的ID数量的最大值预计值与游戏寿命预计值而确定,该最大值预计值与游戏寿命预计值相乘后减1以二进制数表示,该二进制数的位数为个体ID区间的最少所需位数。优选地,步骤S1中,所述进程ID区间设定为16位,个体ID区间设定为48位。更优地,所述单位时间段为游戏最小时间单位。更优地,所述步骤S3中还包括在启动服务器时,检测服务器所获取的当前时间是否合法的步骤。本专利技术的分布式全球唯一ID生成方法,能有效应对进程意外崩溃的问题、避免了对计算机IO所造成巨大压力的唯一ID生成算法,并且生成的ID便于保存和传输,满足游戏服务器的实际使用需求。附图说明图1是本专利技术分布式全球唯一ID生成方法所生成的ID组成示意图。图2是本专利技术分布式全球唯一ID生成方法的流程图。具体实施方式下面结合附图和具体实施例对本专利技术作进一步的详细描述。本专利技术的分布式全球唯一ID生成方法,如图2所示,包括如下步骤:S1:设定为逻辑进程编码的进程ID区间的位数和个体ID区间的位数,所述分布式全球唯一ID由进程ID区间和个体ID区间拼接而成(如图1所示)。进程ID区间的位数可以根据游戏所需逻辑进程数量而确定,逻辑进程的数量减1后以二进制数表示,该二进制数的位数为进程ID区间的最少所需位数;例如,如果一个游戏只有3个逻辑进程,3减1后以二进制数表示的值为“10”,位数为2位,即最少需要2位才能完全表示所有3个逻辑进程;本实施例中,进程ID区间的位数为16位,可以表示65536个逻辑进程,一般大型网络游戏有都不会超过几万个逻辑进程,16位的进程ID区间可以完全满足使用需要,并且符合计算机存储习惯,16位对应2个字节。对规模较小的游戏可以减少进程ID区间的位数。个体ID区间的位数由一个单位时间段内的每个逻辑进程可分配的ID数量的最大值预计值与游戏寿命预计值而确定,该最大值预计值与游戏寿命预计值相乘后减1以二进制数表示,该二进制数的位数为个体ID区间的最少所需位数。例如,预计一个单位时间段内,一个逻辑进程最多需要分配4个ID,游戏的寿命为4个单位时间段,则总共最大需要16个ID,则至少需要4位才能满足全部表示该16个ID的需要。本实施例中,个体ID区间设为48位,这样每个逻辑进程可分配的ID数目是1298908800,按照游戏寿命为5年(实际实践中,一般网络游戏不超过5年寿命),则每秒钟(假设单位时间段1秒)游戏逻辑进程可分配的ID的个数是1009235个,完全能满足使用需求。为每个逻辑进程编码生成一个进程ID区间的值,例如为游戏中的某个武器生成相关逻辑进程生成进程ID区间的值为“0000000000000001”;每个逻辑进程的进程ID区间的值对应的个体ID区间,为该逻辑进程可分配ID的区间,即对于进程ID区间值为“0000000000000001”的该项逻辑进程,由该项逻辑进程所分配出的ID必然表示为“0000000000000001+48位个体ID区间值”的形式,而每个逻辑进程都有48位的空间去对自身的ID进行分配。为每个单位时间段按顺序划分个体ID区间的可分配值,具体为:设定在一个单位时间段内的每个逻辑进程可分配的ID数量的最大值,以该最大值为周期划分个体ID区间的取值范围,每个取值范围按顺序对应一个单位时本文档来自技高网...
分布式全球唯一ID生成方法

【技术保护点】
分布式全球唯一ID生成方法,其特征在于:包括如下步骤:S1:设定为逻辑进程编码的进程ID区间的位数,并为每个逻辑进程编码生成一个进程ID区间的值;设定个体ID区间的位数,为每个单位时间段按顺序划分个体ID区间的可分配值;所述分布式全球唯一ID由进程ID区间和个体ID区间拼接而成;每个逻辑进程的进程ID区间的值对应的个体ID区间,为该逻辑进程可分配ID的区间;S2:设定游戏出生时间;S3:启动服务器,获取启动当时的时间,根据启动当时时间与游戏出生时间,计算个体ID区间的可分配初始值,并将所述可分配初始值减1作为每个逻辑进程的已分配值,并分别缓存所述已分配值;S4:接收ID分配指令,确定对应的逻辑进程,对该逻辑进程的已分配值进行加1,作为待分配个体ID区间的值;根据接收ID分配指令的时间与游戏出生时间,计算个体ID区间的可分配最大值;判断待分配个体ID区间的值是否小于个体ID区间的可分配最大值,若是,则保存该待分配个体ID区间的值缓存为新的已分配值,并把该待分配个体ID区间的值与其对应的逻辑进程的进程ID区间的值拼接成新分配的分布式全球唯一ID,分布式全球唯一ID生成完毕,返回本步骤的开始之处,等待下一个ID分配指令;否则终止进程;S5:当关闭服务器后,服务器重新启动时执行步骤S3。...

【技术特征摘要】
1.分布式全球唯一ID生成方法,其特征在于:包括如下步骤:S1:设定为逻辑进程编码的进程ID区间的位数,并为每个逻辑进程编码生成一个进程ID区间的值;设定个体ID区间的位数,为每个单位时间段按顺序划分个体ID区间的可分配值;所述分布式全球唯一ID由进程ID区间和个体ID区间拼接而成;每个逻辑进程的进程ID区间的值对应的个体ID区间,为该逻辑进程可分配ID的区间;S2:设定游戏出生时间;S3:启动服务器,获取启动当时的时间,根据启动当时时间与游戏出生时间,计算个体ID区间的可分配初始值,并将所述可分配初始值减1作为每个逻辑进程的已分配值,并分别缓存所述已分配值;S4:接收ID分配指令,确定对应的逻辑进程,对该逻辑进程的已分配值进行加1,作为待分配个体ID区间的值;根据接收ID分配指令的时间与游戏出生时间,计算个体ID区间的可分配最大值;判断待分配个体ID区间的值是否小于个体ID区间的可分配最大值,若是,则保存该待分配个体ID区间的值缓存为新的已分配值,并把该待分配个体ID区间的值与其对应的逻辑进程的进程ID区间的值拼接成新分配的分布式全球唯一ID,分布式全球唯一ID生成完毕,返回本步骤的开始之处,等待下一个ID分配指令;否则终止进程;S5:当关闭服务器后,服务器重新启动时执行步骤S3。2.根据权利要求1所述的分布式全球唯一ID生成方法,其特征在于:所述步骤S1中,为每个单位时间段按顺序划分个体ID区间的可分配值的步骤,具体为:设定在一个单位时间段内的每个逻辑进程可分配的ID数量的最大值,以该最大值为周期划分个体ID区间的取值范围,每个取值范围按顺序对应一个单位时间段;所述步骤S3中...

【专利技术属性】
技术研发人员:吴开
申请(专利权)人:广东星辉天拓互动娱乐有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1