分布式ID生成制造技术

技术编号:22783743 阅读:29 留言:0更新日期:2019-12-11 04:12
本申请公开了一种分布式ID生成方法,包括以下步骤:S1、读取数据库中存储的业务类型标识和ID生成参数;S2、加载并缓存业务类型标识和ID生成参数;S3、业务类型标识与ID生成参数保持对应关系;S4、接收ID生成指令;S5、根据业务类型标识查找缓存数据;S6、判定ID当前值大小,返回ID生成结果;S7、运行申请新ID段任务。本申请的分布式ID生成方法可产生全局唯一且单调递增的ID,任何情况下ID不会重复或者回退,具备高效率产生ID的能力,具备提供多种ID的能力。

Distributed ID generation

The application discloses a distributed ID generation method, which comprises the following steps: S1. Reading the business type identification and ID generation parameters stored in the database; S2. Loading and caching the business type identification and ID generation parameters; S3. Keeping the corresponding relationship between the business type identification and ID generation parameters; S4. Receiving the ID generation instruction; S5. Searching the cache data according to the business type identification; S6. Determining The current value size of ID returns the result of ID generation; S7. Run the task of applying for a new ID segment. The distributed ID generation method of the application can generate globally unique and monotonically increasing ID. in any case, the ID will not be repeated or fallback. It has the ability to generate ID efficiently and provide multiple IDs.

【技术实现步骤摘要】
分布式ID生成
本申请涉及计算机
,尤其是涉及一种分布式ID生成方法和装置。
技术介绍
在分布式系统中,需要对数据、消息、http请求等进行唯一标识,要求产生全局唯一且单调递增的ID(identity,唯一编码),任何情况下ID不能重复或者回退,具备高效率产生ID和提供多种ID的能力。目前,常见的方案有UUID、Flicker方案、snowflake算法等,但已经不能满足需求,需要生成全局唯一ID的服务。
技术实现思路
本申请实施例提供一种分布式ID生成方法和装置。本申请实施例采用下述技术方案:一种分布式ID生成方法,其特征在于,所述分布式ID生成方法包括以下步骤:S1、读取数据库中存储的业务类型标识和ID生成参数,所述ID生成参数包括ID起始分配值、申请ID号段长度、最近一次申请ID号段时间和加载比例因子;S2、加载并缓存业务类型标识和ID生成参数;S3、所述业务类型标识与所述ID生成参数保持对应关系,根据所述ID生成参数,确定每个业务的ID当前值,ID当前值默认等于ID生成参数的ID起始分配值,缓存每个业务的ID当前值;S4、接收ID生成指令,所述ID生成指令携带某个业务类型标识为请求参数;S5、根据业务类型标识查找缓存数据,如果确定缓存中有该业务类型标识对应的ID当前值,获取ID当前值,将ID当前值加一设置为新的ID当前值;S6、判定ID当前值大小,返回ID生成结果:如果ID当前值大于ID起始分配值并且小于ID更新阈值,返回ID当前值,所述ID更新阈值为申请ID号段长度×加载比例因子+ID起始分配值;如果ID当前值大于ID更新阈值并且小于ID分配结束值,产生一个申请新ID段的任务,所述ID结束值为ID起始分配值加上申请ID号段长度;如果ID当前值大于ID分配结束值,返回错误;S7、运行申请新ID段任务。一种分布式ID生成装置,包括:数据参数读取模块,缓存模块,ID生成请求接收模块,ID生成模块,缓存更新模块,更新判断模块,ID号段长度确定模块,参数更新模块。本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:本申请的分布式ID生成方法可产生全局唯一且单调递增的ID,任何情况下ID不会重复或者回退。ID长度尽可能短小,可降低存储或传输资源的浪费。支持多种ID,在实际开发过程中,可满足不同的应用场景的ID生成需求,例如:每个消息、每个用户请求、每次事务的处理等。容灾性高,ID生成服务内部有号段缓存,即使MySQL宕机,短时间内仍能正常对外提供服务。可以自定义ID起始分配值的大小,非常方便业务从原有的ID方式上迁移过来。ID生成利用缓存模块,运算效率高,因此具有高效率产生ID的能力。ID生成服务可以很方便的线性扩展,性能完全能够支撑大多数业务场景。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1为本申请实施例提供的分布式ID生成方法的总体流程图。图2为本申请实施例提供的分布式ID生成方法的设计示意图。图3为本申请实施例提供的分布式ID生成方法的核心算法示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。应当认识到,本申请的实施例可以由计算机硬件、硬件和软件的组合或者通过存储在非暂时性计算机可读存储器中的计算机指令来实现或实施。本申请的方法可以使用标准编程技术——包括配置有计算机程序的非暂时性计算机可读存储介质在计算机程序中实现,其中如此配置的存储介质使得计算机以特定和预定义的方式操作——根据在具体实施例中描述的方法和附图。每个程序可以以高级过程或面向对象的编程语言来实现以与计算机系统通信。然而,若需要,该程序可以以汇编或机器语言实现。在任何情况下,该语言可以是编译或解释的语言。此外,为此目的该程序能够在编程的专用集成电路上运行。此外,可按任何合适的顺序来执行本文描述的过程的操作,除非本文另外指示或以其他方式明显地与上下文矛盾。本文描述的过程(或变型和/或其组合)可在配置有可执行指令的一个或多个计算机系统的控制下执行,并且可作为共同地在一个或多个处理器上执行的代码(例如,可执行指令、一个或多个计算机程序或一个或多个应用)由硬件或其组合来实现。所述计算机程序包括可由一个或多个处理器执行的多个指令。进一步,本申请的方法可以在可操作地连接至合适的任何类型的计算平台中实现,包括但不限于个人电脑、迷你计算机、主框架、工作站、网络或分布式计算环境、单独的或集成的计算机平台或者与带电粒子工具或其它成像装置通信等等。本申请的各方面可以以存储在非暂时性存储介质或设备上的机器可读代码来实现,无论是可移动的还是集成至计算平台,如硬盘、光学读取和/或写入存储介质、RAM、ROM等,使得其可由可编程计算机读取,当存储介质或设备由计算机读取时可用于配置和操作计算机以执行在此所描述的过程。此外,机器可读代码,或其部分可以通过有线或无线网络传输。当此类媒体包括结合微处理器或其他数据处理器实现上文所述步骤的指令或程序时,本文所述的专利技术包括这些和其他不同类型的非暂时性计算机可读存储介质。当根据本申请所述的方法和技术编程时,本申请还包括计算机本身。计算机程序能够应用于输入数据以执行本文所述的功能,从而转换输入数据以生成存储至非易失性存储器的输出数据。输出信息还可以应用于一个或多个输出设备如显示器。在本申请优选的实施例中,转换的数据表示物理和有形的对象,包括显示器上产生的物理和有形对象的特定视觉描绘。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本专利技术的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。实施例1请参照附图1~3,一种分布式ID生成方法,包括以下步骤:S1、读取MySQL数据库中存储的多个业务的业务类型标识及多个业务的ID生成参数。S2、加载并缓存多个业务的业务类型标识和多个业务的ID生成参数,其中缓存服务由Redis提供,所述ID生成参数包括ID起始分配值、申请ID号段长度、最近一次申请ID号段时间和加载比例因子等。S3、所述业务类型标识与所述ID生成参数保持对应关系。根据所述ID生成参数,确定每个业务的ID当前值,ID当前值默认等于ID生成参数的ID起始分配值,缓存每个业务的ID当前值。S4、接收ID生成指令,所述ID生成指令携带某个业务类型标识为请求参数。S5、根据业务类型标识查找缓存数据,如果确定缓存中有该业务类型标识对应的ID当前值,获取ID当前值,将ID当前值加一本文档来自技高网...

