logo好方法网

一种多域机房的ID生成器及ID生成方法

技术摘要:
本发明公开了一种多域机房的ID生成器及ID生成方法,涉及ID生成器技术领域,所述生成器面向分布式系统的业务,其产生的ID在全局具有唯一性,且产生的ID在趋势上递增;该生成器生成的ID包含正负位、时间戳、工作机器ID和序列号,所述工作机器ID包括数据中心ID和工作节点I  全部
背景技术:
随着社会现代化和智能化的脚步不断加快,各类APP的用户数和业务数也在快速 增长。在业务数据量不大的时候,单库单表完全可以支撑现有业务,数据再大一点,就使用 数据库主从同步读写分离也能对付。但随着数据日渐增长,主从同步也扛不住了,就需要对 数据库进行分库分表,但分库分表后需要有一个唯一ID来标识一条数据,数据库的自增ID 显然不能满足需求;特别是交易订单,优惠券等也都需要有唯一ID做标识。此时一个能够生 成全局唯一ID的系统是非常必要的。
技术实现要素:
本发明的技术任务是针对以上不足之处,提供一种多域机房的ID生成器及  ID生 成方法,实现了生成具有全局唯一性,趋势上递增,高可用性,高性能性的分布式ID生成器, 满足高并发业务场景下的高速产生不重复的ID需求。 本发明解决其技术问题所采用的技术方案是: 一种多域机房的ID生成器,该生成器面向分布式系统的业务,其产生的ID  在全局 具有唯一性,且产生的ID在趋势上递增; 该生成器生成的ID包含正负位、时间戳、工作机器ID和序列号, 所述工作机器ID包括数据中心ID和工作节点ID,所述序列号用于记录同一机器同 一时间内产生的不同ID; 该生成器根据时间自定义唯一性workid,保证极短时间内自增ID的唯一性。 通过该生成器生成的ID,既不会对数据库产生很大的读写压力,也可以产生趋势 上递增的、具有一定业务含义的ID,还可以保证高效快速地产生不重复的ID。 优选的,所述生成的ID大小为64bit,其中,正负位1bit、时间戳41bit、工作机器 ID10bit以及序列号12bit。 进一步的,所述正负位固定是0。二进制中最高位为1的都是负数,但该生成器生成 的ID一般都是正数,所以这个最高位固定是0。 优选的,所述时间戳记录为毫秒级时间,提高生成ID的效率。 优选的,所述工作机器ID的高位5bit表示数据中心ID,低位5bit表示工作节点ID。 工作机器ID10bit的长度最多能够支持部署1024个节点,生成器实现生成ID主要依靠数据 中心ID和工作节点ID。 具体的,通过自定义保证ID唯一性的过程如下: 在发起生成ID的请求之后,系统自动获取当前时间戳,将这个时间戳与上次的时 间戳进行对比; 3 CN 111611247 A 说 明 书 2/5 页 获取的当前时间戳如果小于上次时间戳,算法则会提示获取的时间戳异常;若二 者相等,则在序列号上加一;若当前时间戳大于上次时间戳,就将二者相减,并将序列号置 为0; 然后进行位运算,时间戳左移相应的位数,数据ID左移相应的位数,工作  ID左移 相应的位数;将经过运算后的各个部分按顺序拼接起来输出,即可得到新的ID。 本发明还要求保护一种多域机房的ID生成方法,该方法面向分布式系统的业务, 产生的ID在全局具有唯一性,且产生的ID在趋势上递增; 所述产生的ID包含正负位、时间戳、工作机器ID和序列号, 所述工作机器ID包括数据中心ID和工作节点ID,所述序列号用于记录同一机器同 一时间内产生的不同ID; 该方法根据时间自定义唯一性workid,保证极短时间内自增ID的唯一性。 优选的,所述生成的ID大小为64bit,正负位1bit、时间戳41bit、工作机器ID10bit 以及序列号12bit。 二进制中最高位为1的都是负数,但该生成器生成的ID一般都是正数,所以这个最 高位固定为是0。所述时间戳记录为毫秒级时间,提高生成ID的效率。工作机器ID10bit的长 度最多能够支持部署1024个节点,所述工作机器ID的高位5bit表示数据中心ID,低位5bit 表示工作节点ID。生成器实现生成ID  主要依靠数据中心ID和工作节点ID。 具体的,该方法中,通过自定义保证ID唯一性的过程如下: 在发起生成ID的请求之后,系统自动获取当前时间戳,将这个时间戳与上次的时 间戳进行对比; 获取的当前时间戳如果小于上次时间戳,算法则会提示获取的时间戳异常;若二 者相等,则在序列号上加一;若当前时间戳大于上次时间戳,就将二者相减,并将序列号置 为0; 然后进行位运算,时间戳左移相应的位数,数据ID左移相应的位数,工作  ID左移 相应的位数;将经过运算后的各个部分按顺序拼接起来输出,即可得到新的ID。 本发明还要求保护一种计算机可读介质,所述计算机可读介质上存储有计算机指 令,所述计算机指令在被处理器执行时,使所述处理器执行上述的方法。 本发明的一种多域机房的ID生成器及ID生成方法与现有技术相比,具有以下有益 效果: 该方法及生成器生成的ID具有趋势递增的效果,既不会像连续的递增那样容易被 人发现规律,又可以满足业务上对时间排序的需求; 由于工作机器ID有数据中心ID和工作节点ID区分,所以整个分布式系统内不会产 生ID的碰撞; 生成ID的效率高,满足了高并发业务场景下的高速产生不重复ID的需求。
分享到:
收藏