CN117785385B - 基于雪花算法的id生成系统及方法 - Google Patents

基于雪花算法的id生成系统及方法 Download PDF

Info

Publication number
CN117785385B
CN117785385B CN202311858577.1A CN202311858577A CN117785385B CN 117785385 B CN117785385 B CN 117785385B CN 202311858577 A CN202311858577 A CN 202311858577A CN 117785385 B CN117785385 B CN 117785385B
Authority
CN
China
Prior art keywords
policy
data center
machine
strategy
identifier
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
Application number
CN202311858577.1A
Other languages
English (en)
Other versions
CN117785385A (zh
Inventor
毛亚勋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Lingyan Technology Co ltd
Original Assignee
Beijing Lingyan Technology Co ltd
Filing date
Publication date
Application filed by Beijing Lingyan Technology Co ltd filed Critical Beijing Lingyan Technology Co ltd
Priority to CN202311858577.1A priority Critical patent/CN117785385B/zh
Publication of CN117785385A publication Critical patent/CN117785385A/zh
Application granted granted Critical
Publication of CN117785385B publication Critical patent/CN117785385B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公开了基于雪花算法的ID生成系统及方法,本方案在虚拟机环境和容器环境中使用虚拟机策略和容器策略生成的数据中心ID和机器ID能确保唯一性,从而能保证雪花算法生成的ID唯一。即使在其他未知环境当容器策略和虚拟机策略都无法满足的情况下,也可以通过配置策略人工配置确保唯一性,本方案生成ID的方式更灵活,更能适应各种环境。

Description

基于雪花算法的ID生成系统及方法
技术领域
本发明属于计算机技术领域,具体涉及基于雪花算法的ID生成系统及方法。
背景技术
雪花算法(Snowflake)是一种分布式 ID 生成算法,ID长度为64位的整数,在初版设计方案中,由41位毫秒级时间戳+10位机器ID+12位序列号组成,高位补0,在分布式环境中,不同的服务使用的雪花算法的机器ID出现重复则生成的ID也可能会重复,所以机器ID生成规则非常重要,现有实现大部分都是提供机器ID的生成方案,现有雪花算法的数据中心ID和机器ID一般使用IP地址和进程ID来生成。
而在复杂的银行系统中,存在多个数据中心的分布式环境,只使用机器ID定义不同数据中心不同服务器的应用系统则不太合适,所以将10位的机器ID拆分位5位的数据中心ID和5位的机器ID,相对只使用1个机器ID更能直观的管理不同数据中心服务器上应用系统,有助于更快的定位问题,通过现有技术在虚拟机环境中,应用系统获取到的机器IP和进程ID不会重复,但是在容器环境中,应用系统运行在一个隔离的环境,和宿主机的网络和进程是隔离的,应用系统使用的是容器的网络和进程ID,获取到的机器IP和进程ID一样,导致在不同的服务中使用雪花算法生成了重复的ID,对于严重依赖ID唯一的业务场景出现重复的ID会带来灾难性的后果。
发明内容
针对上述现有技术的不足,本申请提供一种基于雪花算法的ID生成系统及方法。
第一方面本申请提出了基于雪花算法的ID生成系统,其特征在于:包括策略配置模块、核心算法ID生成模块和验证数据库;
所述策略配置模块,用于在不同的应用环境下为生成数据中心ID和机器ID提供对应的策略接口,根据所述策略接口指定对应的策略标识;
所述验证数据库,用于获取数据中心标识、应用系统标识和应用系统端口,将所述数据中心标识、应用系统标识和应用系统端口拼接上固定前缀后存储为验证密钥;
所述核心算法ID生成模块,用于在算法工具类初始化时识别所述策略标识,根据所述策略标识的识别结果执行对应应用环境下的数据中心ID和机器ID生成策略,生成对应的数据中心ID和机器ID,根据所述验证密钥验证生成的数据中心ID和机器ID的唯一性。
在一些实施例的一些可选的实现方式中,所述策略配置模块包括虚拟机策略配置单元,所述虚拟机策略配置单元,用于配置default策略标识,让所述核心算法ID生成模块识别所述default策略标识后,调用虚拟机策略接口进行ID生成。
在一些实施例的一些可选的实现方式中,所述策略配置模块包括容器策略配置单元,所述容器策略配置单元,用于配置discovery策略标识,让所述核心算法ID生成模块识别所述discovery策略标识后,调用容器策略接口进行ID生成。
在一些实施例的一些可选的实现方式中,所述策略配置模块包括配置策略配置单元,所述配置策略配置单元,用于配置cfg策略标识,让所述核心算法ID生成模块识别所述cfg策略标识后,调用配置策略接口进行ID生成。
在一些实施例的一些可选的实现方式中,所述核心算法ID生成模块包括策略加载分析单元,所述策略加载分析单元,用于分析识别策略标识,根据分析结果调用对应的策略接口进行ID生成;
所述分析结果包括:当所述策略标识识别为default策略标识时,在配置文件中配置当前使用策略为虚拟机策略;
当所述策略标识识别为discovery策略标识时,在配置文件中配置当前使用策略为容器策略;
当所述策略标识识别为cfg策略标识时,在配置文件中配置当前使用策略为配置策略。
在一些实施例的一些可选的实现方式中,所述核心算法ID生成模块还包括虚拟机策略执行单元、第一虚拟机策略ID生成单元和第二虚拟机策略ID生成单元;
所述虚拟机策略执行单元,用于调用虚拟机策略接口后判断应用系统是否为首次启动,如果应用系统为首次启动,则通过所述第一虚拟机策略ID生成单元进行ID生成,如果应用系统不为首次启动,则通过所述第二虚拟机策略ID生成单元进行ID生成;
所述第一虚拟机策略ID生成单元,用于获取应用系统所在的服务器网卡信息,再通过网卡信息获取到IP地址,取所述IP地址的最后一个小数点后面的数字和31做与运算得到一个小于32的整数作为当前生成的数据中心ID,将当前生成的数据中心ID与所述验证密钥进行遍历匹配,如果验证密钥中的数据中心ID与当前生成的数据中心ID匹配,则从0-31中过滤出未使用的最小整数作为最终的虚拟机策略数据中心ID,根据IP地址查询当前应用系统的进程ID,将进程ID和31做与运算得到一个小于32的整数作为当前生成的机器ID,将当前生成的机器ID与所述验证密钥进行遍历匹配,如果验证密钥中的机器ID与当前生成的机器ID匹配,则从0-31中过滤出未使用的最小整数作为最终的虚拟机策略机器ID;
所述第二虚拟机策略ID生成单元,直接从所述验证数据库中读取当前数据中心标识、应用系统标识和应用系统端口,根据数据中心标识、应用系统标识和端口读取数据中心ID和机器ID拼接的字符串,解析得到最终的虚拟机策略数据中心ID和虚拟机策略机器ID。
在一些实施例的一些可选的实现方式中,所述核心算法ID生成模块还包括容器策略执行单元、第一容器策略ID生成单元和第二容器策略ID生成单元;
所述容器策略执行单元,用于调用容器策略接口后判断应用系统是否为首次启动,如果应用系统为首次启动,则通过所述第一容器策略ID生成单元进行ID生成,如果应用系统不为首次启动,则通过所述第二容器策略ID生成单元进行ID生成;
所述第一容器策略ID生成单元,用于根据注册中心API可以获取到当前应用系统注册的服务标识,获取服务标识的哈希码和31做与运算得到一个小于32的整数作为当前生成的数据中心ID,将当前生成的数据中心ID与所述验证密钥进行遍历匹配,如果验证密钥中的数据中心ID与当前生成的数据中心ID匹配,则从0-31中过滤出未使用的最小整数作为最终的容器策略数据中心ID,根据注册中心API查询当前应用系统的实例ID,将实例ID的哈希码和31做与运算得到一个小于32的整数作为当前生成的机器ID,将当前生成的机器ID与所述验证密钥进行遍历匹配,如果验证密钥中的机器ID与当前生成的机器ID匹配,则从0-31中过滤出未使用的最小整数作为最终的容器策略机器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生成系统,其特征在于:包括策略配置模块、核心算法ID生成模块和验证数据库;
所述策略配置模块,用于在不同的应用环境下为生成数据中心ID和机器ID提供对应的策略接口,根据所述策略接口指定对应的策略标识;
其中,提供获取数据中心ID和机器ID的策略interface接口,接口有3个实现:虚拟机策略、容器策略、配置策略,每个策略都指定了一个固定的策略标识,包括:虚拟机策略标识:default,容器策略标识:discovery,配置策略标识:cfg;在java微服务应用配置文件中配置策略标识用于指定使用哪个策略,应用启动后读取配置文件中的配置,基于spring框架提供的bean初始化机制,根据配置策略标识来初始化对应的策略接口实现类;
具体实现代码如下:
application.properties中配置示例:
#策略组件中使用的策略,default:虚拟机策略,discovery:容器策略,cfg:配置策略;
core.snowFlake.initStrategy=default;
#策略组件使用配置策略时需要人工配置的数据中心id;
core.snowFlake.workerId=0
#策略组件使用配置策略时需要人工配置的机器id;
core.snowFlake.processId=1
在一些实施例的一些可选的实现方式中,所述策略配置模块包括虚拟机策略配置单元,所述虚拟机策略配置单元,用于配置default策略标识,让所述核心算法ID生成模块识别所述default策略标识后,调用虚拟机策略接口进行ID生成。
其中,当读取的使用策略标识为default时,则策略interface接口的实现类使用虚拟机策略的实例;
在一些实施例的一些可选的实现方式中,所述策略配置模块包括容器策略配置单元,所述容器策略配置单元,用于配置discovery策略标识,让所述核心算法ID生成模块识别所述discovery策略标识后,调用容器策略接口进行ID生成。
其中,当读取的使用策略标识为discovery时,则策略interface接口的实现类使用容器策略的实例。
在一些实施例的一些可选的实现方式中,所述策略配置模块包括配置策略配置单元,所述配置策略配置单元,用于配置cfg策略标识,让所述核心算法ID生成模块识别所述cfg策略标识后,调用配置策略接口进行ID生成。
其中,当读取的使用策略标识为cfg时,则策略interface接口的实现类使用配置策略的实例。
所述验证数据库,用于获取数据中心标识、应用系统标识和应用系统端口,将所述数据中心标识、应用系统标识和应用系统端口拼接上固定前缀后存储为验证密钥;
其中,数据中心标识的获取方式:从启动参数中获取当前应用系统所属的数据中心标识(参数名:dc.id);
应用系统标识的获取方式:从配置文件中获取当前配置的应用系统标识(参数名:spring.application.name);
应用系统端口的获取方式:从配置文件中获取当前配置的应用系统标识(参数名:server.port);
进一步的,验证数据库为Redis,Redis表示一种nosql的数据库;
Redis中存储ID数据,该ID数据存储有代表服务唯一标识的key值以及与服务对应的两个ID拼接而成的value值。具体地,将数据中心标识、应用系统标识和端口拼接上固定前缀作为从Redis中读写的key,key表示验证密钥,(例如:数据中心标识为a,系统标识为sys,端口为8080,拼接固定前缀后为snowflake_a_sys_8080),value为数据中心ID和机器ID拼接的字符串,用逗号隔开(例如:数据中心ID为0,机器ID为1,拼接后的字符串为0,1),
所述核心算法ID生成模块,用于在算法工具类初始化时识别所述策略标识,根据所述策略标识的识别结果执行对应应用环境下的数据中心ID和机器ID生成策略,生成对应的数据中心ID和机器ID,根据所述验证密钥验证生成的数据中心ID和机器ID的唯一性。
在一些实施例的一些可选的实现方式中,所述核心算法ID生成模块包括策略加载分析单元,所述策略加载分析单元,用于分析识别策略标识,根据分析结果调用对应的策略接口进行ID生成;
所述分析结果包括:当所述策略标识识别为default策略标识时,在配置文件中配置当前使用策略为虚拟机策略;
当所述策略标识识别为discovery策略标识时,在配置文件中配置当前使用策略为容器策略;
当所述策略标识识别为cfg策略标识时,在配置文件中配置当前使用策略为配置策略。
可以理解的是,当应用环境为虚拟机环境时,策略接口默认为虚拟机策略接口,但其也可适配以上其他两种策略接口,即使用容器策略接口或是策略配置接口进行ID生成。当应用环境为容器环境时,默认其策略接口为容器策略接口,但其也可使用配置策略接口进行ID生成。
在配置文件中配置当前使用策略为虚拟机策略(core.snowFlake.initStrategy=default),应用启动后由spring框架加载虚拟机策略实现类提供获取数据中心ID和机器ID的方法;
在配置文件中配置当前使用策略为容器策略(core.snowFlake.initStrategy=discovery),应用启动后由spring框架加载容器策略实现类提供获取数据中心ID和机器ID的方法;
当前应用环境不适宜配置虚拟机策略和容器策略时,通过配置文件手动配置数据中心ID和机器ID,由运维人员人工录入唯一的ID;
根据应用系统当前使用的环境在配置文件中指定使用的策略标识,由策略组件加载对应策略,核心算法初始化时再通过策略组件获取的数据中心ID和机器ID可以保证唯一性,确保在分布式环境中生成的ID唯一。
在一些实施例的一些可选的实现方式中,所述核心算法ID生成模块还包括虚拟机策略执行单元、第一虚拟机策略ID生成单元和第二虚拟机策略ID生成单元;
所述虚拟机策略执行单元,用于调用虚拟机策略接口后判断应用系统是否为首次启动,如果应用系统为首次启动,则通过所述第一虚拟机策略ID生成单元进行ID生成,如果应用系统不为首次启动,则通过所述第二虚拟机策略ID生成单元进行ID生成;
所述第一虚拟机策略ID生成单元,用于获取应用系统所在的服务器网卡信息,再通过网卡信息获取到IP地址,取所述IP地址的最后一个小数点后面的数字和31做与运算得到一个小于32的整数作为当前生成的数据中心ID,将当前生成的数据中心ID与所述验证密钥进行遍历匹配,如果验证密钥中的数据中心ID与当前生成的数据中心ID匹配,则从0-31中过滤出未使用的最小整数作为最终的虚拟机策略数据中心ID。根据IP地址查询当前应用系统的进程ID,将进程ID和31做与运算得到一个小于32的整数作为当前生成的机器ID,将当前生成的机器ID与所述验证密钥进行遍历匹配,如果验证密钥中的机器ID与当前生成的机器ID匹配,则从0-31中过滤出未使用的最小整数作为最终的虚拟机策略机器ID;
其中,虚拟机策略适用于虚拟机环境和未使用注册中心的应用系统,在虚拟机环境下,每个应用系统所在服务器的IP地址和进程ID不会重复,所以可以使用这两个数据生成雪花算法的数据中心ID和机器ID,具体生成步骤如下:虚拟机策略加载时,分两种情况创建数据中心ID和机器ID。
第一种情况,应用系统第一次启动时,获取应用系统所在的服务器网卡信息,再通过网卡信息获取到IP地址,因为数据中心ID和机器ID的最大长度 限制为5个字节,所以取IP地址最后一个小数点后面的数字和31做与运算得到一个小于32的整数作为数据中心ID;为了保证数据中心ID唯一,需要做一次验证操作,使用redis分布式锁保证验证操作为原子性操作,根据Redis存放ID数据key(验证密钥)的规则,从Redis中查询前缀为snowflake的所有key,遍历key对应的数据(value),如果数据中的数据中心ID与当前生成的ID匹配,则从0~31 中过滤出未使用的最小整数作为当前应用系统的数据中心ID,得到最终的虚拟机策略数据中心ID;继续查询当前应用系统的进程ID,进程ID为一个整数,将进程ID和31做与运算得到一个小于32的整数作为机器ID。为了保证机器ID唯一再按上面的规则做一次验证操作得到最终的虚拟机策略机器ID,
值得注意的是:没有保存在redis中的数据中心ID就代表还没有服务使用这个ID。生成的ID已经被使用了,就遍历已经使用的ID,过滤出0~31之间没有记录在Redis中的最小整数作为当前服务的数据中心ID。特殊情况下如果服务器实例超过了32个,则0~31的整数全部用完,那么还是使用之前IP地址生成的ID,只需要保证后面的机器ID不重复即可,理论上来说,一个项目中使用的应用系统数不可能超过1024个;按照前面描述的Redis中存储ID数据的定义,将数据中心ID和机器ID存储到Redis中,再次重启应用系统可以直接从Redis读取,不需要重新生成。
所述第二虚拟机策略ID生成单元,直接从所述验证数据库中读取当前数据中心标识、应用系统标识和应用系统端口,根据数据中心标识、应用系统标识和端口读取数据中心ID和机器ID拼接的字符串,解析得到最终的虚拟机策略数据中心ID和虚拟机策略机器ID。
第二种情况,应用系统已经启动过,创建的数据中心ID和机器ID会写入到Redis。则可以直接从Redis中读取。
读取流程为:先获取当前数据中心标识、应用系统标识和端口,按照前面描述的Redis中存储ID数据的定义,根据数据中心标识、应用系统标识和端口从Redis中读取数据中心ID和机器ID拼接的字符串,解析该字符串将数据中心ID和机器ID保存到内存中。
在一些实施例的一些可选的实现方式中,所述核心算法ID生成模块还包括容器策略执行单元、第一容器策略ID生成单元和第二容器策略ID生成单元;
所述容器策略执行单元,用于调用容器策略接口后判断应用系统是否为首次启动,如果应用系统为首次启动,则通过所述第一容器策略ID生成单元进行ID生成,如果应用系统不为首次启动,则通过所述第二容器策略ID生成单元进行ID生成;
所述第一容器策略ID生成单元,用于根据注册中心API可以获取到当前应用系统注册的服务标识,获取服务标识的哈希码和31做与运算得到一个小于32的整数作为当前生成的数据中心ID,将当前生成的数据中心ID与所述验证密钥进行遍历匹配,如果验证密钥中的数据中心ID与当前生成的数据中心ID匹配,则从0-31中过滤出未使用的最小整数作为最终的容器策略数据中心ID,根据注册中心API查询当前应用系统的实例ID,将实例ID的哈希码和31做与运算得到一个小于32的整数作为当前生成的机器ID,将当前生成的机器ID与所述验证密钥进行遍历匹配,如果验证密钥中的机器ID与当前生成的机器ID匹配,则从0-31中过滤出未使用的最小整数作为最终的容器策略机器ID;
其中,容器策略适用于容器环境,在容器环境中,每个应用系统拿到的服务器IP地址和进程ID会重复,但是每个应用系统接入注册中心后,注册的应用标识和实例ID不会重复,所以通过这两个数据生成雪花算法的数据中心ID和机器ID,具体生成步骤如下:
容器策略加载时,分两种情况创建数据中心ID和机器ID。
第一种情况,应用系统第一次启动时接入注册中心,根据注入的注册中心API可以获取到当前应用系统注册的服务标识,获取服务标识的哈希码和31做与运算得到一个小于32的整数作为数据中心ID,为了保证数据中心ID唯一,需要做一次验证操作,操作步骤与虚拟机策略中的验证操作一致,得到最终的容器策略数据中心ID;再通过注册中心API获取当前应用系统的实例ID,获取实例ID的哈希码和31做与运算得到一个小于32的整数作为机器ID,并做一次验证操作生成最终的容器策略机器ID。
按照前面描述的Redis中存储ID数据的定义,将上述的数据中心ID和机器ID存储到Redis中,再次重启应用系统可以直接从Redis读取不需要重新生成。
所述第二容器策略ID生成单元,直接从所述验证数据库中读取当前数据中心标识、应用系统标识和应用系统端口,根据数据中心标识、应用系统标识和端口读取数据中心ID和机器ID拼接的字符串,解析得到最终的容器策略数据中心ID和机器ID。
其中,第二种情况,应用系统已经启动过,创建的数据中心ID和机器ID会写入到Redis。则可以直接从Redis中读取。先获取当前数据中心标识、应用系统标识和端口,按照前面描述的Redis中存储ID数据的定义,根据数据中心标识、应用系统标识和端口从Redis中读取数据中心ID和机器ID拼接的字符串,解析该字符串将数据中心ID和机器ID保存到内存中。
在一些实施例的一些可选的实现方式中,所述核心算法ID生成模块还包括配置策略执行单元,所述配置策略执行单元,用于调用配置策略接口后通过配置文件手动配置最终的配置策略数据中心ID和配置策略机器ID。
其中,通过配置文件手动配置数据中心ID和机器ID,由运维人员人工录入唯一的ID。配置策略适用于当虚拟机策略和容器策略都不满足的场景。
第二方面本申请提出基于雪花算法的唯一ID适应性生成方法,所述方法应用于基于雪花算法的ID生成系统,包括以下步骤:
S100:通过策略配置模块在不同的应用环境下为生成数据中心ID和机器ID提供对应的策略接口,根据所述策略接口指定对应的策略标识;
S200:通过验证数据库获取数据中心标识、应用系统标识和应用系统端口,将所述数据中心标识、应用系统标识和应用系统端口拼接上固定前缀后存储为验证密钥;S300:识别所述策略标识,根据所述策略标识的识别结果执行对应应用环境下的数据中心ID和机器ID生成策略,生成对应的数据中心ID和机器ID,根据所述验证密钥验证生成的数据中心ID和机器ID的唯一性。
第三方面本申请提出一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。
在本公开所提供的实施例中,应该理解到,所揭露的装置/计算机设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/计算机设备实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本公开实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可以存储在计算机可读存储介质中,该计算机程序在被处理器执行时,可以实现上述各个方法实施例的步骤。计算机程序可以包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如,在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上仅是本发明优选的实施方式,需指出的是,对于本领域技术人员在不脱离本技术方案的前提下,作出的若干变形和改进的技术方案应同样视为落入本权利要求书要求保护的范围。

Claims (7)

1.一种基于雪花算法的ID生成系统,其特征在于:包括策略配置模块、核心算法ID生成模块和验证数据库;
所述策略配置模块,用于在不同的应用环境下为生成数据中心ID和机器ID提供对应的策略接口,根据所述策略接口指定对应的策略标识,所述策略配置模块包括虚拟机策略配置单元、容器策略配置单元和配置策略配置单元,所述虚拟机策略配置单元,用于配置default虚拟机策略标识,让所述核心算法ID生成模块识别所述default虚拟机策略标识后,调用虚拟机策略接口进行ID生成,所述容器策略配置单元,用于配置discovery策略标识,让所述核心算法ID生成模块识别所述discovery策略标识后,调用容器策略接口进行ID生成,所述配置策略配置单元,用于配置cfg策略标识,让所述核心算法ID生成模块识别所述cfg策略标识后,调用配置策略接口进行ID生成;
所述验证数据库,用于获取数据中心标识、应用系统标识和应用系统端口,将所述数据中心标识、应用系统标识和应用系统端口拼接上固定前缀后存储为验证密钥;
所述核心算法ID生成模块,用于在算法工具类初始化时识别所述策略标识,根据所述策略标识的识别结果执行对应应用环境下的数据中心ID和机器ID生成策略,生成对应的数据中心ID和机器ID,根据所述验证密钥验证生成的数据中心ID和机器ID的唯一性,其中,将当前生成的数据中心ID与所述验证密钥进行遍历匹配,如果验证密钥中的数据中心ID与当前生成的数据中心ID匹配,则从0-31中过滤出未使用的最小整数作为最终的数据中心ID,将当前生成的机器ID与所述验证密钥进行遍历匹配,如果验证密钥中的机器ID与当前生成的机器ID匹配,则从0-31中过滤出未使用的最小整数作为最终的机器ID。
2.根据权利要求1所述的系统,其特征在于:所述核心算法ID生成模块包括策略加载分析单元,所述策略加载分析单元,用于分析识别策略标识,根据分析结果调用对应的策略接口进行ID生成;
所述分析结果包括:当所述策略标识识别为default策略标识时,在配置文件中配置当前使用策略为虚拟机策略;
当所述策略标识识别为discovery策略标识时,在配置文件中配置当前使用策略为容器策略;
当所述策略标识识别为cfg策略标识时,在配置文件中配置当前使用策略为配置策略。
3.根据权利要求2所述的系统,其特征在于:所述核心算法ID生成模块还包括虚拟机策略执行单元、第一虚拟机策略ID生成单元和第二虚拟机策略ID生成单元;
所述虚拟机策略执行单元,用于调用虚拟机策略接口后判断应用系统是否为首次启动,如果应用系统为首次启动,则通过所述第一虚拟机策略ID生成单元进行ID生成,如果应用系统不为首次启动,则通过所述第二虚拟机策略ID生成单元进行ID生成;
所述第一虚拟机策略ID生成单元,用于获取应用系统所在的服务器网卡信息,再通过网卡信息获取到IP地址,取所述IP地址的最后一个小数点后面的数字和31做与运算得到一个小于32的整数作为当前生成的数据中心ID,将当前生成的数据中心ID与所述验证密钥进行遍历匹配,如果验证密钥中的数据中心ID与当前生成的数据中心ID匹配,则从0-31中过滤出未使用的最小整数作为最终的数据中心ID,根据IP地址查询当前应用系统的进程ID,将进程ID和31做与运算得到一个小于32的整数作为当前生成的机器ID,将当前生成的机器ID与所述验证密钥进行遍历匹配,如果验证密钥中的机器ID与当前生成的机器ID匹配,则从0-31中过滤出未使用的最小整数作为最终的机器ID;
所述第二虚拟机策略ID生成单元,直接从所述验证数据库中读取当前数据中心标识、应用系统标识和应用系统端口,根据数据中心标识、应用系统标识和端口读取数据中心ID和机器ID拼接的字符串,解析得到最终的虚拟机策略数据中心ID和虚拟机策略机器ID。
4.根据权利要求3所述的系统,其特征在于:所述核心算法ID生成模块还包括容器策略执行单元、第一容器策略ID生成单元和第二容器策略ID生成单元;
所述容器策略执行单元,用于调用容器策略接口后判断应用系统是否为首次启动,如果应用系统为首次启动,则通过所述第一容器策略ID生成单元进行ID生成,如果应用系统不为首次启动,则通过所述第二容器策略ID生成单元进行ID生成;
所述第一容器策略ID生成单元,用于根据注册中心API可以获取到当前应用系统注册的服务标识,获取服务标识的哈希码和31做与运算得到一个小于32的整数作为当前生成的数据中心ID,将当前生成的数据中心ID与所述验证密钥进行遍历匹配,如果验证密钥中的数据中心ID与当前生成的数据中心ID匹配,则从0-31中过滤出未使用的最小整数作为最终的容器策略数据中心ID,根据注册中心API查询当前应用系统的实例ID,将实例ID的哈希码和31做与运算得到一个小于32的整数作为当前生成的机器ID,将当前生成的机器ID与所述验证密钥进行遍历匹配,如果验证密钥中的机器ID与当前生成的机器ID匹配,则从0-31中过滤出未使用的最小整数作为最终的容器策略机器ID;
所述第二容器策略ID生成单元,直接从所述验证数据库中读取当前数据中心标识、应用系统标识和应用系统端口,根据数据中心标识、应用系统标识和端口读取数据中心ID和机器ID拼接的字符串,解析得到最终的容器策略数据中心ID和机器ID。
5.根据权利要求4所述的系统,其特征在于:所述核心算法ID生成模块还包括配置策略执行单元,所述配置策略执行单元,用于调用配置策略接口后通过配置文件手动配置最终的配置策略数据中心ID和配置策略机器ID。
6.一种基于雪花算法的唯一ID适应性生成方法,所述方法应用于如权利要求1所述的系统,其特征在于:
通过策略配置模块在不同的应用环境下为生成数据中心ID和机器ID提供对应的策略接口,根据所述策略接口指定对应的策略标识,所述策略配置模块包括虚拟机策略配置单元、容器策略配置单元和配置策略配置单元,所述虚拟机策略配置单元,用于配置default虚拟机策略标识,让核心算法ID生成模块识别所述default虚拟机策略标识后,调用虚拟机策略接口进行ID生成,所述容器策略配置单元,用于配置discovery策略标识,让核心算法ID生成模块识别所述discovery策略标识后,调用容器策略接口进行ID生成,所述配置策略配置单元,用于配置cfg策略标识,让核心算法ID生成模块识别所述cfg策略标识后,调用配置策略接口进行ID生成;
通过验证数据库获取数据中心标识、应用系统标识和应用系统端口,将所述数据中心标识、应用系统标识和应用系统端口拼接上固定前缀后存储为验证密钥;
识别所述策略标识,根据所述策略标识的识别结果执行对应应用环境下的数据中心ID和机器ID生成策略,生成对应的数据中心ID和机器ID,根据所述验证密钥验证生成的数据中心ID和机器ID的唯一性,其中,将当前生成的数据中心ID与所述验证密钥进行遍历匹配,如果验证密钥中的数据中心ID与当前生成的数据中心ID匹配,则从0-31中过滤出未使用的最小整数作为最终的数据中心ID,将当前生成的机器ID与所述验证密钥进行遍历匹配,如果验证密钥中的机器ID与当前生成的机器ID匹配,则从0-31中过滤出未使用的最小整数作为最终的机器ID。
7.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求6所述方法的步骤。
CN202311858577.1A 2023-12-30 基于雪花算法的id生成系统及方法 Active CN117785385B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311858577.1A CN117785385B (zh) 2023-12-30 基于雪花算法的id生成系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311858577.1A CN117785385B (zh) 2023-12-30 基于雪花算法的id生成系统及方法

Publications (2)

Publication Number Publication Date
CN117785385A CN117785385A (zh) 2024-03-29
CN117785385B true CN117785385B (zh) 2024-06-07

Family

ID=

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013027923A1 (ko) * 2011-08-24 2013-02-28 (주)케이티 클라우드 컴퓨팅 서버 시스템의 가상머신 정책 설정 시스템, 가상머신 정책 설정 방법 및 가상머신 정책 제공 방법
CN111930384A (zh) * 2020-07-02 2020-11-13 上海微亿智造科技有限公司 基于优化后的雪花算法在工业大数据中的应用方法及系统
CN112235431A (zh) * 2020-09-30 2021-01-15 银盛支付服务股份有限公司 一种基于雪花算法自动配置机器id的方法及系统
CN112398968A (zh) * 2020-11-24 2021-02-23 天津五八到家货运服务有限公司 Id生成系统及方法、生成端、服务端及存储介质
WO2021052029A1 (zh) * 2019-09-17 2021-03-25 苏宁云计算有限公司 数据对象标识生成方法、装置、计算机设备和存储介质
CN113946586A (zh) * 2021-11-01 2022-01-18 重庆忽米网络科技有限公司 一种适用于微服务系统的数据库主键生成方法
CN114970464A (zh) * 2022-04-25 2022-08-30 北京明略昭辉科技有限公司 用于标识生成的方法、装置、终端设备及存储介质
CN116401242A (zh) * 2023-02-21 2023-07-07 超聚变数字技术有限公司 唯一标识符生成方法及计算设备
CN116610676A (zh) * 2023-05-25 2023-08-18 中电金信软件(上海)有限公司 一种分布式系统中标识的生成方法、装置、设备及介质
CN116910479A (zh) * 2023-07-21 2023-10-20 传播大脑科技(浙江)股份有限公司 一种基于分布式id生成器的唯一标识符生成方法、系统及介质

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013027923A1 (ko) * 2011-08-24 2013-02-28 (주)케이티 클라우드 컴퓨팅 서버 시스템의 가상머신 정책 설정 시스템, 가상머신 정책 설정 방법 및 가상머신 정책 제공 방법
WO2021052029A1 (zh) * 2019-09-17 2021-03-25 苏宁云计算有限公司 数据对象标识生成方法、装置、计算机设备和存储介质
CN111930384A (zh) * 2020-07-02 2020-11-13 上海微亿智造科技有限公司 基于优化后的雪花算法在工业大数据中的应用方法及系统
CN112235431A (zh) * 2020-09-30 2021-01-15 银盛支付服务股份有限公司 一种基于雪花算法自动配置机器id的方法及系统
CN112398968A (zh) * 2020-11-24 2021-02-23 天津五八到家货运服务有限公司 Id生成系统及方法、生成端、服务端及存储介质
CN113946586A (zh) * 2021-11-01 2022-01-18 重庆忽米网络科技有限公司 一种适用于微服务系统的数据库主键生成方法
CN114970464A (zh) * 2022-04-25 2022-08-30 北京明略昭辉科技有限公司 用于标识生成的方法、装置、终端设备及存储介质
CN116401242A (zh) * 2023-02-21 2023-07-07 超聚变数字技术有限公司 唯一标识符生成方法及计算设备
CN116610676A (zh) * 2023-05-25 2023-08-18 中电金信软件(上海)有限公司 一种分布式系统中标识的生成方法、装置、设备及介质
CN116910479A (zh) * 2023-07-21 2023-10-20 传播大脑科技(浙江)股份有限公司 一种基于分布式id生成器的唯一标识符生成方法、系统及介质

Similar Documents

Publication Publication Date Title
CN109873804B (zh) 基于行为的服务识别方法、装置、设备及可读存储介质
CN111552678A (zh) 数据权限的配置方法、装置及计算机设备
CN109829327A (zh) 敏感信息处理方法、装置、电子设备及存储介质
US20130246376A1 (en) Methods for managing data intake and devices thereof
CN113849808B (zh) 容器安全管理方法、系统、终端及存储介质
CN111104677B (zh) 基于cpe规范的漏洞补丁检测方法及装置
CN115391403B (zh) 一种基于规则引擎的数据整合方法及数据整合装置
CN117785385B (zh) 基于雪花算法的id生成系统及方法
CN115242434A (zh) 应用程序接口api的识别方法及装置
US7231377B2 (en) Method and apparatus for configuring a server using a knowledge base that defines multiple server roles
US9875248B2 (en) System and method for identifying a file path using tree data structure
CN112363997B (zh) 数据版本管理方法、装置及存储介质
CN117785385A (zh) 基于雪花算法的id生成系统及方法
CN113010912B (zh) 脱敏方法及装置
CN113254470B (zh) 一种数据更改方法、装置、计算机设备及存储介质
CN108875410A (zh) 分布式搜索集群权限管理方法及装置、计算设备
CN113328880B (zh) 分布式集群系统的部署方法、系统、介质和装置
CN113297622A (zh) 一种日志脱敏方法、系统、电子设备及存储介质
CN113760450A (zh) 私有云虚拟机自动安全管理方法、装置、终端及存储介质
RU2628920C2 (ru) Способ обнаружения вредоносных сборок
CN109284278B (zh) 基于数据分析技术的计算逻辑迁移方法及终端设备
CN114594987A (zh) 一种多模块项目源码分离方法及设备
CN112686029A (zh) 用于数据库审计系统的sql新语句识别方法及装置
RU2625052C1 (ru) Способ ограничения доступа образа машинного кода к ресурсам операционной системы
RU2617925C2 (ru) Способ антивирусной проверки компьютерной системы

Legal Events

Date Code Title Description
PB01 Publication
SE01 Entry into force of request for substantive examination
GR01 Patent grant