CN113515557A - 分布式短序列号生成方法及装置 - Google Patents
分布式短序列号生成方法及装置 Download PDFInfo
- Publication number
- CN113515557A CN113515557A CN202110451781.6A CN202110451781A CN113515557A CN 113515557 A CN113515557 A CN 113515557A CN 202110451781 A CN202110451781 A CN 202110451781A CN 113515557 A CN113515557 A CN 113515557A
- Authority
- CN
- China
- Prior art keywords
- request
- node
- serial
- sequence
- time interval
- 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 42
- 230000006870 function Effects 0.000 claims description 27
- 238000004590 computer program Methods 0.000 claims description 10
- 238000012545 processing Methods 0.000 claims description 7
- 238000004891 communication Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 8
- 241000533950 Leucojum Species 0.000 description 6
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000004904 shortening Methods 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/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- 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
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- 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
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2477—Temporal data queries
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Probability & Statistics with Applications (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Fuzzy Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种分布式短序列号生成方法及装置,涉及计算机领域及金融领域。该方法包括:根据节点总数将预设的序列号重复周期划分为多个时间区间,按时间顺序为所述多个时间区间进行十进制编号得到各时间区间的区间ID;在每个时间区间内分别为各节点生成一个序列号;接收节点发送的序列号请求,并比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小;当所述序列号请求中的序列号数目小于或等于已经生成的对应节点的序列号数目时,按照所述序列号请求向所述节点发送序列号。本申请在节省序列号位数的同时,改善了序列号的生成性能,可用尽节点启动之后至当前时间生成的所有序列号,有效应对交易高峰时的高并发现象。
Description
技术领域
本发明涉及计算机领域及金融领域,具体涉及一种分布式短序列号生成方法及装置。
背景技术
在分布式序列号的设计中,为了良好的支持横向扩展,序列号通常不会与持久层相关联,而是基于应用节点纯内存生成。例如雪花算法,其原理为将序列号按二进制位分割为“毫秒时间戳|节点ID|顺序位”,由于各节点ID不同,因此各节点的序列号也不会重复。对于每一节点,记录上次生成的时间戳以判断是否同一时间有多次请求,若是则针对每一次请求使顺序位依次+1,若顺序位溢出则归0等待下一毫秒。
上述雪花算法的实现需要保证序列号位数足够多,当位数不够时可改进雪花算法。比如缩短节点ID与顺序位,甚至可以取消顺序位。
然而,取消顺序位后,为了保证序列号不重复,每个节点在每个时间戳仅能生成1个序列号,也即每个节点生成序列号的速率仅为总节点数分之一,由于序列号是按时间均匀生成,而序列号请求并非均匀发生,在序列号请求的高并发时段,现有的系列号生成方法无法快速响应。因此,现有技术中,在序列号位数不够多时,序列号的生成性能会受到严重影响,无法应对突如其来的高并发现象。
发明内容
为了解决现有技术中存在的问题,本申请提供一种分布式短序列号生成方法,涉及计算机领域及金融领域,该分布式短序列号生成方法包括:
根据节点总数将预设的序列号重复周期划分为多个时间区间,按时间顺序为所述多个时间区间进行十进制编号得到各时间区间的区间ID;
在每个时间区间内分别为各节点生成一个序列号;
接收节点发送的序列号请求,并比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小;
按照比较结果及序列号发送策略向对应节点发送序列号。
在一实施例中,所述按照比较结果及序列号发送策略向对应节点发送序列号,包括:
当所述序列号请求中的序列号数目小于或等于已经生成的对应节点的序列号数目时,按照所述序列号请求向所述节点发送序列号;
当所述序列号请求中的序列号数目大于已经生成的对应节点的序列号数目时,暂停接收所述节点的序列号请求,直至已经生成的对应节点的序列号数目等于所述序列号请求中的序列号数目时,按照所述序列号请求向所述节点发送序列号。
在一实施例中,所述在每个时间区间内分别为各节点生成一个序列号,包括:
根据预设的序列号生成函数在当前时间区间内分别为各节点生成一个序列号;
所述序列号生成函数为:
序列号=当前时间区间的区间ID×时间区间长度+节点ID
其中,时间区间长度等于节点总数,节点ID为各节点对应的十进制编号。
在一实施例中,所述分布式短序列号生成方法还包括:
当所述节点在当前序列号重复周期内重启时,确定所述节点的重启时刻所在的时间区间;
删除所述重启时刻所在的时间区间以及所述重启时刻所在的时间区间之前的时间区间内生成的全部序列号,并更新已经生成的对应节点的序列号数目。
在一实施例中,所述比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小之前,还包括:
确定所述节点发送所述序列号请求的请求时间戳,以及所述节点发送的前一序列号请求的请求时间戳;
判断所述序列号请求的请求时间戳是否晚于所述节点发送的前一序列号请求的请求时间戳;
若是,则比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小;若否,则拒绝接收所述序列号请求。
在一实施例中,所述确定所述节点发送所述序列号请求的请求时间戳,包括:
确定所述节点发送所述序列号请求的时刻所在的时间区间;
将所述时间区间代入预设的请求时间戳确定函数,
请求时间戳=时间区间的区间ID×时间区间长度。
在一实施例中,所述节点发送的前一序列号请求的请求时间戳,包括:
确定节点发送前一序列号请求的请求时刻所在的时间区间;
将所述时间区间代入预设的请求时间戳确定函数,
请求时间戳=时间区间的区间ID×时间区间长度。
本申请还提供一种分布式短序列号生成装置,用于实现本申请提供的分布式短序列号生成方法,该装置包括:
时间区间确定模块,用于根据节点总数将预设的序列号重复周期划分为多个时间区间,按时间顺序为所述多个时间区间进行十进制编号得到各时间区间的区间ID;
序列号生成模块,用于在每个时间区间内分别为各节点生成一个序列号;
序列号比较模块,用于接收节点发送的序列号请求,并比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小;
序列号发送模块,用于按照比较结果及序列号发送策略向对应节点发送序列号。
其中,所述序列号生成模块具体用于:
根据预设的序列号生成函数在当前时间区间内分别为各节点生成一个序列号;
所述序列号生成函数为:
序列号=当前时间区间的区间ID×时间区间长度+节点ID
其中,时间区间长度等于节点总数,节点ID为各节点对应的十进制编号。
在一实施例中,所述序列号发送模块具体用于:
当所述序列号请求中的序列号数目小于或等于已经生成的对应节点的序列号数目时,按照所述序列号请求向所述节点发送序列号;
当所述序列号请求中的序列号数目大于已经生成的对应节点的序列号数目时,暂停接收所述节点的序列号请求,并实时判断已经生成的对应节点的序列号数目是否等于所述序列号请求中的序列号数目;当已经生成的对应节点的序列号数目是否等于所述序列号请求中的序列号数目时,按照所述序列号请求向所述节点发送序列号。
在一实施例中,所述分布式短序列号生成装置还包括:
重启时间区间确定模块,用于当所述节点在当前序列号重复周期内重启时,确定所述节点的重启时刻所在的时间区间;
序列号更新模块,用于删除所述重启时刻所在的时间区间以及所述重启时刻所在的时间区间之前的时间区间内生成的全部序列号,并更新已经生成的对应节点的序列号数目。
在一实施例中,所述分布式短序列号生成装置还包括:
时间确定模块,用于确定所述节点发送所述序列号请求的请求时间戳,以及所述节点发送的前一序列号请求的请求时间戳;
有效性判断模块,用于判断所述序列号请求的请求时间戳是否晚于所述节点发送的前一序列号请求的请求时间戳;若是,则比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小;若否,则拒绝接收所述序列号请求。
在一实施例中,所述时间确定模块具体用于:
确定所述节点发送所述序列号请求的时刻所在的时间区间;
将所述时间区间代入预设的请求时间戳确定函数,
请求时间戳=时间区间的区间ID×时间区间长度。
在一实施例中,所述时间确定模块包括请求时间戳确定单元,用于:
确定节点发送前一序列号请求的请求时刻所在的时间区间;
将所述时间区间代入预设的请求时间戳确定函数,
请求时间戳=时间区间的区间ID×时间区间长度。
本申请的分布式短序列号生成方法及装置在雪花算法的基础上用尽节点启动之后至当前时间生成的所有序列号,在交易低谷时储蓄了多余的序列号,可有效应对交易高峰时突如其来的高并发现象。在节省序列号位数的同时,改善了序列号的生成性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为分布式短序列号生成方法的示意图。
图2为分布式短序列号生成方法的另一种示意图。
图3为分布式短序列号生成方法的另一种示意图。
图4为分布式短序列号生成方法的另一种示意图。
图5为分布式短序列号生成装置的示意图。
图6为分布式短序列号生成装置的另一种示意图。
图7为分布式短序列号生成装置的另一种示意图。
图8为一种电子设备的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本申请提供一种分布式短序列号生成方法,涉及计算机领域及金融领域。如图1所示,该分布式短序列号生成方法包括:
步骤S101,根据节点总数将预设的序列号重复周期划分为多个时间区间,按时间顺序为所述多个时间区间进行十进制编号得到各时间区间的区间ID。
具体地,假设节点总数为32,各节点的节点ID依次为0~31,序列号重复周期为24小时,序列号生成频率为每1个/ms,且在每个时间区间内针对同一节点能且仅能生成一个序列号。在此基础上,为了保证在同一时间区间内为每个节点生成一个序列号,每个时间区间则需要生成至少32个序列号,因此时间区间长度应等于或大于32ms,本例中以时间区间长度等于32ms为例,则每个重复周期24小时可划分为2700000个长度为32ms的时间区间。
按照时间的先后顺序,为划分出的各时间区间进行十进制编号得到各时间区间的区间ID依次为0~2699999。
步骤S102,在每个时间区间内分别为各节点生成一个序列号。
由上述内容可知,当时间区间长度为32ms时,每个节点在每个时间区间内能且仅能生成一个序列号,为了保证在同一时间区间内生成的各节点的序列号不重复,本申请给出一种序列号的生成规则在当前时间区间内分别为各节点生成一个序列号,具体为,按照预设的序列号生成函数:
序列号=当前时间区间的区间ID×时间区间长度+节点ID
其中,时间区间长度大于或等于节点总数(单位:ms),节点ID为各节点对应的十进制编号。
例如,假设当前时间区间的区间ID为1,那么在1号时间区间内为节点ID为13的节点生成的序列号为:1×32+13=00000045,为节点ID为20的节点生成的序列号为:1×32+20=00000052。
根据序列号生成函数可知,序列号与时间区间的区间ID和节点ID均相关,因此,由于各节点的节点ID不同,在同一时间区间内为各节点生成的序列号各不相同。同时,由于各时间区间的区间ID也不相同,因此在不同时间区间内为同一节点生成的序列号也各不相同。实际上,同一个序列号重复周期内生成的全部序列号均不相同,因此,依照上述序列号生成函数生成序列号可避免出现序列号重复的情况。
本申请的分布式短序列号生成方法得到的序列号的长度仅包含8位数,取消了现有的雪花算法生成的序列号的顺序位,可应用于序列号位数不足的情况。
步骤S102中,无需接收节点发送的序列号请求后再生成序列号,而是在每个时间区间内都为各节点生成序列号。
当没有接收到节点的序列号请求时,已经生成的序列号会被存储至各节点对应的存储空间内,当接收到节点的序列号请求时,即可将该节点对应的存储空间内存储的序列号(即可用序列号)下发至该节点,可节省序列号生成时间。
步骤S103,接收节点发送的序列号请求,并比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小。
通常,节点发送的一个序列号请求中可以请求多个序列号,依照本申请的方法,由于可能在接收到节点的序列号请求之前已经为该节点生成了多个序列号,因此步骤S103比较了序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小,以判断存储的该节点的序列号是否满足节点的序列号请求。
步骤S104,按照比较结果及序列号发送策略向对应节点发送序列号。
在一实施例中,所述按照比较结果及序列号发送策略向对应节点发送序列号具体包括:
当所述序列号请求中的序列号数目小于或等于已经生成的对应节点的序列号数目时,按照所述序列号请求向所述节点发送序列号。
该本实施例中,当所述序列号请求中的序列号数目小于或等于已经生成的对应节点的序列号数目时,表示存储的该节点的序列号(即可用序列号)可以满足该节点的序列号请求,此时,直接按照所述序列号请求向所述节点发送序列号即可。
例如,假设当前时间区间的区间ID为100,节点13请求下发90个序列号,且在此之前,节点13从未发送过序列号请求,则表明节点13对应的存储空间中存储的序列号(即可用序列号)的数目为101,满足节点13的序列号请求,此时,直接向节点13下发90个序列号即可,其中,下发的90个序列号包含在存储空间中的101个序列号中。至于如何从101个序列号中选择处90个序列号,可以随机选择,或按照序列号的生成顺序选择,本申请对此不作限制。
再例如,假设当前时间区间的区间ID为100,节点13请求下发90个序列号,且在此之前,节点13发送过至少一次序列号请求,共请求下发11个序列号。则此时节点13对应的存储空间中存储的序列号(即可用序列号)的数目为101-11=90个,依然满足节点13的序列号请求,此时,直接向节点13下发90个序列号即可。
在另一实施例中,如图2所示,所述按照比较结果及序列号发送策略向对应节点发送序列号包括:
步骤S105,当所述序列号请求中的序列号数目大于已经生成的对应节点的序列号数目时,暂停接收所述节点的序列号请求;
步骤S106,当已经生成的对应节点的序列号数目等于所述序列号请求中的序列号数目时,按照所述序列号请求向所述节点发送序列号。
当所述序列号请求中的序列号数目大于已经生成的对应节点的序列号数目时,表示存储的该节点的序列号无法满足该节点的序列号请求,更无法满足该节点发送的其他序列号请求,因此暂停接收所述节点的序列号请求。直至等待一段时间后,已经生成的对应节点的序列号数目等于所述序列号请求中的序列号数目时,再按照所述序列号请求向所述节点发送序列号。同时可正常接收该节点发送的序列号请求。
例如,假设当前时间区间的区间ID为100,节点13请求下发90个序列号,且在此之前,节点13发送过至少一次序列号请求,共请求下发21个序列号。则此时节点13对应的存储空间中存储的序列号(即可用序列号)的数目为101-21=80个,无法满足节点13的序列号请求。此时,暂停接收节点13的其他序列号请求,并等待进入下一个时间区间。由于每个时间区间都会为节点13生成一个序列号,因此,当等待进入区间ID为110的时间区间时,已经生成节点13的序列号数目为80+10=90个,恰好可以满足节点13的序列号请求。此时,直接向节点13下发90个序列号即可。
可以理解的是,每一次向节点下发序列号之后,都需要更新该节点对应的存储空间中存储的序列号(即可用序列号)以及已经生成的序列号的数目,具体可以为:将下发至节点的序列号从对应的存储空间中删除,同时将已经生成的序列号的数目更新为存储空间中存储的序列号(即可用序列号)的数目。
本实施例中,当已经生成的序列号无法满足节点的序列号请求时,需等待至进入之后的时间区间,直到已经生成的序列号的数目达到序列号请求中的序列号数目。这种方式保证了不会提前使用在未来的时间区间中生成的序列号。
在一实施例中,如图3所示,所述分布式短序列号生成方法还包括:
步骤S301,当所述节点在当前序列号重复周期内重启时,确定所述节点的重启时刻所在的时间区间。
具体地,假设节点13在12:00重启,确定12:00所在的时间区间的区间ID为1349999。
步骤S302,删除所述重启时刻所在的时间区间以及所述重启时刻所在的时间区间之前的时间区间内生成的全部序列号,并更新已经生成的对应节点的序列号数目。
具体地,将区间ID为0~1349999的时间区间内为节点13生成的序列号删除。可以理解的是,由于序列号被下发至节点后已被删除,因此步骤S302中删除的序列号实际为在区间ID为0~1349999的时间区间内生成且未下发至节点13的序列号,也即节点13对应的存储空间中存储的全部序列号。
上述步骤S301和步骤S302在节点重启时即刻执行。
本实施例中,当节点重启后,清空节点对应的存储空间中的序列号,保证了节点重启后不会使用节点重启前的序列号。
在一实施例中,如图4所示,在步骤S103,比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小之前,还包括:
步骤S401,确定所述节点发送所述序列号请求的请求时间戳,以及所述节点发送的前一序列号请求的请求时间戳。
具体地,节点发送序列号请求的请求时间戳可通过预设的请求时间戳确定函数确定:
请求时间戳=节点发送序列号请求的请求时刻所在的时间区间的区间ID×时间区间长度。
例如,假设时间区间长度为32ms,节点13在当前重复周期开始的第10ms发送了一个序列号请求,节点发送序列号请求的请求时刻所在的时间区间的区间ID为0,则请求时间戳即为0ms;当节点13在当前重复周期开始的第40ms发送了一个序列号请求,节点发送序列号请求的请求时刻所在的时间区间的区间ID为1,则请求时间戳即为32ms;
同理,节点发送的前一序列号请求的请求时间戳可通过预设的请求时间戳确定函数确定:
请求时间戳=节点发送前一序列号请求的请求时刻所在的时间区间的区间ID×时间区间长度。
需要说明的是,本实施例中的请求时间戳与现有的时间概念不同。举例来说,假设节点13在当前重复周期开始的第40ms发送了一个序列号请求,随后又在第50ms发送了一个序列号请求。按照上述请求时间戳确定函数确定第40ms发送的序列号请求的请求时间戳为32ms,第50ms发送的序列号请求的请求时间戳也为32ms。也即,在同一时间区间内的任一时刻发送的序列号请求的请求时间戳是一样的,都是该时间区间的第一秒,如在区间ID为0的时间区间内发送的请求时间戳均为0ms,在区间ID为1的时间区间内发送的请求时间戳均为32ms,在区间ID为2的时间区间内发送的请求时间戳均为64ms。
步骤S402,判断所述序列号请求的请求时间戳是否晚于所述节点发送的前一序列号请求的请求时间戳;若是,则执行步骤S403,若否,则执行步骤S404。
步骤S403,比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小。若当前序列号请求的请求时间戳晚于前一序列号请求的请求时间戳,则当前的序列号请求有效。
步骤S404,拒绝接收所述序列号请求。若当前序列号请求的请求时间戳早于或等于前一序列号请求的请求时间戳,则当前的序列号请求无效。
本实施例用于应对同一节点频繁发出序列号请求时的情况。
本申请的分布式短序列号生成方法可用尽节点启动之后至当前时间生成的所有序列号,在交易低谷时储蓄了多余的序列号,可有效应对交易高峰时突如其来的高并发现象。在节省序列号位数的同时,改善了序列号的生成性能。
基于同一发明构思,本申请实施例还提供了一种分布式短序列号生成装置,可以用于实现上述实施例所描述的方法,如下面的实施例所述。由于分布式短序列号生成装置解决问题的原理与分布式短序列号生成方法相似,因此分布式短序列号生成装置的实施可以参见分布式短序列号生成方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的系统较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本申请还提供一种分布式短序列号生成装置,用于实现本申请提供的分布式短序列号生成方法,如图5所示,该分布式短序列号生成装置5包括:
时间区间确定模块501,用于根据节点总数将预设的序列号重复周期划分为多个时间区间,按时间顺序为所述多个时间区间进行十进制编号得到各时间区间的区间ID;
序列号生成模块502,用于在每个时间区间内分别为各节点生成一个序列号;
序列号比较模块503,用于接收节点发送的序列号请求,并比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小;
序列号发送模块504,用于按照比较结果及序列号发送策略向对应节点发送序列号。
其中,所述序列号生成模块502具体用于:
根据预设的序列号生成函数在当前时间区间内分别为各节点生成一个序列号;
所述序列号生成函数为:
序列号=当前时间区间的区间ID×时间区间长度+节点ID
其中,时间区间长度等于节点总数,节点ID为各节点对应的十进制编号。
在一实施例中,所述序列号发送模块503具体用于:
当所述序列号请求中的序列号数目小于或等于已经生成的对应节点的序列号数目时,按照所述序列号请求向所述节点发送序列号;以及
当所述序列号请求中的序列号数目大于已经生成的对应节点的序列号数目时,暂停接收所述节点的序列号请求,并实时判断已经生成的对应节点的序列号数目是否等于所述序列号请求中的序列号数目;当已经生成的对应节点的序列号数目是否等于所述序列号请求中的序列号数目时,按照所述序列号请求向所述节点发送序列号。
在一实施例中,如图6所示,所述分布式短序列号生成装置5还包括:
重启时间区间确定模块505,用于当所述节点在当前序列号重复周期内重启时,确定所述节点的重启时刻所在的时间区间;
序列号更新模块506,用于删除所述重启时刻所在的时间区间以及所述重启时刻所在的时间区间之前的时间区间内生成的全部序列号,并更新已经生成的对应节点的序列号数目。
在一实施例中,如图7所示,所述分布式短序列号生成装置5还包括:
时间戳确定模块507,用于确定所述节点发送所述序列号请求的请求时间戳,以及所述节点发送的前一序列号请求的请求时间戳;
有效性判断模块508,用于判断所述序列号请求的请求时间戳是否晚于所述节点发送的前一序列号请求的请求时间戳;若是,则比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小;若否,则拒绝接收所述序列号请求,例如,向对应的节点反馈“操作频繁”等信息。
在一实施例中,如图7所示,所述时间戳确定模块507具体用于:
确定所述节点发送所述序列号请求的时刻所在的时间区间;
将序列号请求的时刻所在的时间区间代入预设的请求时间戳确定函数:
请求时间戳=时间区间的区间ID×时间区间长度;以及
确定节点发送前一序列号请求的请求时刻所在的时间区间;
将所述前一序列号请求向所述节点发送序列号的时刻所在的时间区间代入预设的请求时间戳确定函数:
请求时间戳=时间区间的区间ID×时间区间长度。
本申请的分布式短序列号生成装置在雪花算法的基础上用尽节点启动之后至当前时间生成的所有序列号,在交易低谷时储蓄了多余的序列号,可有效应对交易高峰时突如其来的高并发现象。在节省序列号位数的同时,改善了序列号的生成性能。
本发明还提供一种包括上述实施例中的分布式短序列号生成装置的电子设备,参见图8,所述电子设备800具体包括:
中央处理器(processor)810、存储器(memory)820、通信模块(Communications)830、输入单元840、输出单元850以及电源860。
其中,所述存储器(memory)820、通信模块(Communications)830、输入单元840、输出单元850以及电源860分别与所述中央处理器(processor)810相连接。所述存储器820中存储有计算机程序,所述中央处理器810可调用所述计算机程序,所述中央处理器810执行所述计算机程序时实现上述实施例中的分布式短序列号生成方法中的全部步骤。
本申请的实施例还提供一种计算机存储介质,用于存储计算机程序,所述计算机程序可被处理器执行。所述计算机程序被处理器执行时实现本发明所提供的任一分布式短序列号生成方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书实施例的至少一个实施例或示例中。
在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。以上所述仅为本说明书实施例的实施例而已,并不用于限制本说明书实施例。对于本领域技术人员来说,本说明书实施例可以有各种更改和变化。凡在本说明书实施例的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书实施例的权利要求范围之内。
Claims (16)
1.一种分布式短序列号生成方法,其特征在于,包括:
根据节点总数将预设的序列号重复周期划分为多个时间区间,按时间顺序为所述多个时间区间进行十进制编号得到各时间区间的区间ID;
在每个时间区间内分别为各节点生成一个序列号;
接收节点发送的序列号请求,并比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小;
按照比较结果及序列号发送策略向对应节点发送序列号。
2.根据权利要求1所述的分布式短序列号生成方法,其特征在于,所述按照比较结果及序列号发送策略向对应节点发送序列号,包括:
当所述序列号请求中的序列号数目小于或等于已经生成的对应节点的序列号数目时,按照所述序列号请求向所述节点发送序列号;
当所述序列号请求中的序列号数目大于已经生成的对应节点的序列号数目时,暂停接收所述节点的序列号请求,直至已经生成的对应节点的序列号数目等于所述序列号请求中的序列号数目时,按照所述序列号请求向所述节点发送序列号。
3.根据权利要求2所述的分布式短序列号生成方法,其特征在于,所述在每个时间区间内分别为各节点生成一个序列号,包括:
根据预设的序列号生成函数在当前时间区间内分别为各节点生成一个序列号;
所述序列号生成函数为:
序列号=当前时间区间的区间ID×时间区间长度+节点ID
其中,时间区间长度等于节点总数,节点ID为各节点对应的十进制编号。
4.根据权利要求3所述的分布式短序列号生成方法,其特征在于,还包括:
当所述节点在当前序列号重复周期内重启时,确定所述节点的重启时刻所在的时间区间;
删除所述重启时刻所在的时间区间以及所述重启时刻所在的时间区间之前的时间区间内生成的全部序列号,并更新已经生成的对应节点的序列号数目。
5.根据权利要求1至4中任一项所述的分布式短序列号生成方法,其特征在于,所述比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小之前,还包括:
确定所述节点发送所述序列号请求的请求时间戳,以及所述节点发送的前一序列号请求的请求时间戳;
判断所述序列号请求的请求时间戳是否晚于所述节点发送的前一序列号请求的请求时间戳;
若是,则比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小;若否,则拒绝接收所述序列号请求。
6.根据权利要求5所述的分布式短序列号生成方法,其特征在于,所述确定所述节点发送所述序列号请求的请求时间戳,包括:
确定所述节点发送所述序列号请求的时刻所在的时间区间;
将所述时间区间代入预设的请求时间戳确定函数,
请求时间戳=时间区间的区间ID×时间区间长度。
7.根据权利要求5所述的分布式短序列号生成方法,其特征在于,所述节点发送的前一序列号请求的请求时间戳,包括:
确定节点发送前一序列号请求的请求时刻所在的时间区间;
将所述时间区间代入预设的请求时间戳确定函数,
请求时间戳=时间区间的区间ID×时间区间长度。
8.一种分布式短序列号生成装置,其特征在于,包括:
时间区间确定模块,用于根据节点总数将预设的序列号重复周期划分为多个时间区间,按时间顺序为所述多个时间区间进行十进制编号得到各时间区间的区间ID;
序列号生成模块,用于在每个时间区间内分别为各节点生成一个序列号;
序列号比较模块,用于接收节点发送的序列号请求,并比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小;
序列号发送模块,按照比较结果及序列号发送策略向对应节点发送序列号。
9.根据权利要求8所述的分布式短序列号生成装置,其特征在于,所述序列号发送模块具体用于:
用于当所述序列号请求中的序列号数目小于或等于已经生成的对应节点的序列号数目时,按照所述序列号请求向所述节点发送序列号;
当所述序列号请求中的序列号数目大于已经生成的对应节点的序列号数目时,暂停接收所述节点的序列号请求,并实时判断已经生成的对应节点的序列号数目是否等于所述序列号请求中的序列号数目;当已经生成的对应节点的序列号数目是否等于所述序列号请求中的序列号数目时,按照所述序列号请求向所述节点发送序列号。
10.根据权利要求9所述的分布式短序列号生成装置,其特征在于,所述序列号生成模块具体用于:
根据预设的序列号生成函数在当前时间区间内分别为各节点生成一个序列号;
所述序列号生成函数为:
序列号=当前时间区间的区间ID×时间区间长度+节点ID
其中,时间区间长度等于节点总数,节点ID为各节点对应的十进制编号。
11.根据权利要求10所述的分布式短序列号生成装置,其特征在于,还包括:
重启时间区间确定模块,用于当所述节点在当前序列号重复周期内重启时,确定所述节点的重启时刻所在的时间区间;
序列号更新模块,用于删除所述重启时刻所在的时间区间以及所述重启时刻所在的时间区间之前的时间区间内生成的全部序列号,并更新已经生成的对应节点的序列号数目。
12.根据权利要求8至11任一项所述的分布式短序列号生成装置,其特征在于,还包括:
时间确定模块,用于确定所述节点发送所述序列号请求的请求时间戳,以及所述节点发送的前一序列号请求的请求时间戳;
有效性判断模块,用于判断所述序列号请求的请求时间戳是否晚于所述节点发送的前一序列号请求的请求时间戳;若是,则比较所述序列号请求中的序列号数目与已经生成的对应节点的序列号数目的大小;若否,则拒绝接收所述序列号请求。
13.根据权利要求12所述的分布式短序列号生成装置,其特征在于,所述时间确定模块具体用于:
确定所述节点发送所述序列号请求的时刻所在的时间区间;
将所述时间区间代入预设的请求时间戳确定函数,
请求时间戳=时间区间的区间ID×时间区间长度。
14.根据权利要求12所述的分布式短序列号生成装置,其特征在于,所述时间确定模块包括请求时间戳确定单元,用于:
确定节点发送前一序列号请求的请求时刻所在的时间区间;
将所述时间区间代入预设的请求时间戳确定函数,
请求时间戳=时间区间的区间ID×时间区间长度。
15.一种电子设备,其特征在于,包括:
中央处理器、存储器、通信模块,所述存储器中存储有计算机程序,所述中央处理器可调用所述计算机程序,所述中央处理器执行所述计算机程序时实现如权利要求1至7中任一项所述的分布式短序列号生成方法。
16.一种计算机存储介质,用于存储计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的分布式短序列号生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110451781.6A CN113515557A (zh) | 2021-04-26 | 2021-04-26 | 分布式短序列号生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110451781.6A CN113515557A (zh) | 2021-04-26 | 2021-04-26 | 分布式短序列号生成方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113515557A true CN113515557A (zh) | 2021-10-19 |
Family
ID=78063442
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110451781.6A Pending CN113515557A (zh) | 2021-04-26 | 2021-04-26 | 分布式短序列号生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113515557A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130159769A1 (en) * | 2011-12-19 | 2013-06-20 | Microsoft Corporation | Rectifying corrupt sequence values in distributed systems |
CN108959386A (zh) * | 2018-05-31 | 2018-12-07 | 深圳壹账通智能科技有限公司 | 分布式全局唯一id生成方法、装置、设备和存储介质 |
CN109491772A (zh) * | 2018-09-28 | 2019-03-19 | 深圳财富农场互联网金融服务有限公司 | 业务序号生成方法、装置、计算机设备和存储介质 |
CN109639775A (zh) * | 2018-11-27 | 2019-04-16 | 湖南蚁为软件有限公司 | 全局单调递增id生成方法、装置、系统及设备 |
CN110765732A (zh) * | 2019-10-09 | 2020-02-07 | 中国联合网络通信集团有限公司 | 序列号生成方法、装置及服务器 |
CN112035547A (zh) * | 2020-08-31 | 2020-12-04 | 深圳前海微众银行股份有限公司 | 序列号生成方法、装置、电子设备以及存储介质 |
-
2021
- 2021-04-26 CN CN202110451781.6A patent/CN113515557A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130159769A1 (en) * | 2011-12-19 | 2013-06-20 | Microsoft Corporation | Rectifying corrupt sequence values in distributed systems |
CN108959386A (zh) * | 2018-05-31 | 2018-12-07 | 深圳壹账通智能科技有限公司 | 分布式全局唯一id生成方法、装置、设备和存储介质 |
CN109491772A (zh) * | 2018-09-28 | 2019-03-19 | 深圳财富农场互联网金融服务有限公司 | 业务序号生成方法、装置、计算机设备和存储介质 |
CN109639775A (zh) * | 2018-11-27 | 2019-04-16 | 湖南蚁为软件有限公司 | 全局单调递增id生成方法、装置、系统及设备 |
CN110765732A (zh) * | 2019-10-09 | 2020-02-07 | 中国联合网络通信集团有限公司 | 序列号生成方法、装置及服务器 |
CN112035547A (zh) * | 2020-08-31 | 2020-12-04 | 深圳前海微众银行股份有限公司 | 序列号生成方法、装置、电子设备以及存储介质 |
Non-Patent Citations (1)
Title |
---|
李永;陆伟;: "面向分布式交互应用的事件完全序问题研究", 计算机技术与发展, no. 04, 20 December 2018 (2018-12-20) * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101188566B (zh) | 一种集群环境下数据缓存同步的方法及系统 | |
CN113127564B (zh) | 一种参数同步方法和装置 | |
CN113885780A (zh) | 数据同步方法、装置、电子设备、系统和存储介质 | |
CN113360577A (zh) | 一种mpp数据库数据处理方法、装置、设备及存储介质 | |
CN115599747A (zh) | 一种分布式存储系统的元数据同步方法、系统及设备 | |
CN111291062A (zh) | 数据同步写入方法、装置、计算机设备及存储介质 | |
CN114500416B (zh) | 用于最多一次消息投递的投递方法和投递系统 | |
CN116414527A (zh) | 一种分布式事务协调器大幅提高性能方法及系统 | |
CN114130035A (zh) | 一种用户匹配方法、装置、设备及存储介质 | |
CN113703946A (zh) | 应用恢复方法及其装置、电子设备、计算机可读存储介质 | |
CN112988800A (zh) | 一种基于分布式环境的数据处理方法和装置 | |
CN113515557A (zh) | 分布式短序列号生成方法及装置 | |
CN112000850A (zh) | 进行数据处理的方法、装置、系统及设备 | |
CN113660353B (zh) | 基于蓝牙Mesh的Provisioner地址管理的方法、装置、设备和介质 | |
CN113302593A (zh) | 任务处理方法、装置、系统、电子设备及存储介质 | |
CN116192776A (zh) | 可自修复的报文保序方法、装置、终端及存储介质 | |
CN113497737A (zh) | 系统拓扑结构维护方法、装置、计算机设备和存储介质 | |
CN112988881A (zh) | 一种数据同步方法、装置及计算机可读存储介质 | |
CN111639089B (zh) | 事务处理方法、装置、电子设备和计算机可读存储介质 | |
CN116401317B (zh) | 一种缓存数据同步方法、装置、电子设备及介质 | |
CN113590591B (zh) | 事件状态的自动更新方法、装置、设备及存储介质 | |
CN113032131B (zh) | 基于Redis的分布式定时调度系统和方法 | |
CN116701049B (zh) | 一种有归属卷配置方法、装置、设备及存储介质 | |
CN118245503B (zh) | 存储过程的执行方法、装置、电子设备及可读存储介质 | |
CN118069731A (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 |