【技术保护点】
1.一种分布式ID生成方法,其特征在于,所述分布式ID生成方法包括以下步骤:/nS1、读取数据库中存储的业务类型标识和ID生成参数,所述ID生成参数包括ID起始分配值、申请ID号段长度、最近一次申请ID号段时间和加载比例因子;/nS2、加载并缓存业务类型标识和ID生成参数;/nS3、所述业务类型标识与所述ID生成参数保持对应关系,根据所述ID生成参数,确定每个业务的ID当前值,ID当前值默认等于ID生成参数的ID起始分配值,缓存每个业务的ID当前值;/nS4、接收ID生成指令,所述ID生成指令携带某个业务类型标识为请求参数;/nS5、根据业务类型标识查找缓存数据,如果确定缓存中有该业务类型标识对应的ID当前值,获取ID当前值,将ID当前值加一设置为新的ID当前值;/nS6、判定ID当前值大小,返回ID生成结果:如果ID当前值大于ID起始分配值并且小于ID更新阈值,返回ID当前值,所述ID更新阈值为申请ID号段长度×加载比例因子+ID起始分配值;如果ID当前值大于ID更新阈值并且小于ID分配结束值,产生一个申请新ID段的任务,所述ID结束值为ID起始分配值加上申请ID号段长度;如果ID当前值大于ID分配结束值,返回错误;/nS7、运行申请新ID段任务。/n...

【技术特征摘要】
1.一种分布式ID生成方法,其特征在于,所述分布式ID生成方法包括以下步骤:
S1、读取数据库中存储的业务类型标识和ID生成参数,所述ID生成参数包括ID起始分配值、申请ID号段长度、最近一次申请ID号段时间和加载比例因子;
S2、加载并缓存业务类型标识和ID生成参数;
S3、所述业务类型标识与所述ID生成参数保持对应关系,根据所述ID生成参数,确定每个业务的ID当前值,ID当前值默认等于ID生成参数的ID起始分配值,缓存每个业务的ID当前值;
S4、接收ID生成指令,所述ID生成指令携带某个业务类型标识为请求参数;
S5、根据业务类型标识查找缓存数据,如果确定缓存中有该业务类型标识对应的ID当前值,获取ID当前值,将ID当前值加一设置为新的ID当前值;
S6、判定ID当前值大小,返回ID生成结果:如果ID当前值大于ID起始分配值并且小于ID更新阈值,返回ID当前值,所述ID更新阈值为申请ID号段长度×加载比例因子+ID起始分配值;如果ID当前值大于ID更新阈值并且小于ID分配结束值,产生一个申请新ID段的任务,所述ID结束值为ID起始分配值加上申请ID号段长度;如果ID当前值大于ID分配结束值,返回错误;
S7、运行申请新ID段任务。


2.根据权利要求1所述的分布式ID生成方法,其特征在于,S1步骤为:读取MySQL数据库中存储的多个业务的业务类型标识及多个业务的ID生成参数。


3.根据权利要求1所述的分布式ID生成方法,其特征在于,缓存服务由Redis提供。


4.根据权利要求1所述的分布式ID生成方法,其特征在于,S7步骤为:
第一步,利用分布式锁,对更新任务进行加锁;
第二步,计算新申请ID号段长度,根据上一次更新号段的周期和申请ID号段长度,确定新申请ID号段长度;
第三步,根据目标业务类型标识...

【专利技术属性】
技术研发人员:杨造
申请(专利权)人:上海摩库数据技术有限公司
类型:发明
国别省市:上海;31

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

1