[发明专利]一种号段模式下生成分布式ID的方法在审
申请号: | 202011076032.1 | 申请日: | 2020-10-10 |
公开(公告)号: | CN112181306A | 公开(公告)日: | 2021-01-05 |
发明(设计)人: | 陈科明;檀宇;杜坤;周涛 | 申请(专利权)人: | 杭州电子科技大学 |
主分类号: | G06F3/06 | 分类号: | G06F3/06;H04L29/12 |
代理公司: | 浙江千克知识产权代理有限公司 33246 | 代理人: | 周希良 |
地址: | 310018 浙江*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 模式 生成 分布式 id 方法 | ||
本发明公开了一种号段模式下生成分布式ID的方法。本发明首先由客户端调用ID生成服务模块;其次从数据库读取下一个可用的ID序号;最后利用读取的ID序号生成对应的业务ID并存入相应的业务表中。其中,以第二步具体是判断本地内存中ID号段是否使用完;如果使用完从数据库中批量获取一段ID序号,并保存在本地内存中;否则根据本地内存中缓存的ID顺序递增生成业务ID。本发明还提出一种双缓冲区优化的方法。通过创建异步线程读取数据库中下一个可用号段。本发明针对原有方案的多次读取数据库修改为批量获取号段,减少访问数据库次数,降低数据库的压力。本发明还建立双缓冲区,异步获取号段减少阻塞概率,甚至可以达到无阻塞状态。
技术领域
本发明涉及计算机技术领域,尤其涉及一种分布式系统下使用号段模式生成分布式ID的方法。
背景技术
随着互联网的快速发展,项目体量越来越大,在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,MySQL数据库的自增ID显然不能满足需求,此时一个能够生成全局唯一ID的系统是非常必要的。
在分布式系统中我们需要部署多台机器,每台机器设置不同的初始值,且步长和机器数相等。比如有两台机器。设置步长step为2,如TicketServer1的初始值为1(1,3,5,7,9,11…);TicketServer2的初始值为2(2,4,6,8,10…)。以此类推,假设我们要部署N台机器,步长需设置为N,每台的初始值依次为0,1,2…N-1。则第一台机器为0,N,2N,3N…;第二台为1,1+N,1+2N…;第三台,以至于第N-1台也是这样的规律。
这种架构貌似能够满足性能的需求,但有以下几个缺点:
1、系统水平扩展比较困难,比如定义好了步长和机器台数之后,如果要添加机器该怎么做。假设现在只有一台机器发号是1,2,3,4,5(步长是1),这个时候需要扩容机器一台。可以这样做:把第二台机器的初始值设置得比第一台超过很多,比如14(假设在扩容时间之内第一台不可能发到14),同时设置步长为2,那么这台机器下发的号码都是14以后的偶数。然后摘掉第一台,把ID值保留为奇数,比如7,然后修改第一台的步长为2。让它符合我们定义的号段标准,对于这个例子来说就是让第一台以后只能产生奇数。扩容方案看起来复杂吗。貌似还好,现在想象一下如果我们线上有100台机器,这个时候要扩容该怎么做。简直是噩梦。所以系统水平扩展方案复杂难以实现。
2、ID没有了单调递增的特性,只能趋势递增,这个缺点对于一般业务需求不是很重要,可以容忍。
3、数据库压力还是很大,每次获取ID都得读写一次数据库,只能靠堆机器来提高性能。
发明内容
本发明针对现有技术的不足,提供了一种号段模式下生成分布式ID的方法
包括以下步骤:
第一步:客户端调用ID生成服务模块;
第二步:从数据库读取下一个可用的ID序号;
第三步:利用读取的ID序号生成对应的业务ID并存入相应的业务表中。
其中,以上所述第二步从数据库读取下一个可用的ID序号的步骤包括:
(1)、判断本地内存中ID号段是否使用完;如果使用完就跳到第(2)步,否则的话跳到第(3)步。
(2)、从数据库DB中批量获取一段ID序号,并保存在本地内存中。
(3)、根据本地内存中缓存的ID顺序递增生成业务ID。
本发明还提出一种双缓冲区优化的方法。
所述为以上的第(2)步从数据库批量获取一段ID序号,并保存在本地内存中的步骤包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州电子科技大学,未经杭州电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011076032.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种应用于土地整治施工用的修复处理装置
- 下一篇:一种火焰除草机