CN112181306A - 一种号段模式下生成分布式id的方法 - Google Patents
一种号段模式下生成分布式id的方法 Download PDFInfo
- Publication number
- CN112181306A CN112181306A CN202011076032.1A CN202011076032A CN112181306A CN 112181306 A CN112181306 A CN 112181306A CN 202011076032 A CN202011076032 A CN 202011076032A CN 112181306 A CN112181306 A CN 112181306A
- Authority
- CN
- China
- Prior art keywords
- database
- local memory
- service
- number segment
- generating
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 17
- 230000009191 jumping Effects 0.000 claims description 6
- 239000000872 buffer Substances 0.000 abstract description 9
- 230000000903 blocking effect Effects 0.000 abstract description 8
- 238000005457 optimization Methods 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 3
- 230000007547 defect Effects 0.000 description 2
- 206010029412 Nightmare Diseases 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000004513 sizing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/30—Managing network names, e.g. use of aliases or nicknames
- H04L61/3015—Name registration, generation or assignment
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种号段模式下生成分布式ID的方法。本发明首先由客户端调用ID生成服务模块;其次从数据库读取下一个可用的ID序号;最后利用读取的ID序号生成对应的业务ID并存入相应的业务表中。其中,以第二步具体是判断本地内存中ID号段是否使用完;如果使用完从数据库中批量获取一段ID序号,并保存在本地内存中;否则根据本地内存中缓存的ID顺序递增生成业务ID。本发明还提出一种双缓冲区优化的方法。通过创建异步线程读取数据库中下一个可用号段。本发明针对原有方案的多次读取数据库修改为批量获取号段,减少访问数据库次数,降低数据库的压力。本发明还建立双缓冲区,异步获取号段减少阻塞概率,甚至可以达到无阻塞状态。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种分布式系统下使用号段模式生成分布式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序号,并保存在本地内存中的步骤包括:
(a)、判断本地内存中号段消耗量是否达到阈值,达到阈值便进行步骤(b)。
(b)、创建异步线程读取数据库DB中下一个可用号段。
(c)、将读取的号段值缓存在本地内存中。
本发明的有益效果:一、针对原有方案的多次读取数据库修改为批量获取号段,减少访问数据库次数,降低数据库的压力。二、建立双缓冲区,异步获取号段减少阻塞概率,甚至可以达到无阻塞状态。
附图说明
图1是号段模式下生成分布式ID的整体架构图。
图2是号段模式下的具体流程图。
图3是双缓冲区的优化方案图。
具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明作进一步详细说明。
如图1所示,所述为号段模式下生成分布式ID的整体架构图。不同的业务根据自身的tag参数调用不同的ID_Generator;ID_Generator根据本地内存中缓存的号段开始递增生成ID,然后写入到数据库中。如果本地内存号段用完了会去数据库DB中读取新的号段,并且更新在本地缓存中,以此减少访问数据库的次数。
重要字段说明:tag用来区分业务,max_id表示该tag目前所被分配的ID号段的最大值,step表示每次分配的号段长度。举个例子:tag在第一台机器上是1~1000的号段,当这个号段用完时,会去加载另一个长度为step=1000的号段,假设另外两台号段都没有更新,这个时候第一台机器新加载的号段就应该是3001~4000。同时数据库对应的tag这条数据的max_id会从3000被更新成4000。
如图2所示,本实施例提出了一种批量获取ID的方法,包括如下步骤。
第一步:客户端调用ID生成服务模块;
第二步:从数据库读取下一个可用的ID序号;
第三步:利用读取的ID序号生成对应的业务ID并存入相应的业务表中。
其中,以上所述第二步:从数据库读取下一个可用的ID序号的步骤包括:
(1)、判断本地内存中ID号段是否使用完;如果使用完就跳到第(2)步,否则的话跳到第(3)步。
(2)、从数据库DB中批量获取一段ID序号,并保存在本地内存中。
(3)、根据本地内存中缓存的ID顺序递增生成业务ID。
进一步,结合图2详细说明第二步:从数据库读取下一个可用的ID序号的步骤包括:
(a)、每一个业务服务模块会调用它对应的ID_Generator;
(b)、检查本地内存中缓存的号段是否已经使用完。如果使用完了的话,会去调用ID生成服务从数据库DB中获取下一个号段的起始大小并加上step步长缓存在本地。没使用完的话,继续使用本地号段递增生成业务ID。
(c)、将生成的这个业务ID保存到对应业务的数据表中。
进一步,原方案是每次获取ID都得读写一次数据库,造成数据库压力大。现在改为利用代理server批量获取,每次获取一个segment(step决定大小)号段的值。用完之后再去数据库获取新的号段,可以大大的减轻数据库的压力。并且各个业务不同的发号需求用tag字段来区分,每个tag的ID获取相互隔离,互不影响。如果以后有性能需求需要对数据库进行扩容的话,则不需要上述描述的复杂的扩容操作,只需要对tag分库分表就行。此外,原来获取ID每次都需要写数据库,现在只需要把step设置得足够大,比如1000。那么只有当1000个号被消耗完了之后才会去重新读写一次数据库。读写数据库的频率从1减小到了1/step。
如图3所示,本实施例提出一种双缓冲区的优化方案,包括以下几步:
(a)、判断本地内存中号段消耗量是否达到阈值,达到阈值便进行步骤(b)。
(b)、创建异步线程读取数据库DB中下一个可用号段。
(c)、将读取的号段值缓存在本地内存中。
进一步,通过在本地内存中建立双缓冲区以达到获取号段的时候降低阻塞或者达到无阻塞的优化方式。采用双缓冲区的方式,ID_Generator服务内部有两个号段缓存区segment号段。比如,如果在当前号段已经下发10%时,但是下一个号段未更新,则另启一个更新线程去更新下一个号段。当前号段全部下发完后,如果下个号段准备好了则切换到下个号段为当前segment接着下发,循环往复。
进一步,所述取号段的时机是在号段消耗完的时候才开始进行的,也就意味着号段临界点的ID下发时间取决于下一次从DB取回号段的时间,并且在这期间进来的请求也会因为DB号段没有取回来,导致线程阻塞。如果请求DB的网络和DB的性能稳定,这种情况对系统的影响是不大的,但是假如取DB的时候网络发生抖动,或者DB发生慢查询就会导致整个系统的响应时间变慢。为此,如果希望DB取号段的过程能够做到无阻塞,不需要在DB取号段的时候阻塞请求线程,即当号段消费到某个百分点时就异步的把下一个号段加载到内存中。而不需要等到号段用尽的时候才去更新号段,这样做就可以很大程度上的降低系统的TP999指标。
Claims (3)
1.一种号段模式下生成分布式ID的方法,其特征在于该方法包括以下步骤:
第一步:客户端调用ID生成服务模块;
第二步:从数据库读取下一个可用的ID序号;
第三步:利用读取的ID序号生成对应的业务ID并存入相应的业务表中;
其中,以上所述第二步从数据库读取下一个可用的ID序号的步骤包括:
(1)、判断本地内存中ID号段是否使用完;如果使用完就跳到第(2)步,否则的话跳到第(3)步;
(2)、从数据库中批量获取一段ID序号,并保存在本地内存中;
(3)、根据本地内存中缓存的ID顺序递增生成业务ID。
2.根据权利要求1所述的一种号段模式下生成分布式ID的方法,其特征在于:第一步中不同的业务根据自身的tag参数调用不同的ID生成服务模块,所述tag参数用于区分业务。
3.根据权利要求1所述的一种号段模式下生成分布式ID的方法,其特征在于:从数据库批量获取一段ID序号,并保存在本地内存中的步骤包括:
(a)、判断本地内存中号段消耗量是否达到阈值,达到阈值便进行步骤(b);
(b)、创建异步线程读取数据库中下一个可用号段;
(c)、将读取的号段值缓存在本地内存中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011076032.1A CN112181306A (zh) | 2020-10-10 | 2020-10-10 | 一种号段模式下生成分布式id的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011076032.1A CN112181306A (zh) | 2020-10-10 | 2020-10-10 | 一种号段模式下生成分布式id的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112181306A true CN112181306A (zh) | 2021-01-05 |
Family
ID=73948998
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011076032.1A Pending CN112181306A (zh) | 2020-10-10 | 2020-10-10 | 一种号段模式下生成分布式id的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112181306A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113553331A (zh) * | 2021-07-28 | 2021-10-26 | 厦门南讯股份有限公司 | 基于数据库的多服务间积分日志id生成方法 |
CN113568891A (zh) * | 2021-08-05 | 2021-10-29 | 深圳墨世科技有限公司 | 分布式id生成方法、装置、服务器和可读存储介质 |
CN113626496A (zh) * | 2021-07-30 | 2021-11-09 | 浪潮云信息技术股份公司 | 一种分布式唯一id生成方法 |
CN113905014A (zh) * | 2021-08-27 | 2022-01-07 | 拉卡拉支付股份有限公司 | 用于为终端设备分配id号的方法、服务器和存储介质 |
CN114244807A (zh) * | 2022-02-25 | 2022-03-25 | 山东宁泓信息技术有限公司 | 一种分布式id生成系统 |
CN114281872A (zh) * | 2022-03-07 | 2022-04-05 | 广联达科技股份有限公司 | 分布式序列号的生成方法、装置、设备及可读存储介质 |
CN114283025A (zh) * | 2021-11-25 | 2022-04-05 | 国电南瑞科技股份有限公司 | 一种适用于电力物联网的设备id生成方法、装置及设备接入方法 |
CN114327268A (zh) * | 2021-12-27 | 2022-04-12 | 北京云思智学科技有限公司 | 一种应用于kv存储的自适应防护方法、装置及存储介质 |
CN114444440A (zh) * | 2022-01-30 | 2022-05-06 | 中国农业银行股份有限公司 | 一种标识符生成方法、装置、存储介质及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106911780A (zh) * | 2017-02-28 | 2017-06-30 | 北京三快在线科技有限公司 | 业务id生成方法、装置及系统 |
CN109104490A (zh) * | 2018-08-29 | 2018-12-28 | 北京达佳互联信息技术有限公司 | 业务标识管理方法、装置、电子设备及存储介质 |
CN110554732A (zh) * | 2019-08-22 | 2019-12-10 | 北京奇艺世纪科技有限公司 | 一种标识号生成方法、生成装置、电子设备及存储介质 |
CN111126537A (zh) * | 2019-12-17 | 2020-05-08 | 北京达佳互联信息技术有限公司 | 标识码id的生成方法及相关产品 |
-
2020
- 2020-10-10 CN CN202011076032.1A patent/CN112181306A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106911780A (zh) * | 2017-02-28 | 2017-06-30 | 北京三快在线科技有限公司 | 业务id生成方法、装置及系统 |
CN109104490A (zh) * | 2018-08-29 | 2018-12-28 | 北京达佳互联信息技术有限公司 | 业务标识管理方法、装置、电子设备及存储介质 |
CN110554732A (zh) * | 2019-08-22 | 2019-12-10 | 北京奇艺世纪科技有限公司 | 一种标识号生成方法、生成装置、电子设备及存储介质 |
CN111126537A (zh) * | 2019-12-17 | 2020-05-08 | 北京达佳互联信息技术有限公司 | 标识码id的生成方法及相关产品 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113553331A (zh) * | 2021-07-28 | 2021-10-26 | 厦门南讯股份有限公司 | 基于数据库的多服务间积分日志id生成方法 |
CN113626496A (zh) * | 2021-07-30 | 2021-11-09 | 浪潮云信息技术股份公司 | 一种分布式唯一id生成方法 |
CN113568891A (zh) * | 2021-08-05 | 2021-10-29 | 深圳墨世科技有限公司 | 分布式id生成方法、装置、服务器和可读存储介质 |
CN113568891B (zh) * | 2021-08-05 | 2024-02-20 | 深圳墨世科技有限公司 | 分布式id生成方法、装置、服务器和可读存储介质 |
CN113905014A (zh) * | 2021-08-27 | 2022-01-07 | 拉卡拉支付股份有限公司 | 用于为终端设备分配id号的方法、服务器和存储介质 |
CN113905014B (zh) * | 2021-08-27 | 2024-05-28 | 拉卡拉支付股份有限公司 | 用于为终端设备分配id号的方法、服务器和存储介质 |
CN114283025A (zh) * | 2021-11-25 | 2022-04-05 | 国电南瑞科技股份有限公司 | 一种适用于电力物联网的设备id生成方法、装置及设备接入方法 |
CN114327268A (zh) * | 2021-12-27 | 2022-04-12 | 北京云思智学科技有限公司 | 一种应用于kv存储的自适应防护方法、装置及存储介质 |
CN114444440A (zh) * | 2022-01-30 | 2022-05-06 | 中国农业银行股份有限公司 | 一种标识符生成方法、装置、存储介质及系统 |
CN114244807A (zh) * | 2022-02-25 | 2022-03-25 | 山东宁泓信息技术有限公司 | 一种分布式id生成系统 |
CN114281872A (zh) * | 2022-03-07 | 2022-04-05 | 广联达科技股份有限公司 | 分布式序列号的生成方法、装置、设备及可读存储介质 |
CN114281872B (zh) * | 2022-03-07 | 2022-05-24 | 广联达科技股份有限公司 | 分布式序列号的生成方法、装置、设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112181306A (zh) | 一种号段模式下生成分布式id的方法 | |
CN104202423B (zh) | 一种通过软件架构扩展缓存的系统 | |
CN112612799B (zh) | 一种数据同步方法及终端 | |
CN113064903B (zh) | 一种全局id生成方法、装置、设备及存储介质 | |
CN114036077B (zh) | 数据处理方法及相关装置 | |
CN106682139A (zh) | 一种基于Solr实现HBase多条件查询的方法及系统 | |
CN112328632B (zh) | 一种分布式两级缓存的方法和系统 | |
CN114490744B (zh) | 一种数据缓存方法、存储介质、电子装置 | |
CN111046106A (zh) | 缓存数据同步方法、装置、设备及介质 | |
CN112000850B (zh) | 进行数据处理的方法、装置、系统及设备 | |
CN113553331A (zh) | 基于数据库的多服务间积分日志id生成方法 | |
CN112181302A (zh) | 一种数据多级存储和访问方法及系统 | |
CN116150207A (zh) | 一种数据缓存方法、装置、电子设备及存储介质 | |
CN113961566A (zh) | 一种交易流水的处理方法及系统 | |
CN114253870A (zh) | 一种更新l2p表的方法、系统、设备以及介质 | |
CN111669313B (zh) | 一种即时通讯系统消息的储存及同步方法 | |
CN112818166B (zh) | 一种视频信息查询方法、装置、电子设备和存储介质 | |
CN114328738A (zh) | 数据处理方法、装置、电子设备及可读存储介质 | |
CN111209304B (zh) | 数据处理方法、装置及系统 | |
CN113297327A (zh) | 生成分布式id的系统和方法 | |
CN112134805B (zh) | 基于硬件实现的快速路由更新电路结构及更新方法 | |
CN108241684B (zh) | 一种数据更新方法和集群系统 | |
CN118585587A (zh) | 一种基于号段模式的分布式唯一id生成方法 | |
CN113590661A (zh) | 数据缓存方法、装置、服务器和计算机可读存储介质 | |
CN117453818A (zh) | 一种基于数据库的分布式id生成方法及工具 |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210105 |