CN112463790A - 一种微服务架构下快速生成id的方法、系统 - Google Patents
一种微服务架构下快速生成id的方法、系统 Download PDFInfo
- Publication number
- CN112463790A CN112463790A CN202011209211.8A CN202011209211A CN112463790A CN 112463790 A CN112463790 A CN 112463790A CN 202011209211 A CN202011209211 A CN 202011209211A CN 112463790 A CN112463790 A CN 112463790A
- Authority
- CN
- China
- Prior art keywords
- service
- generation
- sub
- value
- micro
- 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.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 title claims abstract description 45
- 238000012545 processing Methods 0.000 claims description 14
- 238000004806 packaging method and process Methods 0.000 claims description 7
- 229910002056 binary alloy Inorganic materials 0.000 claims description 6
- 238000005538 encapsulation Methods 0.000 claims description 4
- 238000004364 calculation method Methods 0.000 claims description 3
- 241000533950 Leucojum Species 0.000 abstract description 11
- 230000007547 defect Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000006467 substitution reaction Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
Images
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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明提供一种微服务架构下快速生成ID的方法、系统,所述方法包括如下步骤:将生成ID的方法封装成微服务框架中的一个ID生成子服务,并将ID生成子服务部署至多个节点中;将生成的ID生成子服务注册到微服务注册中心;当向数据库中插入数据时,发送ID生成请求;接收到ID生成请求后,查询微服务注册中心是否存在正在运行的ID生成子服务;若存在,返回一个ID生成子服务地址;获取到该ID生成子服务地址后,向该ID生成子服务发送请求获取全局唯一的ID值。同时解决雪花算法时钟回拨产生相同ID的问题,使得在使用数据库时,大大提高应用程序的性能。
Description
技术领域
本发明涉及数据库ID值生成方法技术领域,具体涉及一种微服务架构下快速生成ID的方法、系统。
背景技术
随着互联网的高速发展,人们的工作生活越来越离不开互联网。目前生活中大部分的需求都可以通过网络应用来完成。比如网上购物,网上订餐等等。目前大部分的互联网公司将这些数据存放在mysql数据库中。我们知道数据库每张表都必须有主键,往往可以用一个唯一的ID值来唯一标识每一条数据记录。所以,当程序向数据库中插入一条数据记录时,需要产生一个全局唯一的ID值。如果这个ID值生成的数据太慢便会导致数据记录插入数据库的速度变慢,从而导致上层业务的阻塞。比如每年的双十一,成千上万的订单同时下发,这对业务的性能提出的极高的要求。因此,如何提高应用生成全局唯一ID,成为一个值得研究的问题。
目前应用生成全局唯一性ID,主要有以下方法:
方法一:数据库自增方法:生成ID的动作由数据库本身完成。当程序向数据库中插入一条数据记录时,数据库利用主键的auto_increment来生成全局唯一的递增ID。方法二:使用uuid作为全局唯一的ID:UUID其自身机制保证了对在同一时空中的所有机器都是唯一的,其用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。方法三:借助redis:redis本身性能非常强大,可以利用redis的incr/incrby命令可以生成唯一的递增ID。方法四:雪花算法:雪花算法的核心是生成一个long类型的数字id,其实就是对这64位的二进制形式里面填值,把这64位分成几个部分,彼此间互不影响,每部分都有自己的生成规则,这样在一定的简单的大前提下,能保证全局唯一。雪花算法的几个核心组成部分:(1)1位sign标识位;(2)41位时间戳;(3)10位workId(数据中心+工作机器,可以其他组成方式);(4)12位自增序列;除了标识位固定为0,其余的三大块信息可以转换成数字,填充到63位当中,基本可以保证任何时间任何机器生产的任何id不重复,可以推理出,时间和序列都是不可控的,但是第三位的机器信息是我们可以控制的,也就是说设置好机器信息是分布式id不重复的关键。
方法一的缺点:数据库本身也有性能瓶颈。如果业务量非常大时,容易造成数据库的单点瓶颈,从而影响业务的整体性能。同时,数据库水平扩展比较困难。方法二的缺点:UUID有128个bits,占用空间比较大,浪费数据库空间。并且无规律。当前大部分企业使用mysql时存储引擎为innoDB,其索引使用的数据结构为B+树,对于B+Tree索引来讲,数据以自增顺序来写入的话,B+tree的结构不会时常被打乱重塑,存取效率是最高的。如果使用UUID作为索引。根据B+树特性,mysql的索引将会频繁重构,严重影响数据库的性能。方法三的缺点:业务必须依赖redis数据库,增加了业务架构的复杂性。另外如果redis集群宕机情况时,可能会产生重复的ID。方法四的缺点:雪花算法无法解决时钟回拨问题。所谓时钟回拨是指由于硬件时钟可能会因为各种原因发生不准确的情况。有可能下一次获取到的系统时间会比上一次获取到的系统时间还要早几毫秒。在这种情况下,如果是同一数据中心(工作机器)产生的ID值有可能会出现重复。
发明内容
针对上述算法中存在的缺点,本申请在雪花算法的基础上,利用微服务架构思想,能够实现在高并发的场景下生成全局唯一并尽可能递增的ID。本发明提供一种微服务架构下快速生成ID的方法、系统。同时解决了雪花算法时钟回拨产生相同ID的问题,使得在使用mysql作为数据库时,大大提高应用程序的性能。
本发明的技术方案是:
一方面,本发明技术方案提供一种微服务架构下快速生成ID的方法,包括如下步骤:
将生成ID的方法封装成微服务框架中的一个ID生成子服务,并将ID生成子服务部署至多个节点中;
将生成的ID生成子服务注册到微服务注册中心;
当向数据库中插入数据时,发送ID生成请求;
接收到ID生成请求后,查询微服务注册中心是否存在正在运行的ID生成子服务;
若存在,返回一个ID生成子服务地址;
获取到该ID生成子服务地址后,向该ID生成子服务发送获取全局唯一的ID值的请求;
ID生成子服务接收到请求后,获取当前时间,并与上一次生成ID的时间进行比较,当前时间不早于上一次生成ID时间时,处理生成全局唯一的ID值并返回生成的ID值。
进一步的,将生成的ID生成子服务注册到微服务注册中心的步骤包括:
轮询每个节点中正在运行ID生成子服务,并将正在运行的ID生成子服务注册到微服务注册中心。
进一步的,若存在,返回一个ID生成子服务地址的步骤包括:
若存在,则请求API接口子服务进行请求调度;
API接口子服务获取当前运行的ID生成子服务的负载信息;
根据当前所有ID生成子服务的负载信息返回一个ID生成子服务的地址。
进一步的,根据当前所有ID生成子服务的负载信息返回一个ID生成子服务的地址的步骤包括:
将当前所有ID生成子服务的负载信息按负载由高到低进行排序;
返回负载最小的ID生成子服务的地址。
进一步的,将生成ID的方法封装成微服务框架中的一个ID生成子服务,并将ID生成子服务部署至多个节点中的步骤中,还包括:
为每一个ID生成子服务分配一个唯一的实例ID值,并将实例ID值写入对应节点的配置文件中;
每个ID生成子服务在启动时,读取本节点配置文件获取自身的实例ID值和初始时间参数。
进一步的,ID生成子服务接收到请求后,获取当前时间,并与上一次生成ID的时间进行比较,当前时间不早于上一次生成ID时间时,处理生成全局唯一的ID值并返回生成的ID值的步骤包括:
获取当前时间,并与上一次生成ID的时间进行比较,若当前时间比上一次生成ID时间早,返回错误码;否则进行一下步骤;
计算当前时间与初始时间的毫秒差,作为时间戳差值;
在自身维护的序列号的基础上加1,作为序列号值;
分别将时间戳差值,实例ID值,序列号值的二进制填充到64bit中相应的位置,形成全局唯一的ID值并返回生成的ID值。
进一步的,该方法还包括:
获取到全局唯一的ID值之后,将ID值作为数据记录的一部分插入数据库。
另一方面,本发明技术方案还提供一种微服务架构下快速生成ID的系统,包括处理封装模块、注册模块、微服务框架模块;
处理封装模块,用于将生成ID的方法封装成微服务框架中的一个ID生成子服务,并将ID生成子服务部署至多个节点中;
注册模块,用于将生成的ID生成子服务注册到微服务注册中心;
微服务框架模块,用于接收ID生成请求后,查询微服务注册中心是否存在正在运行的ID生成子服务;若存在,返回一个ID生成子服务地址;还用于接收到请求后,获取当前时间,并与上一次生成ID的时间进行比较,当前时间不早于上一次生成ID时间时,处理生成全局唯一的ID值并返回生成的ID值。
进一步的,注册模块,具体用于轮询每个节点中正在运行ID生成子服务,并将正在运行的ID生成子服务注册到微服务注册中心。
进一步的,微服务框架模块包括查询单元、调度请求单元、API接口子服务单元;
查询单元,用于接收到ID生成请求后,查询微服务注册中心是否存在正在运行的ID生成子服务;
调度请求单元,用于若存在正在运行的ID生成子服务时请求API接口子服务进行请求调度;
API接口子服务单元,用于获取当前运行的ID生成子服务的负载信息,根据当前所有ID生成子服务的负载信息返回一个ID生成子服务的地址。
进一步的,处理封装模块,还用于为每一个ID生成子服务分配一个唯一的实例ID值,并将实例ID值写入对应节点的配置文件中;
每个ID生成子服务在启动时,读取本节点配置文件获取自身的实例ID值和初始时间参数。
进一步的,微服务框架模块还包括ID生成子服务单元;ID生成子服务单元包括时间获取子模块、计算子模块、序列号值生成子模块和ID生成子模块;
时间获取子模块,用于获取当前时间,并与上一次生成ID的时间进行比较,若当前时间比上一次生成ID时间早,返回错误码;否则进行一下步骤;
计算子模块,用于计算当前时间与初始时间的毫秒差,作为时间戳差值;
序列号值生成子模块,用于在自身维护的序列号的基础上加1,作为序列号值;
ID生成子模块,用于分别将时间戳差值,实例ID值,序列号值的二进制填充到64bit中相应的位置,形成全局唯一的ID值。
进一步的,该系统还包括业务模块,业务模块,用于当向数据库中插入数据时,发送ID生成请求;还用于获取到该ID生成子服务地址后,向该ID生成子服务发送请求获取全局唯一的ID值。还用于获取到全局唯一的ID值之后,将ID值作为数据记录的一部分插入数据库。
从以上技术方案可以看出,本发明具有以下优点:在雪花算法的基础上,利用微服务架构思想,实现在高并发的场景下生成全局唯一并尽可能递增的ID。同时解决雪花算法时钟回拨产生相同ID的问题,使得在使用数据库时,大大提高应用程序的性能。有效的增强业务的吞吐量,提高了应用程序的性能。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例的方法的示意性流程图。
图2是本发明一个实施例的ID生成子服务接收到请求后的处理流程图。
图3是本发明一个实施例的系统的示意性框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
如图1所示,本发明实施例提供一种微服务架构下快速生成ID的方法,包括如下步骤:
S1:将生成ID的方法封装成微服务框架中的一个ID生成子服务,并将ID生成子服务部署至多个节点中;本步骤中,生成ID的方法的步骤如下:
利用雪花算法的思想,设计一种数据结构。该结构由以下几部分组成:
时间戳差值:该值表示的是当前时间与起始时间之间的时间差的毫秒值。
实例ID值:该值表示在一个微服务架构中,每一个程序实例的唯一标识。
序列号值:该值为顺序递增时,每次都在前值得基础上加一。
默认情况下,时间戳差值为41bit,实例ID值为10bit,序列号值为13bit。总共占用64bit。为了保证灵活,可以根据其需要设置每一部分的位长。比如用户的业务系统中负责生成ID的实例只有4个,那么实例ID值可以设置为2bit。序列号值和时间戳差值的长度可以相应的调大一点。只要总长度保证64bit即可。第一点中的起始时间可以由用户在配置文件中指定。第二点中的实例ID值,由用户在实例的配置文件中进行配置。
当该数据结构中的三部分都分配了相应值之后,将每一部分的二进制填充到64bit中相应的位置,形成最终的ID值。
S2:将生成的ID生成子服务注册到微服务注册中心;为了解决时钟回拨导致产生重复ID的问题,本方法将生成ID的功能提取出来单独作为一个子服务注册至微服务注册中心进行管理。
S3:当向数据库中插入数据时,发送ID生成请求;
S4:接收到ID生成请求后,查询微服务注册中心是否存在正在运行的ID生成子服务;
S5:若存在,返回一个ID生成子服务地址;需要说明的是,本步骤具体包括:若存在,则请求API接口子服务进行请求调度;API接口子服务获取当前运行的ID生成子服务的负载信息;根据当前所有ID生成子服务的负载信息返回一个ID生成子服务的地址;
S6:获取到该ID生成子服务地址后,向该ID生成子服务发送获取全局唯一的ID值的请求;
S7:ID生成子服务接收到请求后,获取当前时间,并与上一次生成ID的时间进行比较,当前时间不早于上一次生成ID时间时,处理生成全局唯一的ID值并返回生成的ID值。
在有些实施例中,步骤S2中,将生成的ID生成子服务注册到微服务注册中心的步骤包括:
轮询每个节点中正在运行ID生成子服务,并将正在运行的ID生成子服务注册到微服务注册中心。
在有些实施例中,根据当前所有ID生成子服务的负载信息返回一个ID生成子服务的地址的步骤包括:
将当前所有ID生成子服务的负载信息按负载由高到低进行排序;
返回负载最小的ID生成子服务的地址。
在有些实施例中,步骤S1中,将生成ID的方法封装成微服务框架中的一个ID生成子服务,并将ID生成子服务部署至多个节点中的步骤中,还包括:
为每一个ID生成子服务分配一个唯一的实例ID值,并将实例ID值写入对应节点的配置文件中;每个ID生成子服务在启动时,读取本节点配置文件获取自身的实例ID值和初始时间参数。
在有些实施例中,如图2所示,步骤S7中,ID生成子服务接收到请求后,获取当前时间,并与上一次生成ID的时间进行比较,当前时间不早于上一次生成ID时间时,处理生成全局唯一的ID值并返回生成的ID值的步骤包括:
S71:获取当前时间,并与上一次生成ID的时间进行比较,若当前时间比上一次生成ID时间早,执行步骤S72;否则执行步骤S73;
S72:返回错误码;
S73:计算当前时间与初始时间的毫秒差,作为时间戳差值;
S74:在自身维护的序列号的基础上加1,作为序列号值;
S75:分别将时间戳差值,实例ID值,序列号值的二进制填充到64bit中相应的位置,形成全局唯一的ID值并返回生成的ID值。
将该子服务平均分配到多个节点上进行部署。其他服务模块(比如订单服务)通过从微服务注册中心获取ID生成子服务的地址,通过请求获取ID值。如果服务调用方(这里是的是业务模块)在没有收到ID生成子服务返回的ID值,而是收到了表示ID重复的错误码,说明出现了时间回拨现象。服务调用方会向其他ID生成子服务重新获取ID值。
在有些实施例中,该方法还包括S8:
S8:获取到全局唯一的ID值之后,将ID值作为数据记录的一部分插入数据库。
利用微服务架构思想,解决雪花算法时钟回拨产生相同ID的问题,实现在高并发的场景下生成全局唯一并尽可能递增的ID。为了灵活,设计了一种数据结构,该结构的每一部分所占用的空间可以根据业务需求自由的调整。使得业务程序的性能得到有效的提高。
如图3所示,本发明实施例还提供一种微服务架构下快速生成ID的系统,包括处理封装模块、注册模块、微服务框架模块;
处理封装模块,用于将生成ID的方法封装成微服务框架中的一个ID生成子服务,并将ID生成子服务部署至多个节点中;
注册模块,用于将生成的ID生成子服务注册到微服务注册中心;
微服务框架模块,用于接收ID生成请求后,查询微服务注册中心是否存在正在运行的ID生成子服务;若存在,返回一个ID生成子服务地址;还用于接收到请求后,获取当前时间,并与上一次生成ID的时间进行比较,当前时间不早于上一次生成ID时间时,处理生成全局唯一的ID值并返回生成的ID值。
在有些实施例中,注册模块,具体用于轮询每个节点中正在运行ID生成子服务,并将正在运行的ID生成子服务注册到微服务注册中心。
在有些实施例中,微服务框架模块包括查询单元、调度请求单元、API接口子服务单元;
查询单元,用于接收到ID生成请求后,查询微服务注册中心是否存在正在运行的ID生成子服务;
调度请求单元,用于若存在正在运行的ID生成子服务时请求API接口子服务进行请求调度;
API接口子服务单元,用于获取当前运行的ID生成子服务的负载信息,根据当前所有ID生成子服务的负载信息返回一个ID生成子服务的地址。
在有些实施例中,处理封装模块,还用于为每一个ID生成子服务分配一个唯一的实例ID值,并将实例ID值写入对应节点的配置文件中;
每个ID生成子服务在启动时,读取本节点配置文件获取自身的实例ID值和初始时间参数。
在有些实施例中,微服务框架模块还包括ID生成子服务单元;ID生成子服务单元包括时间获取子模块、计算子模块、序列号值生成子模块和ID生成子模块;
时间获取子模块,用于获取当前时间,并与上一次生成ID的时间进行比较,若当前时间比上一次生成ID时间早,返回错误码;否则进行一下步骤;
计算子模块,用于计算当前时间与初始时间的毫秒差,作为时间戳差值;
序列号值生成子模块,用于在自身维护的序列号的基础上加1,作为序列号值;
ID生成子模块,用于分别将时间戳差值,实例ID值,序列号值的二进制填充到64bit中相应的位置,形成全局唯一的ID值。
在有些实施例中,该系统还包括业务模块,业务模块,用于当向数据库中插入数据时,发送ID生成请求;还用于获取到该ID生成子服务地址后,向该ID生成子服务发送请求获取全局唯一的ID值。还用于获取到全局唯一的ID值之后,将ID值作为数据记录的一部分插入数据库。
尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种微服务架构下快速生成ID的方法,其特征在于,包括如下步骤:
将生成ID的方法封装成微服务框架中的一个ID生成子服务,并将ID生成子服务部署至多个节点中;
将生成的ID生成子服务注册到微服务注册中心;
当向数据库中插入数据时,发送ID生成请求;
接收到ID生成请求后,查询微服务注册中心是否存在正在运行的ID生成子服务;
若存在,返回一个ID生成子服务地址;
获取到该ID生成子服务地址后,向该ID生成子服务发送获取全局唯一的ID值的请求;
ID生成子服务接收到请求后,获取当前时间,并与上一次生成ID的时间进行比较,当前时间不早于上一次生成ID时间时,处理生成全局唯一的ID值并返回生成的ID值。
2.根据权利要求1所述的微服务架构下快速生成ID的方法,其特征在于,将生成的ID生成子服务注册到微服务注册中心的步骤包括:
轮询每个节点中正在运行ID生成子服务,并将正在运行的ID生成子服务注册到微服务注册中心。
3.根据权利要求2所述的微服务架构下快速生成ID的方法,其特征在于,若存在,返回一个ID生成子服务地址的步骤包括:
若存在,则请求API接口子服务进行请求调度;
API接口子服务获取当前运行的ID生成子服务的负载信息;
根据当前所有ID生成子服务的负载信息返回一个ID生成子服务的地址。
4.根据权利要求3所述的微服务架构下快速生成ID的方法,其特征在于,根据当前所有ID生成子服务的负载信息返回一个ID生成子服务的地址的步骤包括:
将当前所有ID生成子服务的负载信息按负载由高到低进行排序;
返回负载最小的ID生成子服务的地址。
5.根据权利要求2所述的微服务架构下快速生成ID的方法,其特征在于,将生成ID的方法封装成微服务框架中的一个ID生成子服务,并将ID生成子服务部署至多个节点中的步骤中,还包括:
为每一个ID生成子服务分配一个唯一的实例ID值,并将实例ID值写入对应节点的配置文件中;
每个ID生成子服务在启动时,读取本节点配置文件获取自身的实例ID值和初始时间参数。
6.根据权利要求5所述的微服务架构下快速生成ID的方法,其特征在于,ID生成子服务接收到请求后,获取当前时间,并与上一次生成ID的时间进行比较,当前时间不早于上一次生成ID时间时,处理生成全局唯一的ID值并返回生成的ID值的步骤具体包括:
获取当前时间,并与上一次生成ID的时间进行比较,若当前时间比上一次生成ID时间早,返回错误码;否则进行一下步骤;
计算当前时间与初始时间的毫秒差,作为时间戳差值;
在自身维护的序列号的基础上加1,作为序列号值;
分别将时间戳差值,实例ID值,序列号值的二进制填充到64bit中相应的位置,形成全局唯一的ID值并返回生成的ID值。
7.根据权利要求5所述的微服务架构下快速生成ID的方法,其特征在于,该方法还包括:
获取到全局唯一的ID值之后,将ID值作为数据记录的一部分插入数据库。
8.一种微服务架构下快速生成ID的系统,其特征在于,包括处理封装模块、注册模块、微服务框架模块;
处理封装模块,用于将生成ID的方法封装成微服务框架中的一个ID生成子服务,并将ID生成子服务部署至多个节点中;
注册模块,用于将生成的ID生成子服务注册到微服务注册中心;
微服务框架模块,用于接收ID生成请求后,查询微服务注册中心是否存在正在运行的ID生成子服务;若存在,返回一个ID生成子服务地址;还用于接收到请求后,获取当前时间,并与上一次生成ID的时间进行比较,当前时间不早于上一次生成ID时间时,处理生成全局唯一的ID值并返回生成的ID值。
9.根据权利要求8所述的微服务架构下快速生成ID的系统,其特征在于,注册模块,具体用于轮询每个节点中正在运行ID生成子服务,并将正在运行的ID生成子服务注册到微服务注册中心。
10.根据权利要求9所述的微服务架构下快速生成ID的系统,其特征在于,微服务框架模块还包括ID生成子服务单元;ID生成子服务单元包括时间获取子模块、计算子模块、序列号值生成子模块和ID生成子模块;
时间获取子模块,用于获取当前时间,并与上一次生成ID的时间进行比较,若当前时间比上一次生成ID时间早,返回错误码;否则进行一下步骤;
计算子模块,用于计算当前时间与初始时间的毫秒差,作为时间戳差值;
序列号值生成子模块,用于在自身维护的序列号的基础上加1,作为序列号值;
ID生成子模块,用于分别将时间戳差值,实例ID值,序列号值的二进制填充到64bit中相应的位置,形成全局唯一的ID值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011209211.8A CN112463790A (zh) | 2020-11-03 | 2020-11-03 | 一种微服务架构下快速生成id的方法、系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011209211.8A CN112463790A (zh) | 2020-11-03 | 2020-11-03 | 一种微服务架构下快速生成id的方法、系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112463790A true CN112463790A (zh) | 2021-03-09 |
Family
ID=74835333
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011209211.8A Withdrawn CN112463790A (zh) | 2020-11-03 | 2020-11-03 | 一种微服务架构下快速生成id的方法、系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112463790A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113420029A (zh) * | 2021-06-25 | 2021-09-21 | 陕西浪潮英信科技有限公司 | 一种分布式系统全局id生成方法、装置、设备及介质 |
CN113626247A (zh) * | 2021-08-26 | 2021-11-09 | 宁波菊风系统软件有限公司 | 一种分布式系统中错误码传递方法 |
-
2020
- 2020-11-03 CN CN202011209211.8A patent/CN112463790A/zh not_active Withdrawn
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113420029A (zh) * | 2021-06-25 | 2021-09-21 | 陕西浪潮英信科技有限公司 | 一种分布式系统全局id生成方法、装置、设备及介质 |
CN113420029B (zh) * | 2021-06-25 | 2024-04-12 | 陕西浪潮英信科技有限公司 | 一种分布式系统全局id生成方法、装置、设备及介质 |
CN113626247A (zh) * | 2021-08-26 | 2021-11-09 | 宁波菊风系统软件有限公司 | 一种分布式系统中错误码传递方法 |
CN113626247B (zh) * | 2021-08-26 | 2024-03-22 | 宁波菊风系统软件有限公司 | 一种分布式系统中错误码传递方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI662426B (zh) | 分布式流式資料處理的方法和裝置 | |
CN106909451A (zh) | 一种分布式任务调度系统及方法 | |
CN111091429A (zh) | 电子票据标识分配方法及装置、电子票据生成系统 | |
CN106326361B (zh) | 一种基于HBase数据库的数据查询方法及装置 | |
CN112463790A (zh) | 一种微服务架构下快速生成id的方法、系统 | |
CN103246659B (zh) | 键值数据查询的方法和装置 | |
CN111629081B (zh) | 互联网协议ip地址数据处理方法、装置及电子设备 | |
CN107454203A (zh) | 在分布式系统中生成唯一id的方法 | |
CN111538594B (zh) | 基于分布式系统的订单id生成方法、装置、设备及介质 | |
CN110110006A (zh) | 数据管理方法及相关产品 | |
CN110134503B (zh) | 一种集群环境下的定时任务处理方法、装置及存储介质 | |
CN111722918A (zh) | 业务标识码生成方法、装置、存储介质及电子设备 | |
CN103838770A (zh) | 一种数据逻辑分区的方法和系统 | |
US20230370285A1 (en) | Block-chain-based data processing method, computer device, computer-readable storage medium | |
CN108399175B (zh) | 一种数据存储、查询方法及其装置 | |
CN110602158A (zh) | 全局唯一id生成系统与方法、id生成器与存储介质 | |
CN109241056B (zh) | 一种用于分布式系统的数字id生成系统 | |
CN110532243A (zh) | 数据处理方法、装置和电子设备 | |
CN111026767A (zh) | 区块链的数据存储方法、装置及硬件设备 | |
CN104636395A (zh) | 一种计数处理方法及装置 | |
CN106940712B (zh) | 序列生成方法与设备 | |
CN113505112B (zh) | 一种基于SnowFlake算法没有机器标识的ID生成方法、装置 | |
CN111782346B (zh) | 基于同库模式的分布式事务全局id生成方法及装置 | |
CN106951225B (zh) | 基于服务配置模板的数据处理方法及装置 | |
CN109586970A (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 | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20210309 |