
技术摘要:
本发明公开了一种分布式ID生成方法及系统,其中,方法包括如下步骤:S1用于接收客户端发送的ID生成请求的步骤;S2用于根据ID生成请求获取当前时间并调用ID生成器的步骤;S3用于根据ID生成器预设的规则生成一个或多个分布式ID的步骤。这样,本发明所提供了一种分布式ID 全部
背景技术:
随着互联网技术的发展,项目越来越复杂,微服务架构和分布式服务部署已经必 不可少,人们在不同业务场景下的产生的进程越来越频繁,在不同的业务需求中需要一些 唯一的ID,作为某个数据的标识,如何使这些ID或者主键满足分布式要求,从进行有效的管 理是急需解决的问题。目前主要的解决方案有六种:第一种是使用UUID,它的优势在于通过 本地生成,不经过网络IO,效率高,但有无序,不是自增序列,生成ID太长,占用空间比较多 等缺点;第二种是使用数据库主键自增,优势在于简单方便,有序递增,方便排序和主键索 引查找,但有并发性能弱等缺点;第三种是使用redis,优势在于性能笔数据库主键自增的 高,能满足有序递增,但有存在数据丢失,生成ID重复的风险,依赖于Redis等缺点;第四种 是使用zookeeper,有严重依赖Zookeeper集群,并且性能低等缺点;第五种是使用数据库分 段和服务缓存ID,优势在于比主键递增性能高,保证趋势递增,宕机了服务端还可以使用本 地step取到的ID,但是依然会影响ID生成;第六种是使用snowFlake,优势在于高性能,低延 时,分布式环境保证唯一,趋势性递增,不依赖于数据库或者其他中间件,但需要独立的开 发和部署,依赖于机器的时钟。
技术实现要素:
本发明的目的是提供一种分布式ID生成方法及系统。 本发明提供了一种分布式ID生成方法,包括如下步骤: S1用于接收客户端发送的ID生成请求的步骤; S2用于根据ID生成请求获取当前时间并调用ID生成器的步骤; S3用于根据ID生成器预设的规则生成一个或多个分布式ID的步骤。 所述S3用于根据ID生成器预设的规则生成一个或多个分布式ID的步骤包括:S31 用于提取本地时间戳、获取工作机器ID、通过自增任意值生成序列号的步骤;S32用于根据 时间戳、工作机器ID及序列号生成请求所对应的ID的步骤;S33用于将对应ID发送至后台的 步骤。所述对应ID的第一位标识为正负数和41位的时间戳,10位的机器标识码,自增任意值 分别转换为二进制依次排列。所述对应ID根据机器码的编号进行压缩,自动生成为19位数 字。用于以datetime格式时间加上调用者在同一毫秒内设定长度的序号,当序列号到达长 度为设定长度的最大值时,则到下一秒获取ID的步骤。用于以timestamp时间戳格式时间加 上调用者在同一毫秒内设定长度的序号,当序列号到达长度为设定长度的最大值时,则到 下一秒获取ID的步骤。 本发明提供了一种分布式ID生成系统,包括:用于接收客户端发送的ID生成请求 的模块;用于根据ID生成请求获取当前时间并调用ID生成器的模块;用于根据ID生成器预 设的规则生成一个或多个分布式ID的模块。 3 CN 111580992 A 说 明 书 2/5 页 所述用于根据ID生成器预设的规则生成一个或多个分布式ID的模块包括:用于提 取本地时间戳、获取工作机器ID、通过自增任意值生成序列号的子模块;用于根据时间戳、 工作机器ID及序列号生成请求所对应的ID的子模块;用于将对应ID发送至后台的子模块。 所述对应ID的第一位标识为正负数和41位的时间戳,10位的机器标识码,自增任意值分别 转换为二进制依次排列的单元。所述对应ID根据机器码的编号进行压缩,自动生成为19位 数字的单元。用于以datetime格式时间加上调用者在同一毫秒内设定长度的序号,当序列 号到达长度为设定长度的最大值时,则到下一秒获取ID的模块。用于以timestamp时间戳格 式时间加上调用者在同一毫秒内设定长度的序号,当序列号到达长度为设定长度的最大值 时,则到下一秒获取ID的模块。 本发明提供了一种分布式ID生成方法及系统,针对现有技术存在的缺陷,以REST 服务的方式,提高了分布式ID生成的性能和效率,调用者可以根据自己业务需要选择合适 的ID生成方式。 附图说明 图1为本发明实施例一所提供的分布式ID生成方法的步骤示意图; 图2为本发明实施例一所述S3用于根据ID生成器预设的规则生成一个或多个分布 式ID的步骤示意图。