CN113568891B - 分布式id生成方法、装置、服务器和可读存储介质 - Google Patents
分布式id生成方法、装置、服务器和可读存储介质 Download PDFInfo
- Publication number
- CN113568891B CN113568891B CN202110895313.8A CN202110895313A CN113568891B CN 113568891 B CN113568891 B CN 113568891B CN 202110895313 A CN202110895313 A CN 202110895313A CN 113568891 B CN113568891 B CN 113568891B
- Authority
- CN
- China
- Prior art keywords
- number segment
- server
- preset
- state
- segment
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 35
- 238000004590 computer program Methods 0.000 claims description 7
- 238000010586 diagram Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 2
- 230000002547 anomalous effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Computer And Data Communications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了分布式ID生成方法、装置、服务器和可读存储介质。ID调用服务器通过从ID生成服务器的关系型数据库中获取两个号段并将两个号段存储在ID调用服务器的缓冲区,其中,两个号段中的一个号段处于分配状态,两个号段中的另一个号段处于就绪状态;在处于分配状态的号段为对应的业务线分配ID的同时,若大于第一消耗阈值,则从ID生成服务器的关系型数据库中获取新号段并将新号段存储在ID调用服务器的缓冲区,新号段处于空闲状态;根据处于分配状态的号段的ID消耗量调整处于就绪状态的号段和处于空闲状态的新号段的工作状态。本申请可以保证业务线可以源源不断的获取到相应的ID,提高分布式***的容错能力。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种分布式ID生成方法、装置、服务器和可读存储介质。
背景技术
随着互联网的快速发展,项目体量越来越大,在复杂分布式***中,往往需要对大量的数据和消息进行唯一标识。数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息。
目前,一般通过数据库的自增ID机制生成有序的ID,但是,ID生成性能依赖数据库读写性能,当数据库异常时将导致整个分布式***不可用,即使在分布式***环境中部署多个数据库,每个数据库设置不同的初始值,并且步长为数据库总数,比如部署N个数据库,每个数据库的初始值就为0,1,2,3,……,N-1,步长为N。该ID生成策略仍存在很大的局限性,例如,***定义好步长之后,若想增加数据库,需要重新调整所有数据库的步长,***扩容困难,***灵活性差;每次获取一个ID都必须读写一次数据库,数据库压力大。
发明内容
鉴于上述问题,本发明提出一种分布式ID生成方法、装置、服务器和可读存储介质。
本申请提出一种分布式ID生成方法,所述方法包括:
从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,所述两个号段中的一个号段处于分配状态,所述两个号段中的另一个号段处于就绪状态;
在所述处于分配状态的号段为对应的业务线分配ID的同时,实时确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值;
若大于所述第一消耗阈值,则从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,所述新号段处于空闲状态;
根据所述处于分配状态的号段的ID消耗量调整处于就绪状态的号段和处于空闲状态的新号段的工作状态。
本申请所述的分布式ID生成方法,所述根据所述处于分配状态的号段的ID消耗量调整处于就绪状态的号段和处于空闲状态的新号段的工作状态,包括:
确定所述处于分配状态的号段的ID消耗量是否大于预设的第二消耗阈值,所述第二消耗阈值大于所述第一消耗阈值;
若大于所述第二消耗阈值,则将所述处于就绪状态的号段转换为所述分配状态,将所述处于空闲状态的新号段转换为所述就绪状态;
重新执行所述实时确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值。
本申请所述的分布式ID生成方法,所述从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,包括:
根据所述ID调用服务器对应的业务线标识参数、预设最小ID、预设最大ID和预设号段长度从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,两个号段中处于分配状态的号段的ID范围为[预设最小ID,预设最小ID+预设号段长度),两个号段中处于就绪状态的号段的ID范围为[预设最大ID-预设号段长度,预设最大ID)。
本申请所述的分布式ID生成方法,所述从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,包括:
根据所述ID调用服务器对应的业务线标识参数、处于就绪状态的号段的ID范围中的最大ID和预设号段长度从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,其中,所述新号段的ID范围为[处于就绪状态的号段的ID范围中的最大ID+1,处于就绪状态的号段的ID范围中的最大ID+1+预设号段长度)。
本申请还提出一种分布式ID生成装置,所述装置包括:
第一获取模块,用于从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,所述两个号段中的一个号段处于分配状态,所述两个号段中的另一个号段处于就绪状态;
判断模块,用于在所述处于分配状态的号段为对应的业务线分配ID的同时,实时确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值;
第二获取模块,用于若大于所述第一消耗阈值,则从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,所述新号段处于空闲状态;
ID分配模块,用于根据所述处于分配状态的号段的ID消耗量调整处于就绪状态的号段和处于空闲状态的新号段的工作状态。
本申请所述的分布式ID生成装置,所述根据所述处于分配状态的号段的ID消耗量调整处于就绪状态的号段和处于空闲状态的新号段的工作状态,包括:
确定所述处于分配状态的号段的ID消耗量是否大于预设的第二消耗阈值,所述第二消耗阈值大于所述第一消耗阈值;
若大于所述第二消耗阈值,则将所述处于就绪状态的号段转换为所述分配状态,将所述处于空闲状态的新号段转换为所述就绪状态;
重新执行所述确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值。
本申请所述的分布式ID生成装置,所述从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,包括:
根据所述ID调用服务器对应的业务线标识参数、预设最小ID、预设最大ID和预设号段长度从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,两个号段中处于分配状态的号段的ID范围为[预设最小ID,预设最小ID+预设号段长度),两个号段中处于就绪状态的号段的ID范围为[预设最大ID-预设号段长度,预设最大ID)。
本申请所述的分布式ID生成装置,所述从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,包括:
根据所述ID调用服务器对应的业务线标识参数、处于就绪状态的号段的ID范围中的最大ID和预设号段长度从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,其中,所述新号段的ID范围为[处于就绪状态的号段的ID范围中的最大ID+1,处于就绪状态的号段的ID范围中的最大ID+1+预设号段长度)。
本申请还提出一种服务器,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序在所述处理器上运行时执行本申请所述的分布式ID生成方法。
本申请还提出一种可读存储介质,其存储有计算机程序,所述计算机程序在处理器上运行时执行本申请所述的分布式ID生成方法。
本申请一方面,始终保持有且仅有一个号段有权限为对应的业务线分配ID,并且有且仅有一个号段处于就绪状态,以在从ID生成服务器的关系型数据库中获取新号段的时间较长,处于分配状态的号段无法支撑业务线需求时,可以将处于就绪状态的号段转换为分配状态,保证业务线可以源源不断的获取到相应的ID;另一方面,将三个号段保存在ID调用服务器的缓冲区中,可以在ID生成服务器出现问题时,ID调用服务器的缓冲区中的号段可以保证一定时间内的ID生成不间断,提高分布式***的容错能力。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对本发明保护范围的限定。在各个附图中,类似的构成部分采用类似的编号。
图1示出了本申请实施例提出的一种分布式***的结构示意图;
图2示出了本申请实施例提出的一种分布式ID生成方法的流程示意图;
图3示出了本申请实施例提出的现有方案中利用ID生成服务器维护缓冲区的示意图;
图4示出了本申请实施例提出的利用ID调用服务器维护缓冲区的示意图;
图5示出了本申请实施例提出的另一种分布式ID生成方法的流程示意图;
图6示出了本申请实施例提出的一种分布式ID生成装置的结构示意图。
10-分布式ID生成装置;11-第一获取模块;12-判断模块;13-第二获取模块;14-ID分配模块。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
在下文中,可在本发明的各种实施例中使用的术语“包括”、“具有”及其同源词仅意在表示特定特征、数字、步骤、操作、元件、组件或前述项的组合,并且不应被理解为首先排除一个或更多个其它特征、数字、步骤、操作、元件、组件或前述项的组合的存在或增加一个或更多个特征、数字、步骤、操作、元件、组件或前述项的组合的可能性。
此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
除非另有限定,否则在这里使用的所有术语(包括技术术语和科学术语)具有与本发明的各种实施例所属领域普通技术人员通常理解的含义相同的含义。所述术语(诸如在一般使用的词典中限定的术语)将被解释为具有与在相关技术领域中的语境含义相同的含义并且将不被解释为具有理想化的含义或过于正式的含义,除非在本发明的各种实施例中被清楚地限定。
在分布式***中,经常需要对大量的数据、消息、http请求等进行唯一标识,例如:对于分布式***,服务间相互调用需要唯一标识,调用链路分析的时候需要使用这个唯一标识。这个时候数据库自增主键已经不能满足需求,需要一种分布式ID生成方法生成全局唯一ID。
本申请公开的分布式ID生成方法,应用于分布式***,请参见图1,该分布式***包括ID生成服务器和多个ID调用服务器,ID生成服务器上部署有关系型数据库,关系型数据库可以为MySQL或PostgreSQL,每一个ID调用服务器对应的一个业务线,业务线包括订单业务、评论业务等,可以理解,ID调用服务器对应的业务线若是订单业务,则ID调用服务器从ID生成服务器获取的ID用于标识订单编号,ID调用服务器对应的业务线若是评论业务,则ID调用服务器从ID生成服务器获取的ID用于标识评论信息。
本申请所述的号段由一定范围的未分配ID组成。
本申请公开的分布式ID生成方法,ID调用服务器通过从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,所述两个号段中的一个号段处于分配状态,所述两个号段中的另一个号段处于就绪状态;在所述处于分配状态的号段为对应的业务线分配ID的同时,实时确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值;若大于所述第一消耗阈值,则从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,所述新号段处于空闲状态;根据所述处于分配状态的号段的ID消耗量调整处于就绪状态的号段和处于空闲状态的新号段的工作状态。本申请一方面,通过三个号段逐步交替使用,始终保持有且仅有一个号段有权限为对应的业务线分配ID,并且有且仅有一个号段处于就绪状态,以在从ID生成服务器的关系型数据库中获取新号段的时间较长,处于分配状态的号段无法支撑业务线需求时,可以将处于就绪状态的号段转换为分配状态,保证业务线可以源源不断的获取到相应的ID;另一方面,将三个号段保存在ID调用服务器的缓冲区中,可以在ID生成服务器出现问题时,ID调用服务器的缓冲区中的号段可以保证一定时间内的ID生成不间断,提高分布式***的容错能力。
实施例1
本申请的一个实施例,请参见图2,示出了一种分布式ID生成方法包括以下步骤:
S100:从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,所述两个号段中的一个号段处于分配状态,所述两个号段中的另一个号段处于就绪状态。
请参见图3,现有方案中是利用ID生成服务器维护缓冲区,缓冲区部署在ID生成服务器内部,ID生成服务器提供Restful的接口给ID调用服务器,以使ID调用服务器可以调用ID生成服务器缓冲区中的ID,ID生成服务器直接对外提供已经生成好的ID,该方案一旦ID生成服务器异常,将导致整个分布式***异常。
为了增强分布式***的容错能力,本实施例将缓冲区部署在分布式***的每一个ID调用服务器中,请参见图4,每一个ID调用服务器维护对应的缓冲区。该方案通过提供jar包由ID调用服务器引用,以使ID调用服务器可以从ID生成服务器的关系型数据库中获取号段,ID调用服务器维护缓冲区和生成ID的操作都是在其内部完成的,与ID生成服务器无关,此时ID生成服务器仅仅向ID调用服务器提供维护号段的必要信息即可。
将缓冲区部署在分布式***的每一个ID调用服务器中,一方面,由于多个ID调用服务器从ID生成服务器获取号段,多个ID调用服务器利用自身获取的号段为对应的业务线分配ID,多个ID调用服务器并行生成ID,大大提高了ID的生成速率;另一个方面,可以在ID生成服务器异常时,为分布式***提供一定时长的容错性能。
例如,现有方案中利用ID生成服务器维护缓冲区,使用者是需要通过http请求访问ID生成服务器生成ID,每需要1个ID就要调用一次ID生成服务,记1次网络IO,需要占用ID生成服务器的CPU资源。而ID调用服务器维护缓冲区,使用者虽然也是通过http请求访问ID,但是并不是直接请求获取ID,而是通过封装好的方法,去ID生成服务器获取ID号段等元数据(sid、mid和step等),在ID调用服务器中根据这些元数据组装ID Buffer,每次ID分配都是ID调用服务器自己分配的,不再需要访问ID生成服务器,不消耗ID生成服务器的CPU资源。假设利用ID生成服务器维护缓冲区的方案中,每生成10000个ID就需要发送10000次http请求;而ID调用服务器维护缓冲区,那么每生成10000个ID只需要发送10000/1000=10次http请求。
可以根据所述ID调用服务器对应的业务线标识参数、预设最小ID、预设最大ID和预设号段长度从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,两个号段中处于分配状态的号段的ID范围为[预设最小ID,预设最小ID+预设号段长度),两个号段中处于就绪状态的号段的ID范围为[预设最大ID-预设号段长度,预设最大ID)。
其中,业务线标识参数用于区分业务线,预设最小ID是处于分配状态的号段的起始ID,与预设最大ID相邻的前一个ID是处于就绪状态的号段的截止ID。
示范性的,若ID调用服务器对应的业务线的预设最小ID为1、预设最大ID为4001,预设号段长度为2000,则处于分配状态的号段的ID范围为[1,2001),处于就绪状态的号段的ID范围为[2001,4001)。
可以理解,上述举例,仅是示意性解释说明,预设号段长度和预设最大ID可以根据需求进行设定。在设置预设号段长度和预设最大ID时可以根据分布式***的容错性能和号段的加载速度设置预设号段长度和预设最大ID。
需要说明的是,预设号段长度越大和预设最大ID越大,分布式***的容错性能越强。
示范性的,预设号段长度越大和预设最大ID越大,每个号段包括的可用于分配的ID越多,例如,ID调用服务器的缓冲区中存储有处于分配状态的号段的ID范围为[1,3001),处于就绪状态的号段的ID范围为[3001,6001),总计6000个ID,若ID生成服务器出现故障,ID调用服务器每秒消耗100个ID,6000个ID可以在ID生成服务器宕机后的1分钟内有能力继续为对应业务线分配ID。显然,若想在ID生成服务器宕机后的更长内继续为对应业务线分配ID,可以适当增加预设号段长度和预设最大ID。
另外,需要说明的是,预设号段长度越大和预设最大ID越大,号段的加载时间越长,为了保证在适当的时间内完成号段加载,预设号段长度和预设最大ID的设置需要适当。
S200:在所述处于分配状态的号段为对应的业务线分配ID的同时,实时确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值。
若大于所述第一消耗阈值,则执行步骤S300和S400,若小于等于所述第一消耗阈值,则执行步骤S500。可以理解,在执行步骤S300和S400的同时,处于分配状态的号段持续为对应的业务线分配ID。
第一消耗阈值的取值范围可以是10%~50%,处于分配状态的号段的ID消耗量=(预设号段长度-处于分配状态的号段剩余的ID数目)/预设号段长度。
S300:从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,所述新号段处于空闲状态。
新号段存储在ID调用服务器的缓冲区,可以在ID生成服务器异常时,为分布式***提供一定时长的容错性能。
可以根据所述ID调用服务器对应的业务线标识参数、处于就绪状态的号段的ID范围中的最大ID和预设号段长度从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,其中,所述新号段的ID范围为[处于就绪状态的号段的ID范围中的最大ID+1,处于就绪状态的号段的ID范围中的最大ID+1+预设号段长度)。
示范性的,若处于就绪状态的号段的ID范围为[3001,6001),则所述新号段的ID范围为[6001,9001)。
S400:根据所述处于分配状态的号段的ID消耗量调整处于就绪状态的号段和处于空闲状态的新号段的工作状态。
实时监测处于分配状态的号段的ID消耗量,可以在处于分配状态的号段的ID消耗量达到100%时,快速将处于就绪状态的号段转换为分配状态,继续利用新的处于分配状态的号段为对应业务线分配ID,将处于空闲状态的新号段转换为就绪状态。可以在处于分配状态的号段的ID消耗量达到100%时,确定处于空闲状态的新号段是否加载完成,若完成,快速将处于空闲状态的新号段转换为分配状态,处于就绪状态的号段状态保持不变,以避免各个号段的状态频繁切换,若未完成,快速将处于就绪状态的号段转换为分配状态,继续利用新的处于分配状态的号段为对应业务线分配ID,将处于空闲状态的新号段转换为就绪状态。
S500:保持所述处于分配状态的号段为对应的业务线分配ID。
本实施例一方面,始终保持有且仅有一个号段有权限为对应的业务线分配ID,并且有且仅有一个号段处于就绪状态,以在从ID生成服务器的关系型数据库中获取新号段的时间较长,处于分配状态的号段无法支撑业务线需求时,可以将处于就绪状态的号段转换为分配状态,保证业务线可以源源不断的获取到相应的ID,避免ID分配的阻塞,三号段相互配合工作可以在突峰流量袭来的情况下,依然可以有条不紊的进行ID分配;另一方面,将三个号段保存在ID调用服务器的缓冲区中,可以在ID生成服务器出现问题时,ID调用服务器的缓冲区中的号段可以保证一定时间内的ID生成不间断,提高分布式***的容错能力。
实施例2
本申请的另一实施例,请参见图5,提出另一种分布式ID生成方法,可以利用步骤S410和S420替换上述步骤S400:
S100:从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,所述两个号段中的一个号段处于分配状态,所述两个号段中的另一个号段处于就绪状态。
S200:在所述处于分配状态的号段为对应的业务线分配ID的同时,实时确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值。
若大于所述第一消耗阈值,则执行步骤S300、S410和S420,若小于等于所述第一消耗阈值,则执行步骤S500。
S300:从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,所述新号段处于空闲状态。
S410:确定所述处于分配状态的号段的ID消耗量是否大于预设的第二消耗阈值,所述第二消耗阈值大于所述第一消耗阈值。
若大于所述第二消耗阈值,则执行步骤S420和S200,若小于等于所述第一消耗阈值,则执行步骤S500。
其中,第二消耗阈值的取值范围可以90%~95%。
示范性的,实时监测处于分配状态的号段的ID消耗量,可以在处于分配状态的号段的ID消耗量达到95%时,快速将处于就绪状态的号段转换为分配状态,继续将原有处于分配状态的号段消耗完后,再利用新的处于分配状态的号段为对应业务线分配ID,将处于空闲状态的新号段转换为就绪状态。以避免在将处于就绪状态的号段转换为分配状态的时间过长时,导致ID分配出现延迟,降低ID分配的效率。
S420:将所述处于就绪状态的号段转换为所述分配状态,将所述处于空闲状态的新号段转换为所述就绪状态。
S500:保持所述处于分配状态的号段为对应的业务线分配ID。
本实施例通过三个号段逐步交替使用,始终保持有且仅有一个号段有权限为对应的业务线分配ID,并且有且仅有一个号段处于就绪状态,以在从ID生成服务器的关系型数据库中获取新号段的时间较长,处于分配状态的号段无法支撑业务线需求时,可以将处于就绪状态的号段转换为分配状态,保证业务线可以源源不断的获取到相应的ID。
实施例3
本申请的另一个实施例,请参见图6,提出一种分布式ID生成装置10包括:第一获取模块11、判断模块12、第二获取模块13和ID分配模块14。
第一获取模块11,用于从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,所述两个号段中的一个号段处于分配状态,所述两个号段中的另一个号段处于就绪状态;判断模块12,用于在所述处于分配状态的号段为对应的业务线分配ID的同时,实时确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值;第二获取模块13,用于若大于所述第一消耗阈值,则从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,所述新号段处于空闲状态;ID分配模块14,用于根据所述处于分配状态的号段的ID消耗量调整处于就绪状态的号段和处于空闲状态的新号段的工作状态。
ID分配模块14,还用于确定所述处于分配状态的号段的ID消耗量是否大于预设的第二消耗阈值,所述第二消耗阈值大于所述第一消耗阈值;若大于所述第二消耗阈值,则将所述处于就绪状态的号段转换为所述分配状态,将所述处于空闲状态的新号段转换为所述就绪状态;重新执行所述确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值。
进一步的,所述从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,包括:根据所述ID调用服务器对应的业务线标识参数、预设最小ID、预设最大ID和预设号段长度从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,两个号段中处于分配状态的号段的ID范围为[预设最小ID,预设最小ID+预设号段长度),两个号段中处于就绪状态的号段的ID范围为[预设最大ID-预设号段长度,预设最大ID)。
进一步的,所述从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,包括:根据所述ID调用服务器对应的业务线标识参数、处于就绪状态的号段的ID范围中的最大ID和预设号段长度从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,其中,所述新号段的ID范围为[处于就绪状态的号段的ID范围中的最大ID+1,处于就绪状态的号段的ID范围中的最大ID+1+预设号段长度)。
本实施例公开的分布式ID生成装置10通过第一获取模块11、判断模块12、第二获取模块13和ID分配模块14的配合使用,用于执行上述实施例所述的分布式ID生成方法,上述实施例所涉及的实施方案以及有益效果在本实施例中同样适用,在此不再赘述。
可以理解,本申请还涉及一种服务器,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序在所述处理器上运行时执行本申请所述的分布式ID生成方法。
可以理解,本申请还涉及一种可读存储介质,其存储有计算机程序,所述计算机程序在处理器上运行时执行本申请所述的分布式ID生成方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和结构图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,结构图和/或流程图中的每个方框、以及结构图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块或单元可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或更多个模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个可读存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是智能手机、个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的可读存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。
Claims (8)
1.一种分布式ID生成方法,其特征在于,所述方法包括:
从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,所述两个号段中的一个号段处于分配状态,所述两个号段中的另一个号段处于就绪状态;
在所述处于分配状态的号段为对应的业务线分配ID的同时,实时确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值;
若大于所述第一消耗阈值,则从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,所述新号段处于空闲状态;
根据所述处于分配状态的号段的ID消耗量调整处于就绪状态的号段和处于空闲状态的新号段的工作状态;
其中,所述根据所述处于分配状态的号段的ID消耗量调整处于就绪状态的号段和处于空闲状态的新号段的工作状态,包括:
确定所述处于分配状态的号段的ID消耗量是否大于预设的第二消耗阈值,所述第二消耗阈值大于所述第一消耗阈值;
若大于所述第二消耗阈值,则将所述处于就绪状态的号段转换为所述分配状态,将所述处于空闲状态的新号段转换为所述就绪状态,继续将原所述处于就绪状态的号段消耗完后,再利用新的所述分配状态的号段为对应业务线分配ID;
若小于等于所述第二消耗阈值,则重新执行所述实时确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值;
所述第一消耗阈值的取值范围为10%~50%,所述第二消耗阈值的取值范围为90%~95%。
2.根据权利要求1所述的分布式ID生成方法,其特征在于,所述从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,包括:
根据所述ID调用服务器对应的业务线标识参数、预设最小ID、预设最大ID和预设号段长度从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,两个号段中处于分配状态的号段的ID范围为[预设最小ID,预设最小ID+预设号段长度),两个号段中处于就绪状态的号段的ID范围为[预设最大ID-预设号段长度,预设最大ID)。
3.根据权利要求1至2中任一项所述的分布式ID生成方法,其特征在于,所述从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,包括:
根据所述ID调用服务器对应的业务线标识参数、处于就绪状态的号段的ID范围中的最大ID和预设号段长度从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,其中,所述新号段的ID范围为[处于就绪状态的号段的ID范围中的最大ID+1,处于就绪状态的号段的ID范围中的最大ID+1+预设号段长度)。
4.一种分布式ID生成装置,其特征在于,所述装置包括:
第一获取模块,用于从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,所述两个号段中的一个号段处于分配状态,所述两个号段中的另一个号段处于就绪状态;
判断模块,用于在所述处于分配状态的号段为对应的业务线分配ID的同时,实时确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值;
第二获取模块,用于若大于所述第一消耗阈值,则从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,所述新号段处于空闲状态;
ID分配模块,用于根据所述处于分配状态的号段的ID消耗量调整处于就绪状态的号段和处于空闲状态的新号段的工作状态;
所述ID分配模块,还用于确定所述处于分配状态的号段的ID消耗量是否大于预设的第二消耗阈值,所述第二消耗阈值大于所述第一消耗阈值;
若大于所述第二消耗阈值,则将所述处于就绪状态的号段转换为所述分配状态,将所述处于空闲状态的新号段转换为所述就绪状态;
若小于等于所述第二消耗阈值,则重新执行所述确定处于分配状态的号段的ID消耗量是否大于预设的第一消耗阈值;
所述第一消耗阈值的取值范围为10%~50%,所述第二消耗阈值的取值范围为90%~95%。
5.根据权利要求4所述的分布式ID生成装置,其特征在于,所述从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,包括:
根据所述ID调用服务器对应的业务线标识参数、预设最小ID、预设最大ID和预设号段长度从ID生成服务器的关系型数据库中获取两个号段并将所述两个号段存储在ID调用服务器的缓冲区,其中,两个号段中处于分配状态的号段的ID范围为[预设最小ID,预设最小ID+预设号段长度),两个号段中处于就绪状态的号段的ID范围为[预设最大ID-预设号段长度,预设最大ID)。
6.根据权利要求4至5任一项所述的分布式ID生成装置,其特征在于,所述从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,包括:
根据所述ID调用服务器对应的业务线标识参数、处于就绪状态的号段的ID范围中的最大ID和预设号段长度从ID生成服务器的关系型数据库中获取新号段并将所述新号段存储在ID调用服务器的缓冲区,其中,所述新号段的ID范围为[处于就绪状态的号段的ID范围中的最大ID+1,处于就绪状态的号段的ID范围中的最大ID+1+预设号段长度)。
7.一种服务器,其特征在于,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序在所述处理器上运行时执行权利要求1至3任一项所述的分布式ID生成方法。
8.一种可读存储介质,其特征在于,其存储有计算机程序,所述计算机程序在处理器上运行时执行权利要求1至3任一项所述的分布式ID生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110895313.8A CN113568891B (zh) | 2021-08-05 | 2021-08-05 | 分布式id生成方法、装置、服务器和可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110895313.8A CN113568891B (zh) | 2021-08-05 | 2021-08-05 | 分布式id生成方法、装置、服务器和可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113568891A CN113568891A (zh) | 2021-10-29 |
CN113568891B true CN113568891B (zh) | 2024-02-20 |
Family
ID=78170447
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110895313.8A Active CN113568891B (zh) | 2021-08-05 | 2021-08-05 | 分布式id生成方法、装置、服务器和可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113568891B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114064806A (zh) * | 2021-11-24 | 2022-02-18 | 中国南方电网有限责任公司 | 分布式序列号生成方法、装置、计算机设备和存储介质 |
CN115145955A (zh) * | 2022-09-05 | 2022-10-04 | 泰豪软件股份有限公司 | 一种序列号生成方法及*** |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8856540B1 (en) * | 2010-12-29 | 2014-10-07 | Amazon Technologies, Inc. | Customized ID generation |
WO2016011883A1 (zh) * | 2014-07-24 | 2016-01-28 | 阿里巴巴集团控股有限公司 | 数据资源的获取方法、装置和*** |
WO2017080362A1 (zh) * | 2015-11-11 | 2017-05-18 | 中兴通讯股份有限公司 | 数据管理方法及装置 |
WO2017219848A1 (zh) * | 2016-06-22 | 2017-12-28 | 中兴通讯股份有限公司 | 分布式数据库中id的处理方法、管理***及服务器 |
CN109933609A (zh) * | 2019-01-30 | 2019-06-25 | 福建天泉教育科技有限公司 | 一种批量生成id的方法及终端 |
CN110555078A (zh) * | 2019-09-02 | 2019-12-10 | 上海摩库数据技术有限公司 | 分布式id生成 |
CN110704128A (zh) * | 2019-09-29 | 2020-01-17 | 北京达佳互联信息技术有限公司 | 标识分配方法及装置、标识分配设备和存储介质 |
CN111694841A (zh) * | 2020-04-29 | 2020-09-22 | 平安科技(深圳)有限公司 | 订单标识生成方法、装置、服务器及存储介质 |
CN111722918A (zh) * | 2019-03-21 | 2020-09-29 | 北京沃东天骏信息技术有限公司 | 业务标识码生成方法、装置、存储介质及电子设备 |
CN112181306A (zh) * | 2020-10-10 | 2021-01-05 | 杭州电子科技大学 | 一种号段模式下生成分布式id的方法 |
CN113064903A (zh) * | 2021-04-25 | 2021-07-02 | 小马国炬(玉溪)科技有限公司 | 一种全局id生成方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10630562B2 (en) * | 2017-10-17 | 2020-04-21 | Rovi Guides, Inc. | Systems and methods for improving quality of service while streaming code-agnostic content by editing manifest files |
-
2021
- 2021-08-05 CN CN202110895313.8A patent/CN113568891B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8856540B1 (en) * | 2010-12-29 | 2014-10-07 | Amazon Technologies, Inc. | Customized ID generation |
WO2016011883A1 (zh) * | 2014-07-24 | 2016-01-28 | 阿里巴巴集团控股有限公司 | 数据资源的获取方法、装置和*** |
WO2017080362A1 (zh) * | 2015-11-11 | 2017-05-18 | 中兴通讯股份有限公司 | 数据管理方法及装置 |
WO2017219848A1 (zh) * | 2016-06-22 | 2017-12-28 | 中兴通讯股份有限公司 | 分布式数据库中id的处理方法、管理***及服务器 |
CN109933609A (zh) * | 2019-01-30 | 2019-06-25 | 福建天泉教育科技有限公司 | 一种批量生成id的方法及终端 |
CN111722918A (zh) * | 2019-03-21 | 2020-09-29 | 北京沃东天骏信息技术有限公司 | 业务标识码生成方法、装置、存储介质及电子设备 |
CN110555078A (zh) * | 2019-09-02 | 2019-12-10 | 上海摩库数据技术有限公司 | 分布式id生成 |
CN110704128A (zh) * | 2019-09-29 | 2020-01-17 | 北京达佳互联信息技术有限公司 | 标识分配方法及装置、标识分配设备和存储介质 |
CN111694841A (zh) * | 2020-04-29 | 2020-09-22 | 平安科技(深圳)有限公司 | 订单标识生成方法、装置、服务器及存储介质 |
CN112181306A (zh) * | 2020-10-10 | 2021-01-05 | 杭州电子科技大学 | 一种号段模式下生成分布式id的方法 |
CN113064903A (zh) * | 2021-04-25 | 2021-07-02 | 小马国炬(玉溪)科技有限公司 | 一种全局id生成方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113568891A (zh) | 2021-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113568891B (zh) | 分布式id生成方法、装置、服务器和可读存储介质 | |
CN110008021B (zh) | 内存管理方法、装置、电子设备及计算机可读存储介质 | |
CN107729135B (zh) | 按序进行并行数据处理的方法和装置 | |
CN109032803B (zh) | 数据处理方法和装置、客户端 | |
CN108133031A (zh) | 一种过滤推荐视频候选结果的方法及装置 | |
CN112346829A (zh) | 一种用于任务调度的方法及设备 | |
CN103324533A (zh) | 分布式数据处理方法、装置及*** | |
CN109145053B (zh) | 数据处理方法和装置、客户端、服务器 | |
CN112527746A (zh) | 日志存储方法、装置、设备及存储介质 | |
CN108399175B (zh) | 一种数据存储、查询方法及其装置 | |
CN109597800A (zh) | 一种日志分发方法及装置 | |
CN111399761B (zh) | 存储资源分配方法、装置及设备、存储介质 | |
CN110597879B (zh) | 时序数据的处理方法和装置 | |
CN115408149A (zh) | 一种时序存储引擎内存设计及分配方法及装置 | |
CN107515807B (zh) | 一种存储监控数据的方法及装置 | |
CN110688065A (zh) | 一种存储空间管理方法、***、电子设备及存储介质 | |
CN109271097B (zh) | 数据处理方法、数据处理装置和服务器 | |
CN110333984B (zh) | 接口异常检测方法、装置、服务器及*** | |
CN112398892B (zh) | 服务分配方法、装置及设备 | |
CN116775764A (zh) | 分布式id生成方法、分布式id生成装置及存储介质 | |
CN116204311A (zh) | Pod集群扩缩容方法、装置、计算机设备和存储介质 | |
CN108664322A (zh) | 数据处理方法及*** | |
CN109150819B (zh) | 一种攻击识别方法及其识别*** | |
CN112948501B (zh) | 数据解析方法、装置及*** | |
CN114157717B (zh) | 一种微服务动态限流的***及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |