CN116610676A - 一种分布式系统中标识的生成方法、装置、设备及介质 - Google Patents
一种分布式系统中标识的生成方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN116610676A CN116610676A CN202310602653.6A CN202310602653A CN116610676A CN 116610676 A CN116610676 A CN 116610676A CN 202310602653 A CN202310602653 A CN 202310602653A CN 116610676 A CN116610676 A CN 116610676A
- Authority
- CN
- China
- Prior art keywords
- snowflake
- workerid
- identification
- identifier
- generating
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 54
- 241000533950 Leucojum Species 0.000 claims abstract description 279
- 238000013507 mapping Methods 0.000 claims description 17
- 230000002776 aggregation Effects 0.000 claims description 14
- 238000004220 aggregation Methods 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 4
- 230000004083 survival effect Effects 0.000 claims description 4
- 238000007726 management method Methods 0.000 description 34
- 238000010586 diagram Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 6
- 230000001360 synchronised effect Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012546 transfer 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种分布式系统中标识的生成方法、装置、设备及介质,分布式系统中的每个子系统中运行有雪花标识生成组件和业务应用的应用实例;应用于任意一个子系统中的雪花标识生成组件,包括:响应于该子系统中目标应用实例的标识生成请求,根据标识生成请求包含的目标数据表的表名称,确定该子系统中与目标数据表的表名称对应的目标雪花标识生成器;使用目标雪花标识生成器生成目标数据表中的唯一标识。这样,分布式系统中每个子系统中设置有与各数据表对应的多实例化的雪花标识生成器,通过多实例化的雪花标识生成器可以并发生成分布式子系统在不同数据表中的唯一标识,能够提高应用服务生成标识的性能。
Description
技术领域
本申请涉及分布式系统技术领域,尤其是涉及一种分布式系统中标识的生成方法、装置、设备及介质。
背景技术
在单元化分布式业务系统数据库分库的架构下,全局唯一标识(ID)无法再单纯通过数据库序列来实现。雪花算法是分布式架构下唯一标识的解决方案之一,往往用来生成流水号或流水明细编号。
然而现有的雪花算法中,为了保证生成的标识的全局唯一性,雪花ID生成器是单例模式,所有依赖雪花ID的地方都使用同一个雪花ID生成器进行生成。然而,雪花ID生成器在生成标识时需要使用synchronize同步锁,因此全局的业务模型都使用同一个雪花ID生成器就会阻塞在同一个同步锁上,即导致在依赖雪花ID的业务模型较多且并发较大的场景下,会造成大量的同步阻塞而影响性能。
发明内容
有鉴于此,本申请的目的在于提供一种分布式系统中标识的生成方法、装置、设备及介质,分布式系统中每个子系统中设置有与各数据表对应的多实例化的雪花标识生成器,通过多实例化的雪花标识生成器可以并发生成分布式子系统在不同数据表中的唯一标识,能够提高应用服务生成标识的性能。
本申请实施例提供了一种分布式系统中标识的生成方法,所述分布式系统中的每个子系统中运行有雪花标识生成组件和业务应用的应用实例;所述生成方法应用于任意一个子系统中的雪花标识生成组件;所述生成方法包括:
响应于该子系统中目标应用实例的标识生成请求,根据所述标识生成请求包含的目标数据表的表名称,确定该子系统中与所述目标数据表的表名称对应的目标雪花标识生成器;
使用所述目标雪花标识生成器生成所述目标数据表中的唯一标识。
进一步的,所述根据所述标识生成请求包含的目标数据表的表名称,确定该子系统中与所述目标数据表的表名称对应的目标雪花标识生成器,包括:
根据所述目标数据表的表名称和预先构建的表名称与雪花标识生成器之间的映射关系,查找该子系统中是否存在与所述目标数据表的表名称对应的雪花标识生成器;
若存在,则将与所述目标数据表的表名称对应的雪花标识生成器确定为所述目标雪花标识生成器;
若不存在,则实例化生成雪花标识生成器,保存所述目标数据表的表名称与新生成的雪花标识生成器之间的映射关系,并将新生成的雪花标识生成器确定为所述目标雪花标识生成器。
进一步的,所述实例化生成雪花标识生成器的方式,包括:
调用雪花标识生成器的生成工具类新建初始雪花标识生成器;
向雪花标识管理节点发送查询参数,以获取所述雪花标识管理节点根据所述查询参数为所述初始雪花标识生成器分配的workerID;
将所述workerID缓存至所述初始雪花标识生成器,并保存所述初始雪花标识生成器至内存,得到雪花标识生成器。
进一步的,所述向雪花标识管理节点发送查询参数,以获取所述雪花标识管理节点根据所述查询参数为所述初始雪花标识生成器分配的workerID,包括:
所述雪花标识生成组件向所述雪花标识管理节点发送查询参数;其中,所述查询参数包括所述业务应用的名称、所述目标应用实例的IP地址和所述目标数据表的表名称;
所述雪花标识管理节点以所述查询参数中包括的所述目标应用实例的名称、所述目标应用实例的IP地址和所述目标数据表的表名称作为聚合索引,并根据所述聚合索引查询数据库中是否存在对应的workerID;
若存在,则将由所述聚合索引查询到的workerID确定为所述初始雪花标识生成器对应的workerID;
若不存在,则根据所述目标应用实例的名称和所述目标数据表的表名称查找对应的可用workerID范围,根据所述可用workerID范围为所述初始雪花标识生成器生成workerID,并通过所述数据库存储为所述初始雪花标识生成器新生成的workerID和所述聚合索引之间的映射关系;
所述雪花标识管理节点将所述初始雪花标识生成器的workerID返回给所述雪花标识生成组件。
进一步的,所述生成方法还包括:
所述雪花标识生成组件向所述雪花标识管理节点轮询发送心跳信号;其中,所述心跳信号用于向所述雪花标识管理节点表征所述雪花标识生成组件所在的该子系统中各个应用实例的存活状态;
所述雪花标识管理节点根据接收到的所述心跳信号,更新所述数据库中与每个应用实例相关的workerID的更新时间。
进一步的,所述若不存在,则根据所述目标应用实例的名称和所述目标数据表的表名称查找对应的可用workerID范围,根据所述可用workerID范围为所述初始雪花标识生成器生成workerID,包括:
以所述目标应用实例的名称和所述目标数据表的表名称作为索引,在所述数据库中查找所述索引是否存在对应的已分配workerID集合;
若存在对应的已分配workerID集合,则根据已分配workerID集合和workerID的最大可分配范围,确定所述索引是否存在对应的可用workerID范围;
若存在对应的可用workerID范围,则根据可用workerID范围为所述初始雪花标识生成器分配workerID;
若不存在对应的可用workerID范围,则将所述已分配workerID集合中更新时间最早的workerID重新分配为所述初始雪花标识生成器的workerID。
进一步的,所述使用所述目标雪花标识生成器生成所述目标数据表中的唯一标识,包括:
使用所述目标雪花标识生成器根据标识位、时间戳、所述workerID和自增序列号生成所述目标数据表中的唯一标识。
本申请实施例还提供了一种分布式系统中标识的生成装置,所述分布式系统中的每个子系统中运行有雪花标识生成组件和业务应用的应用实例;所述生成装置应用于任意一个子系统中的雪花标识生成组件;所述生成装置包括:
确定模块,响应于该子系统中目标应用实例的标识生成请求,根据所述标识生成请求包含的目标数据表的表名称,确定该子系统中与所述目标数据表的表名称对应的目标雪花标识生成器;
生成模块,使用所述目标雪花标识生成器生成所述目标数据表中的唯一标识。
本申请实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如上述的一种分布式系统中标识的生成方法的步骤。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如上述的一种分布式系统中标识的生成方法的步骤。
本申请实施例提供的一种分布式系统中标识的生成方法、装置、设备及介质,应用于分布式系统中各个子系统;所述分布式系统中的每个子系统中运行有雪花标识生成组件和业务应用的应用实例;所述生成方法应用于任意一个子系统中的雪花标识生成组件;所述生成方法包括:响应于该子系统中目标应用实例的标识生成请求,根据所述标识生成请求包含的目标数据表的表名称,确定该子系统中与所述目标数据表的表名称对应的目标雪花标识生成器;使用所述目标雪花标识生成器生成所述目标数据表中的唯一标识。
这样,分布式系统中每个子系统中设置有与各数据表对应的多实例化的雪花标识生成器,通过多实例化的雪花标识生成器可以并发生成分布式子系统在不同数据表中的唯一标识,能够提高应用服务生成标识的性能。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例所提供的一种分布式系统中标识的生成方法的流程图;
图2示出了本申请实施例所提供的一种分布式系统中标识的生成过程的示意图;
图3示出了本申请实施例所提供的一种workerID的分配过程的示意图;
图4示出了本申请实施例所提供的一种分布式系统中标识的生成装置的结构示意图;
图5示出了本申请实施例所提供的一种电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的每个其他实施例,都属于本申请保护的范围。
经研究发现,在单元化分布式业务系统数据库分库的架构下,全局唯一标识(ID)无法再单纯通过数据库序列来实现。雪花算法是分布式架构下唯一标识的解决方案之一,往往用来生成流水号或流水明细编号。
然而现有的雪花算法中,为了保证生成的标识的全局唯一性,雪花ID生成器是单例模式,所有依赖雪花ID的地方都使用同一个雪花ID生成器进行生成。然而,雪花ID生成器在生成标识时需要使用synchronize同步锁。简单来说,使用Synchronized关键字将一段代码逻辑,用一把锁给锁起来,只有获得了这把锁的线程才访问。并且同一时刻,只有一个线程能持有这把锁,这样就保证了同一时刻只有一个线程能执行被锁住的代码。因此,全局的业务模型都使用同一个雪花ID生成器就会阻塞在同一个同步锁上,虽然可以确保代码的线程安全,但在依赖雪花ID的业务模型较多且并发较大的场景下,会造成大量的同步阻塞而影响性能。
基于此,本申请实施例提供了一种分布式系统中标识的生成方法、装置、设备及介质,分布式系统中每个子系统中设置有与各数据表对应的多实例化的雪花标识生成器,通过多实例化的雪花标识生成器可以并发生成分布式子系统在不同数据表中的唯一标识,能够提高应用服务生成标识的性能。
请参阅图1,图1为本申请实施例所提供的一种分布式系统中标识的生成方法的流程图。所述分布式系统中的每个子系统中运行有雪花标识生成组件和业务应用的应用实例;以银行系统为例,银行系统往往采用分布式系统架构,包括存款系统和贷款系统等多个对外提供微服务的子系统;为保证应用服务的高可用性,每个子系统中可以运行有业务应用的多个应用实例,例如,存款系统中可运行有存款应用的多个应用实例。这些子系统的应用实例在处理业务的过程中会需要唯一标识,如存款系统中存款应用实例在登记记账明细时需要一个唯一有序的id来在存款系统的数据表中进行存储。本申请实施例所提供的所述生成方法应用于任意一个子系统中的雪花标识生成组件,如图1中所示,所述生成方法,包括:
S101、响应于该子系统中目标应用实例的标识生成请求,根据所述标识生成请求包含的目标数据表的表名称,确定该子系统中与所述目标数据表的表名称对应的目标雪花标识生成器。
这里,不同子系统有各自独立的数据存储空间;而在每个子系统中的数据存储空间中存储了在不同的业务场景会操作的不同数据表。在任意一个子系统中,任意一个应用实例在业务过程中均可能会触发标识生成请求,并发送至该子系统中的雪花标识生成组件,以请求在相应数据表中生成唯一标识。而表名称可以唯一地指示一个数据表,故同一个应用实例产生的不同标识请求可以分别包含相同或不同数据表的表名称;不同的应用实例产生的不同标识请求也可以分别包含相同或不同数据表的表名称。
例如,任意一个存款应用实例在动账业务场景下进行转账、存入和支取等业务交易时,会需要一个唯一有序的id在操作记录数据表中进行交易记录,因此触发的标识生成请求中会包含操作记录数据表的表名称;又例如,存款应用实例在账户信息维护场景下进行开户和销户等操作时,会需要一个唯一有序的id在账户信息表中进行操作记录,因此触发的标识生成请求中会包含账户信息表的表名称。
因此该步骤中,雪花标识生成组件接收其所在子系统中任一应用实例发送的标识生成请求,通过解析标识生成请求确定其包含的目标数据表的表名称,进而在该系统中确定出与目标数据表的表名称对应的雪花标识生成器。
在一种可能的实施方式中,步骤S101可包括:根据所述目标数据表的表名称和预先构建的表名称与雪花标识生成器之间的映射关系,查找该子系统中是否存在与所述目标数据表的表名称对应的雪花标识生成器;若存在,则将与所述目标数据表的表名称对应的雪花标识生成器确定为所述目标雪花标识生成器;若不存在,则实例化生成雪花标识生成器,保存所述目标数据表的表名称与新生成的雪花标识生成器之间的映射关系,并将新生成的雪花标识生成器确定为所述目标雪花标识生成器。
这里,可预先构建数据表的表名称(seqName)与雪花标识生成器之间的映射关系,并将这种映射关系保存在相应子系统的内存中。在具体实施时,表名称与雪花标识生成器之间的映射关系可以通过k,v结构实现。
需要说明的是,通过数据表的表名称(seqName)来映射相应的雪花标识生成器,这是因为虽然不同雪花标识生成器生成的标识可能会重复,但同一个雪花标识生成器生成的雪花标识之间可以保证全局唯一;而生成的标识作为序列号只需要在同一个业务数据表中唯一,但是在不同业务数据表中可以重复,以此来支持并发生成雪花标识的特性。
因此,在新生成对应的雪花标识生成器的时候,可以直接将数据表的表名称与新生成的雪花标识生成器进行映射,以进行后续生成标识的应用。而如果不进行表名称与雪花标识生成器之间的映射,在后续生成标识时,由于不同雪花标识生成器之间生成的标识可能会导致标识并不唯一,使得同一数据表可能存在相同的或重复的标识。
在具体实施时,可以调用雪花标识生成器的生成工具类SnowIdGenUtil到内存中根据目标数据表的表名称seqName查找是否存在对应的雪花标识生成器;若存在,可直接从内存中获取与表名称对应的雪花标识生成器作为目标雪花标识生成器,用以生成唯一雪花标识;若不存在,则需要实例化生成新的雪花标识生成器,将新生成的雪花标识生成器确定为所述目标雪花标识生成器,并保存目标数据表的表名称与新生成的雪花标识生成器之间的映射关系至内存,以供后续查找。
需要说明的是,现有技术中,简单的雪花算法是分布式系统的全局都使用一个雪花标识生成器,也就是说全局不同的数据表之间也使用同一个雪花标识生成器,因此虽然生成的标识可以保证全局唯一,但是由于生成标识的过程中会有同步锁,如果多个数据表用同一个生成器就会阻塞在同一个同步锁上引起性能问题。
而本申请实施例提供的生成方法可以将分布式系统中每个子系统中的雪花标识生成器按不同的数据表划分成多实例来提高生成标识的性能。
在一种可能的实施方式中,可通过以下方式实例化生成雪花标识生成器:调用雪花标识生成器的生成工具类新建初始雪花标识生成器;向雪花标识管理节点发送查询参数,以获取所述雪花标识管理节点根据所述查询参数为所述初始雪花标识生成器分配的workerID;将所述workerID缓存至所述初始雪花标识生成器,并保存所述初始雪花标识生成器至内存,得到雪花标识生成器。
这里,实例化雪花标识生成器需要调用雪花标识生成器的生成工具类SnowIdGenUtil新建初始雪花标识生成器;向雪花标识管理节点发送查询数据,以通过雪花标识管理节点获取该数据表(序列)对应的唯一的workerid并缓存到初始雪花标识生成器中,再将实例化的雪花标识生成器保存到内存(ConcurrentHashMap)中,得到雪花标识生成器。
这样,当后续该分布式子系统中再有应用实例产生针对相同数据表的标识生成请求,可直接根据标识生成请求包含的数据表的表名称从内存中获取到雪花标识生成器以生成标识,无需再远程调用雪花标识管理节点。
值得注意的是,现有技术中传统的雪花算法由0(1位)+时间戳(41位)+数据中心ID(5位)+workerid(5位)+序列号(12位)组成,传统的雪花算法中数据中心ID和workerid由系统所在的物理机的IP地址确定。但在如今云原生容器化的业态下,多个虚拟容器(应用实例)可能绑定在同一个物理机上,因为虚拟容器所在的物理机的IP地址确定,导致workerid也相同,因此这一方式可能无法适用。
请参阅图2和图3,图2为本申请实施例所提供的一种分布式系统中标识的生成过程的示意图;图3为本申请实施例所提供的一种workerID的分配过程的示意图。如图2和图3所示,在一种可能的实施方式中,可通过以下方式为所述初始雪花标识生成器分配workerID:
雪花标识生成组件向雪花标识管理节点发送查询参数;其中,所述查询参数包括所述业务应用的名称、所述目标应用实例的IP地址和所述目标数据表的表名称;雪花标识管理节点以目标应用实例的名称、目标应用实例的IP地址和目标数据表的表名称作为聚合索引,查询后台数据库中是否存在对应的workerID;若存在,则将查询到的workerID确定为初始雪花标识生成器对应的workerID;若不存在,则根据目标应用实例的名称和目标数据表的表名称在后台数据库查找中对应的可用workerID范围,根据所述可用workerID范围为初始雪花标识生成器生成workerID,并通过后台数据库存储为初始雪花标识生成器新生成的workerID和聚合索引之间的映射关系,以供后续查询;最后,雪花标识管理节点将查询到的或新生成的初始雪花标识生成器的workerID返回给雪花标识生成组件。
在一种可能的实施方式中,所述生成方法还包括:所述雪花标识生成组件向所述雪花标识管理节点轮询发送心跳信号;其中,所述心跳信号用于向所述雪花标识管理节点表征所述雪花标识生成组件所在的该子系统中各个应用实例的存活状态;所述雪花标识管理节点根据接收到的所述心跳信号,更新所述数据库中与每个应用实例相关的workerID的更新时间。示例性的,心跳信号包括的参数可以是各应用实例的IP地址。
在一种可能的实施方式中,根据所述目标应用实例的名称和所述目标数据表的表名称查找对应的可用workerID范围,根据所述可用workerID范围为所述初始雪花标识生成器生成workerID的步骤,可包括:
以所述目标应用实例的名称和所述目标数据表的表名称作为索引,在所述数据库中查找所述索引是否存在对应的已分配workerID集合;若存在对应的已分配workerID集合,则根据已分配workerID集合和workerID的最大可分配范围,确定所述索引是否存在对应的可用workerID范围;若存在对应的可用workerID范围,则根据可用workerID范围为所述初始雪花标识生成器分配workerID;若不存在对应的可用workerID范围,则将所述已分配workerID集合中更新时间最早的workerID重新分配为所述初始雪花标识生成器的workerID。
这里,workerID设置有最大可分配范围,例如0-1023。随着分配的进程,可用workerID范围不断变化,例如,可按照从小到大的顺序,从原始workerID范围依次为不同雪花标识生成器分配出的递增的workerID。
考虑到workerID范围有限,导致workerID超过1024个时,计算出的雪花id会重复,所以同一个应用序列使用的应用节点数量最多不能超过1024个,且由于是同一个应用名称+同一个数据表可通过ip分配1024个workerID,所以不同应用或不同数据表都会重新从0开始分配,将workerID的可用性大幅提高,相当于相同应用+相同数据表就有1024个workerid,相同应用的不同数据表会各有1024个workerID可供分配。
同时,由于云原生容器化云原生容器化的生态下,虚拟容器的IP会由于重新部署而发生改变,所以即便应用的节点数量没有1024个,workerID的分配也可能会突破1024,所以需要用一定的淘汰策略将之前过期的IP进行淘汰,这里使用的是心跳报告的方式进行ip淘汰,雪花标识生成组件每隔一定时间间隔,如几秒,都会发送心跳包给雪花标识管理节点,雪花标识管理节点将数据库中与ip相关的所有的workerID的更新时间。
在此基础上,雪花标识管理节点以目标应用实例的名称和目标数据表的表名称作为联合索引,在数据库中查找这一联合索引是否存在对应的已分配workerID集合;若不存在对应的已分配workerID集合,则按照一定规则分配workerID,例如,默认从0开始分配;若存在对应的已分配workerID集合,则根据已分配workerID集合和workerID的最大可分配范围,确定所述索引是否存在对应的可用workerID范围;若存在对应的可用workerID范围,则根据可用workerID范围为初始雪花标识生成器分配workerID,例如,每次分配的workerID递增1;若不存在对应的可用workerID范围,则说明此时需要对过期IP地址进行淘汰,以回收workerID;具体的,可将已分配workerID集合中更新时间最早的workerID重新分配为初始雪花标识生成器的workerID,代表该workerID被另一IP抢占,并重新更新到数据库后将workerID返回。
返回参阅图1,S102、使用所述目标雪花标识生成器生成所述目标数据表中的唯一标识。
该步骤中,可使用所述目标雪花标识生成器根据标识位、时间戳、所述workerID和自增序列号生成所述目标数据表中的唯一标识。其中,雪花标识生成器生成的标识由标识位(1位)+时间戳(41位)+workerID(10位)+序列号(12位)组成。对应于上述示例,workerID的最大可分配范围为0-1023,而0-1023这一范围中任意workerID均可用一个十位二进制数表示,因此,本申请实施例所提供的生成方法没有改变所生成的数据表中的唯一标识的标识长度,可以很好地适配原有的数据库及算法等。
本申请实施例提供的一种分布式系统中标识的生成方法,所述分布式系统中的每个子系统中运行有雪花标识生成组件和业务应用的应用实例;所述生成方法应用于任意一个子系统中的雪花标识生成组件;所述生成方法包括:响应于该子系统中目标应用实例的标识生成请求,根据所述标识生成请求包含的目标数据表的表名称,确定该子系统中与所述目标数据表的表名称对应的目标雪花标识生成器;使用所述目标雪花标识生成器生成所述目标数据表中的唯一标识。
这样,分布式系统中每个子系统中设置有与各数据表对应的多实例化的雪花标识生成器,通过多实例化的雪花标识生成器可以并发生成分布式子系统在不同数据表中的唯一标识,能够提高应用服务生成标识的性能。
请参阅图4,图4为本申请实施例所提供的一种分布式系统中标识的生成装置的结构示意图。所述分布式系统中的每个子系统中运行有雪花标识生成组件和业务应用的应用实例;所述生成装置应用于任意一个子系统中的雪花标识生成组件;如图4中所示,所述生成装置200包括:
确定模块210,响应于该子系统中目标应用实例的标识生成请求,根据所述标识生成请求包含的目标数据表的表名称,确定该子系统中与所述目标数据表的表名称对应的目标雪花标识生成器;
生成模块220,使用所述目标雪花标识生成器生成所述目标数据表中的唯一标识。
进一步的,所述确定模块210根据所述标识生成请求包含的目标数据表的表名称,确定该子系统中与所述目标数据表的表名称对应的目标雪花标识生成器,包括:
根据所述目标数据表的表名称和预先构建的表名称与雪花标识生成器之间的映射关系,查找该子系统中是否存在与所述目标数据表的表名称对应的雪花标识生成器;
若存在,则将与所述目标数据表的表名称对应的雪花标识生成器确定为所述目标雪花标识生成器;
若不存在,则实例化生成雪花标识生成器,保存所述目标数据表的表名称与新生成的雪花标识生成器之间的映射关系,并将新生成的雪花标识生成器确定为所述目标雪花标识生成器。
进一步的,所述确定模块210实例化生成雪花标识生成器的方式,包括:
调用雪花标识生成器的生成工具类新建初始雪花标识生成器;
向雪花标识管理节点发送查询参数,以获取所述雪花标识管理节点根据所述查询参数为所述初始雪花标识生成器分配的workerID;
将所述workerID缓存至所述初始雪花标识生成器,并保存所述初始雪花标识生成器至内存,得到雪花标识生成器。
进一步的,所述确定模块210向雪花标识管理节点发送查询参数,以获取所述雪花标识管理节点根据所述查询参数为所述初始雪花标识生成器分配的workerID,包括:
所述雪花标识生成组件向所述雪花标识管理节点发送查询参数;其中,所述查询参数包括所述业务应用的名称、所述目标应用实例的IP地址和所述目标数据表的表名称;
所述雪花标识管理节点以所述查询参数中包括的所述目标应用实例的名称、所述目标应用实例的IP地址和所述目标数据表的表名称作为聚合索引,并根据所述聚合索引查询数据库中是否存在对应的workerID;
若存在,则将由所述聚合索引查询到的workerID确定为所述初始雪花标识生成器对应的workerID;
若不存在,则根据所述目标应用实例的名称和所述目标数据表的表名称查找对应的可用workerID范围,根据所述可用workerID范围为所述初始雪花标识生成器生成workerID,并通过所述数据库存储为所述初始雪花标识生成器新生成的workerID和所述聚合索引之间的映射关系;
所述雪花标识管理节点将所述初始雪花标识生成器的workerID返回给所述雪花标识生成组件。
进一步的,所述生成装置200还包括查询模块;所述查询模块用于:
所述雪花标识生成组件向所述雪花标识管理节点轮询发送心跳信号;其中,所述心跳信号用于向所述雪花标识管理节点表征所述雪花标识生成组件所在的该子系统中各个应用实例的存活状态;
所述雪花标识管理节点根据接收到的所述心跳信号,更新所述数据库中与每个应用实例相关的workerID的更新时间。
进一步的,若不存在,则所述确定模块210根据所述目标应用实例的名称和所述目标数据表的表名称查找对应的可用workerID范围,根据所述可用workerID范围为所述初始雪花标识生成器生成workerID,包括:
以所述目标应用实例的名称和所述目标数据表的表名称作为索引,在所述数据库中查找所述索引是否存在对应的已分配workerID集合;
若存在对应的已分配workerID集合,则根据已分配workerID集合和workerID的最大可分配范围,确定所述索引是否存在对应的可用workerID范围;
若存在对应的可用workerID范围,则根据可用workerID范围为所述初始雪花标识生成器分配workerID;
若不存在对应的可用workerID范围,则将所述已分配workerID集合中更新时间最早的workerID重新分配为所述初始雪花标识生成器的workerID。
进一步的,所述生成模块220使用所述目标雪花标识生成器生成所述目标数据表中的唯一标识,包括:
使用所述目标雪花标识生成器根据标识位、时间戳、所述workerID和自增序列号生成所述目标数据表中的唯一标识。
请参阅图5,图5为本申请实施例所提供的一种电子设备的结构示意图。如图5中所示,所述电子设备400包括处理器410、存储器420和总线430。
所述存储器420存储有所述处理器410可执行的机器可读指令,当电子设备400运行时,所述处理器410与所述存储器420之间通过总线430通信,所述机器可读指令被所述处理器410执行时,可以执行如上述图1所示方法实施例中的一种分布式系统中标识的生成方法的步骤,具体实现方式可参见方法实施例,在此不再赘述。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时可以执行如上述图1所示方法实施例中的一种分布式系统中标识的生成方法的步骤,具体实现方式可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种分布式系统中标识的生成方法,其特征在于,所述分布式系统中的每个子系统中运行有雪花标识生成组件和业务应用的应用实例;所述生成方法应用于任意一个子系统中的雪花标识生成组件;所述生成方法包括:
响应于该子系统中目标应用实例的标识生成请求,根据所述标识生成请求包含的目标数据表的表名称,确定该子系统中与所述目标数据表的表名称对应的目标雪花标识生成器;
使用所述目标雪花标识生成器生成所述目标数据表中的唯一标识。
2.根据权利要求1所述的生成方法,其特征在于,所述根据所述标识生成请求包含的目标数据表的表名称,确定该子系统中与所述目标数据表的表名称对应的目标雪花标识生成器,包括:
根据所述目标数据表的表名称和预先构建的表名称与雪花标识生成器之间的映射关系,查找该子系统中是否存在与所述目标数据表的表名称对应的雪花标识生成器;
若存在,则将与所述目标数据表的表名称对应的雪花标识生成器确定为所述目标雪花标识生成器;
若不存在,则实例化生成雪花标识生成器,保存所述目标数据表的表名称与新生成的雪花标识生成器之间的映射关系,并将新生成的雪花标识生成器确定为所述目标雪花标识生成器。
3.根据权利要求2所述的生成方法,其特征在于,所述实例化生成雪花标识生成器的方式,包括:
调用雪花标识生成器的生成工具类新建初始雪花标识生成器;
向雪花标识管理节点发送查询参数,以获取所述雪花标识管理节点根据所述查询参数为所述初始雪花标识生成器分配的workerID;
将所述workerID缓存至所述初始雪花标识生成器,并保存所述初始雪花标识生成器至内存,得到雪花标识生成器。
4.根据权利要求3所述的生成方法,其特征在于,所述向雪花标识管理节点发送查询参数,以获取所述雪花标识管理节点根据所述查询参数为所述初始雪花标识生成器分配的workerID,包括:
所述雪花标识生成组件向所述雪花标识管理节点发送查询参数;其中,所述查询参数包括所述业务应用的名称、所述目标应用实例的IP地址和所述目标数据表的表名称;
所述雪花标识管理节点以所述查询参数中包括的所述目标应用实例的名称、所述目标应用实例的IP地址和所述目标数据表的表名称作为聚合索引,并根据所述聚合索引查询数据库中是否存在对应的workerID;
若存在,则将由所述聚合索引查询到的workerID确定为所述初始雪花标识生成器对应的workerID;
若不存在,则根据所述目标应用实例的名称和所述目标数据表的表名称查找对应的可用workerID范围,根据所述可用workerID范围为所述初始雪花标识生成器生成workerID,并通过所述数据库存储为所述初始雪花标识生成器新生成的workerID和所述聚合索引之间的映射关系;
所述雪花标识管理节点将所述初始雪花标识生成器的workerID返回给所述雪花标识生成组件。
5.根据权利要求4所述的生成方法,其特征在于,所述生成方法还包括:
所述雪花标识生成组件向所述雪花标识管理节点轮询发送心跳信号;其中,所述心跳信号用于向所述雪花标识管理节点表征所述雪花标识生成组件所在的该子系统中各个应用实例的存活状态;
所述雪花标识管理节点根据接收到的所述心跳信号,更新所述数据库中与每个应用实例相关的workerID的更新时间。
6.根据权利要求5所述的生成方法,其特征在于,所述若不存在,则根据所述目标应用实例的名称和所述目标数据表的表名称查找对应的可用workerID范围,根据所述可用workerID范围为所述初始雪花标识生成器生成workerID,包括:
以所述目标应用实例的名称和所述目标数据表的表名称作为索引,在所述数据库中查找所述索引是否存在对应的已分配workerID集合;
若存在对应的已分配workerID集合,则根据已分配workerID集合和workerID的最大可分配范围,确定所述索引是否存在对应的可用workerID范围;
若存在对应的可用workerID范围,则根据可用workerID范围为所述初始雪花标识生成器分配workerID;
若不存在对应的可用workerID范围,则将所述已分配workerID集合中更新时间最早的workerID重新分配为所述初始雪花标识生成器的workerID。
7.根据权利要求3所述的生成方法,其特征在于,所述使用所述目标雪花标识生成器生成所述目标数据表中的唯一标识,包括:
使用所述目标雪花标识生成器根据标识位、时间戳、所述workerID和自增序列号生成所述目标数据表中的唯一标识。
8.一种分布式系统中标识的生成装置,其特征在于,所述分布式系统中的每个子系统中运行有雪花标识生成组件和业务应用的应用实例;所述生成装置应用于任意一个子系统中的雪花标识生成组件;所述生成装置包括:
确定模块,响应于该子系统中目标应用实例的标识生成请求,根据所述标识生成请求包含的目标数据表的表名称,确定该子系统中与所述目标数据表的表名称对应的目标雪花标识生成器;
生成模块,使用所述目标雪花标识生成器生成所述目标数据表中的唯一标识。
9.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过所述总线进行通信,所述机器可读指令被所述处理器运行时执行如权利要求1至7任一所述的一种分布式系统中标识的生成方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1至7任一所述的一种分布式系统中标识的生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310602653.6A CN116610676A (zh) | 2023-05-25 | 2023-05-25 | 一种分布式系统中标识的生成方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310602653.6A CN116610676A (zh) | 2023-05-25 | 2023-05-25 | 一种分布式系统中标识的生成方法、装置、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116610676A true CN116610676A (zh) | 2023-08-18 |
Family
ID=87679645
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310602653.6A Pending CN116610676A (zh) | 2023-05-25 | 2023-05-25 | 一种分布式系统中标识的生成方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116610676A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117785385A (zh) * | 2023-12-30 | 2024-03-29 | 北京领雁科技股份有限公司 | 基于雪花算法的id生成系统及方法 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5459860A (en) * | 1992-10-05 | 1995-10-17 | International Business Machines Corporation | Computerized system and process for managing a distributed database system |
US20100313210A1 (en) * | 2009-06-03 | 2010-12-09 | International Business Machines Corporation | Unifying heterogeneous directory service systems |
US20130311427A1 (en) * | 2012-05-15 | 2013-11-21 | Splunk Inc. | Clustering for high availability and disaster recovery |
CN105447023A (zh) * | 2014-08-25 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 业务标识生成方法和装置 |
US20170075965A1 (en) * | 2015-09-16 | 2017-03-16 | Turn Inc. | Table level distributed database system for big data storage and query |
US9641598B1 (en) * | 2014-03-31 | 2017-05-02 | Amazon Technologies, Inc. | Contextually unique identifier generation service |
CN107451254A (zh) * | 2017-07-31 | 2017-12-08 | 广州市食蚁兽网络技术有限公司 | 一种生成数据库表数据唯一标识的方法 |
CN110602158A (zh) * | 2019-07-24 | 2019-12-20 | 中国联合网络通信集团有限公司 | 全局唯一id生成系统与方法、id生成器与存储介质 |
US20200034462A1 (en) * | 2016-11-30 | 2020-01-30 | Nutanix, Inc. | Entity identifier generation in distributed computing systems |
CN114286988A (zh) * | 2019-09-24 | 2022-04-05 | 国际商业机器公司 | 处理数据库系统的数据 |
CN114357083A (zh) * | 2022-01-10 | 2022-04-15 | 珍岛信息技术(上海)股份有限公司 | 一种基于雪花id的可扩展分库分表方法 |
CN115098528A (zh) * | 2022-06-24 | 2022-09-23 | 中电金信软件有限公司 | 业务处理方法、装置、电子设备及计算机可读存储介质 |
-
2023
- 2023-05-25 CN CN202310602653.6A patent/CN116610676A/zh active Pending
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5459860A (en) * | 1992-10-05 | 1995-10-17 | International Business Machines Corporation | Computerized system and process for managing a distributed database system |
US20100313210A1 (en) * | 2009-06-03 | 2010-12-09 | International Business Machines Corporation | Unifying heterogeneous directory service systems |
US20130311427A1 (en) * | 2012-05-15 | 2013-11-21 | Splunk Inc. | Clustering for high availability and disaster recovery |
US9641598B1 (en) * | 2014-03-31 | 2017-05-02 | Amazon Technologies, Inc. | Contextually unique identifier generation service |
CN105447023A (zh) * | 2014-08-25 | 2016-03-30 | 阿里巴巴集团控股有限公司 | 业务标识生成方法和装置 |
US20170075965A1 (en) * | 2015-09-16 | 2017-03-16 | Turn Inc. | Table level distributed database system for big data storage and query |
US20200034462A1 (en) * | 2016-11-30 | 2020-01-30 | Nutanix, Inc. | Entity identifier generation in distributed computing systems |
CN107451254A (zh) * | 2017-07-31 | 2017-12-08 | 广州市食蚁兽网络技术有限公司 | 一种生成数据库表数据唯一标识的方法 |
CN110602158A (zh) * | 2019-07-24 | 2019-12-20 | 中国联合网络通信集团有限公司 | 全局唯一id生成系统与方法、id生成器与存储介质 |
CN114286988A (zh) * | 2019-09-24 | 2022-04-05 | 国际商业机器公司 | 处理数据库系统的数据 |
CN114357083A (zh) * | 2022-01-10 | 2022-04-15 | 珍岛信息技术(上海)股份有限公司 | 一种基于雪花id的可扩展分库分表方法 |
CN115098528A (zh) * | 2022-06-24 | 2022-09-23 | 中电金信软件有限公司 | 业务处理方法、装置、电子设备及计算机可读存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117785385A (zh) * | 2023-12-30 | 2024-03-29 | 北京领雁科技股份有限公司 | 基于雪花算法的id生成系统及方法 |
CN117785385B (zh) * | 2023-12-30 | 2024-06-07 | 北京领雁科技股份有限公司 | 基于雪花算法的id生成系统及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1589691B1 (en) | Method, system and apparatus for managing computer identity | |
CN112052247A (zh) | 搜索引擎的索引更新系统、方法、装置、电子设备、存储介质 | |
CN109213797A (zh) | 一种区块链的查询方法及装置 | |
CN116610676A (zh) | 一种分布式系统中标识的生成方法、装置、设备及介质 | |
CN109299111A (zh) | 一种元数据查询方法、装置、设备及计算机可读存储介质 | |
CN108574705A (zh) | 一种容器间的通信方法、装置及系统 | |
CN111400355A (zh) | 一种数据查询方法及装置 | |
CN113672692B (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN107704475B (zh) | 多层分布式非结构化数据存储方法、查询方法及装置 | |
CN103905512A (zh) | 一种数据处理方法和设备 | |
CN111352938A (zh) | 数据处理方法、计算机设备及存储介质 | |
CN116069810A (zh) | 数据查询方法、装置及终端设备 | |
US20080208797A1 (en) | Automated record attribute value merging from multiple directory servers | |
JP6233846B2 (ja) | 可変長ノンスの生成 | |
US11526516B2 (en) | Method, apparatus, device and storage medium for generating and processing a distributed graph database | |
CN109525649B (zh) | 一种zookeeper客户端的数据处理方法及装置 | |
CN113342851A (zh) | 序列扩容方法 | |
CN105516344A (zh) | 数据管理系统及业务处理方法 | |
CN113868605B (zh) | 授权管理方法、装置及系统 | |
CN115481187B (zh) | 一种数据读写方法、装置及存储介质 | |
CN111339058B (zh) | 一种集合同步方法及装置 | |
CN116881360A (zh) | 一种解决基于雪花算法时钟回拨问题的方法、系统、终端设备及存储介质 | |
CN116955494A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN116452357A (zh) | 油田数据的存储方法、装置、电子设备及存储介质 | |
CN112784299A (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 |