CN113765820A - 基于令牌桶的限流方法、装置、计算设备及介质 - Google Patents
基于令牌桶的限流方法、装置、计算设备及介质 Download PDFInfo
- Publication number
- CN113765820A CN113765820A CN202011199853.4A CN202011199853A CN113765820A CN 113765820 A CN113765820 A CN 113765820A CN 202011199853 A CN202011199853 A CN 202011199853A CN 113765820 A CN113765820 A CN 113765820A
- Authority
- CN
- China
- Prior art keywords
- token
- tokens
- determining
- time
- token bucket
- 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 57
- 238000004519 manufacturing process Methods 0.000 claims abstract description 81
- 238000010586 diagram Methods 0.000 description 14
- 238000004590 computer program Methods 0.000 description 11
- 230000015654 memory Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 6
- 238000010276 construction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004806 packaging method and process Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 108010001267 Protein Subunits Proteins 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/215—Flow control; Congestion control using token-bucket
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/24—Traffic characterised by specific attributes, e.g. priority or QoS
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本公开提供了一种基于令牌桶的限流方法,包括:接收待处理请求;获取令牌桶中令牌的数量;在令牌桶中令牌的数量小于待处理请求所需的令牌数量的情况下,根据上一次生产令牌的时间和当前时间,确定目标令牌数;为令牌桶添加目标令牌数的令牌;以及根据执行添加操作后的令牌桶中的令牌的数量,确定是否允许待处理请求通过。本公开还提供了一种基于令牌桶的限流装置、计算设备和介质。
Description
技术领域
本公开涉及计算机技术领域,更具体地,涉及一种基于令牌桶的限流方法、装置、计算设备及介质。
背景技术
相关技术所使用的基于令牌桶的限流方案至少需要两个角色,一个是令牌生产节点,一个是限流器本身。其中,令牌生产节点用于执行定时任务,为令牌桶添加令牌。这种方案由于需要设置令牌生产节点,因此使得分布式系统中的节点较多,无形中增加系统出问题的风险。
发明内容
有鉴于此,本公开提供了一种基于令牌桶的限流方法、装置、计算设备及介质。
本公开的一个方面提供了一种基于令牌桶的限流方法,包括:接收待处理请求;获取令牌桶中令牌的数量;在所述令牌桶中令牌的数量小于所述待处理请求所需的令牌数量的情况下,根据上一次生产令牌的时间和当前时间,确定目标令牌数;为所述令牌桶添加所述目标令牌数的令牌;以及根据执行添加操作后的令牌桶中的令牌的数量,确定是否允许所述待处理请求通过。
根据本公开的实施例,所述根据上一次生产令牌的时间和当前时间,确定目标令牌数,包括:确定所述上一次生产令牌的时间和当前时间之间的时间差;根据所述时间差,确定令牌生产次数;以及根据所述令牌生产次数,确定所述目标令牌数。
根据本公开的实施例,所述根据所述令牌生产次数,确定所述目标令牌数,包括:获取单次生产令牌数;以及根据所述令牌生产次数和所述单次生产令牌数,确定所述目标令牌数。
根据本公开的实施例,所述根据所述令牌生产次数,确定所述目标令牌数,包括:在所述令牌生产次数小于1的情况下:获取累计赊欠令牌数和单次生产令牌数;在满足赊欠条件的情况下,确定所述待处理请求所需的令牌数作为所述目标令牌数,并确定所述累计赊欠令牌数与所述待处理请求所需的令牌数之和作为新的累计赊欠令牌数;以及在所述令牌生产次数大于或等于1的情况下:根据所述令牌生产次数和单次生产令牌数量,确定可生产令牌数;获取累计赊欠令牌数;以及在所述可生产令牌数大于所述累计赊欠令牌数的情况下,确定所述可生产令牌数与所述累计赊欠令牌数的差值作为所述目标令牌数,并将所述累计赊欠令牌数设置为0。
根据本公开的实施例,所述赊欠条件包括:所述累计赊欠令牌数与所述待处理请求所需的令牌数之和小于所述单次生产令牌数;以及/或者上一次赊欠令牌时间与赊欠时间间隔之和小于上一次生产令牌的时间。
根据本公开的实施例,所述根据执行添加操作后的令牌桶中的令牌的数量,确定是否允许所述待处理请求通过,包括:在所述令牌桶中令牌的数量大于或等于所述待处理请求所需的令牌数量的情况下,从令牌桶扣减所述待处理请求所需的令牌数,以允许所述待处理请求通过;以及在所述令牌桶中令牌的数量小于所述待处理请求所需的令牌数量的情况下,拒绝所述待处理请求通过。
本公开的另一个方面提供了一种基于令牌桶的限流装置,包括:接收模块,用于接收待处理请求;获取模块,用于获取令牌桶中令牌的数量;第一确定模块,用于在所述令牌桶中令牌的数量小于所述待处理请求所需的令牌数量的情况下,根据上一次生产令牌的时间和当前时间,确定目标令牌数;添加模块,用于为所述令牌桶添加所述目标令牌数的令牌;以及通过模块,用于根据执行添加操作后的令牌桶中的令牌的数量,确定是否允许所述待处理请求通过。
根据本公开的实施例,所述第一确定模块包括:第二确定子模块,用于确定所述上一次生产令牌的时间和当前时间之间的时间差;第三确定子模块,用于根据所述时间差,确定令牌生产次数;以及第四确定子模块,用于根据所述令牌生产次数,确定所述目标令牌数。
本公开的另一个方面提供了一种计算设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上所述的方法。
本公开的另一方面提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
本公开的另一方面提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。
根据本公开实施例的基于令牌桶的限流方法,在令牌桶中令牌不足的情况下,才会执行令牌桶的添加操作,不需要额外设置定时任务用于定时添加令牌。因此,该方法可以由限流器本身执行,不需要额外设置令牌生产节点,从而可以减少系统的节点数量,提高可靠性。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的可以应用基于令牌桶的限流方法的示例性应用场景;
图2示意性示出了根据本公开的实施例的基于令牌桶的限流方法的流程图;
图3示意性示出了根据本公开的实施例的确定目标令牌数的流程图;
图4示意性示出了根据本公开另一实施例的确定目标令牌数的流程图;
图5示意性示出了根据本公开的实施例的基于令牌桶的限流方法的示意图;
图6示意性示出了根据本公开另一实施例的基于令牌桶的限流方法的示意图;
图7示意性示出了根据本公开的实施例的基于令牌桶的限流装置的框图;以及
图8示意性示出了根据本公开实施例的适于本公开实施例描述的方法的计算机系统的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
本公开的实施例提供了一种基于令牌桶的限流方法方法以及能够应用该方法的装置。该方法包括获取令牌桶中令牌的数量;在令牌桶中令牌的数量小于待处理请求所需的令牌数量的情况下,根据上一次生产令牌的时间和当前时间,确定目标令牌数;为令牌桶添加所述目标令牌数的令牌;以及根据执行添加操作后的令牌桶中的令牌的数量,确定是否允许所述待处理请求通过。
图1示意性示出了根据本公开实施例的可以应用基于令牌桶的限流方法的示例性应用场景100。需要注意的是,图1所示仅为可以应用本公开实施例的应用场景的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,根据该实施例的应用场景100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
需要说明的是,本公开实施例所提供的基于令牌桶的限流方法方法一般可以由服务器105执行。相应地,本公开实施例所提供的基于令牌桶的限流装置一般可以设置于服务器105中。本公开实施例所提供的基于令牌桶的限流方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的基于令牌桶的限流装置也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
图2示意性示出了根据本公开的实施例的基于令牌桶的限流方法的流程图。
如图2所示,该方法包括在操作S210,接收待处理请求。
然后,在操作S220,获取令牌桶中令牌的数量。
在操作S230,在令牌桶中令牌的数量小于待处理请求所需的令牌数量的情况下,根据上一次生产令牌的时间和当前时间,确定目标令牌数。
根据本公开的实施例,不同数据量的待处理请求,所需的令牌数量也不同。数据量越大的待处理请求,则所需的令牌数量越多。
根据本公开的实施例,操作S230例如可以包括确定上一次生产令牌的时间和当前时间之间的时间差,根据时间差,确定令牌生产次数,然后根据令牌生产次数,确定目标令牌数。
根据本公开的实施例,可以将时间差除以添加令牌间隔时长来计算得到令牌生产次数。其中,添加令牌间隔时长可以预先根据需要进行设置,本公开对添加令牌间隔时长的值不作具体限定。
图3示意性示出了根据本公开的实施例的确定目标令牌数的流程图。
如图3所示,可以通过以下操作S331~S332来确定目标令牌数。
其中,在操作S331,获取单次生产令牌数。
在操作S332,根据令牌生产次数和单次生产令牌数,确定目标令牌数。
根据本公开的实施例,可以计算令牌生产次数和单次生产令牌数的乘积,得到可补充令牌数,将可补充令牌数作为目标令牌数。其中,单次生产令牌数可以预先根据需要进行设置,本公开对添加单次生产令牌数的值不作具体限定。
图4示意性示出了根据本公开另一实施例的确定目标令牌数的流程图。
如图4所示,还可以通过以下操作S431~S437来确定目标令牌数。
其中,在操作S431,判断令牌生产次数是否小于1,在令牌生产次数小于1的情况下,执行操作S432~S433,在令牌生产次数大于或等于1的情况下,执行操作S434~S436。
在操作S432,获取累计赊欠令牌数和单次生产令牌数。
在操作S433,在满足赊欠条件的情况下,确定待处理请求所需的令牌数作为目标令牌数,并确定累计赊欠令牌数与待处理请求所需的令牌数之和作为新的累计赊欠令牌数。
根据本公开的实施例,赊欠条件用于防止发生超赊欠的情况,保证下次生产令牌时可以正常还债。赊欠条件例如可以包括:累计赊欠令牌数与待处理请求所需的令牌数之和小于单次生产令牌数,以及上一次赊欠令牌时间与赊欠时间间隔之和小于上一次生产令牌的时间。
在操作S434,根据令牌生产次数和单次生产令牌数量,确定可生产令牌数。
在操作S435,获取累计赊欠令牌数。
在操作S436,在可生产令牌数大于累计赊欠令牌数的情况下,确定可生产令牌数与累计赊欠令牌数的差值作为目标令牌数,并将累计赊欠令牌数设置为0。
需要说明的是,在实际应用中,图3和图4所示的确定目标令牌数方法可以选择其一使用,也可以同时使用,即对于一部分请求使用图3所示的方法确定目标令牌数,对于另一部分请求使用图4所示的方法确定目标令牌数。例如,可以对优先级较低的请求使用图3所示的方法确定目标令牌数,对优先级较高的请求使用图4所示的方法确定目标令牌数。通过对优先级较高的请求,以赊欠的形式提前分配令牌,可以保证该优先级较高的请求可以被及时处理。
在操作S240,为令牌桶添加目标令牌数的令牌。
在操作S250,根据执行添加操作后的令牌桶中的令牌的数量,确定是否允许待处理请求通过。
根据本公开的实施例,在令牌桶添加令牌之后,若令牌桶中令牌的数量大于或等于待处理请求所需的令牌数量,则可以从令牌桶扣减待处理请求所需的令牌数,以允许待处理请求通过。若令牌桶中令牌的数量仍然小于待处理请求所需的令牌数量,则可以拒绝待处理请求通过。
根据本公开实施例的基于令牌桶的限流方法,在令牌桶中令牌不足的情况下,才会执行令牌桶的添加操作,不需要额外设置定时任务用于定时添加令牌。因此,该方法可以由限流器本身执行,不需要额外设置令牌生产节点,从而可以减少系统的节点数量,提高可靠性。
下面参考图5~图6,结合具体实施例对图2~图4所示的方法做进一步说明。本领域技术人员可以理解,以下示例实施例仅用于理解本公开,本公开并不局限于此。
根据本公开的实施例,可以以Redis作为分布式介质,基于Lua脚本语言编写分布式限流器程序(简称限流器),用于执行本公开实施例的基于令牌桶的限流方法。由于Redis具有单线程的特性,因此基于Redis和Lua脚本编写限流器可以保证限流操作的原子性,可以避免因各操作执行不同步而产生错误。
根据本公开的实施例,可以采用Redis中的Hash数据结构存储定义的令牌桶对象。示例性地,本实施例中,令牌桶对象可以具有以下关键变量:
bucketSize,表示令牌桶容量。
nextAddTime,表示上一次生产令牌的时间。
tokenSize,表示当前令牌桶中剩余令牌数量。
addIntervalTime,表示添加令牌间隔时长。
singleAddSize,表示单次生产令牌的数量。
creditTokenSize,表示赊欠令牌数量,初始值为0。
nextCreditTime,表示上一次可以赊欠令牌时间。根据本公开的实施例,如果nextCreditTime>nextAddTime则不可以进行赊欠,避免无限赊欠的情况出现。
creditTintervalTime,表示赊欠令牌时间间隔。需要说明的是,赊欠令牌间隔时间不能超过添加令牌间隔时长。
singlerCreditSize,表示单次赊欠令牌的数量。需要说明的是,singlerCreditSize=singleAddSize/(addIntervalTime/creditTintervalTime)。
creditCountSize,表示累计赊欠的令牌。
图5示意性示出了根据本公开的实施例的基于令牌桶的限流方法的示意图。
如图5所示,该方法可以包括操作S501~S612。
具体地,在操作S501,请求进入限流器,向限流器申请令牌。
在操作S502,获取令牌桶中剩余令牌数量。
在操作S503,判断剩余令牌数量是否充足。如果剩余令牌数量满足请求所需的令牌数,则表示剩余令牌充足,执行操作S511。如果剩余令牌数量不满足请求所需的令牌数,则表示剩余令牌不充足,执行操作S504。
在操作S504,获取“上一次生产令牌的时间”。需要说明的是,此时“上一次生产令牌的时间”的值为距离当前时间最近的一次生产令牌的时间。
在操作S505,用“当前时间”减去“上一次生产令牌的时间”,计算得到“时间差”。用“时间差”除以“添加令牌间隔时长”计算得出商,即为“可生产令牌次数”。如果“可生产令牌次数”<1,则证明还不到生产令牌的时间,可补充令牌数量为0。如果“可生产令牌次数”≥1,则使用“可生产令牌次数”乘以“单次生产令牌数量”计算得出“可补充令牌数量”。
在操作S506,判断可补充令牌数量是否大于0,若小于或等于0,则执行操作S507。若大于0,则执行操作S508。
在操作S507,返回无令牌。
在操作S508,为防止令牌超出令牌桶容量,使用“令牌桶中剩余令牌数量”加上“可补充令牌数量”得出总令牌数。判断“总令牌数”是否超出“令牌桶容量”,如果“总令牌数”超出令牌桶容量,则将“令牌桶中剩余令牌数量”的值设置为“令牌桶容量”,并执行操作S509。如果“总令牌数”未超出令牌桶容量,则在“令牌桶中剩余令牌数量”的基础上增加“可补充令牌数量”个令牌,执行S510。
在操作S509,计算“剩余令牌数量”减去“令牌桶容量”的差以得到补充容量。
在操作S510,补充令牌,更新上一次补充时间的值为当前时间。
在操作S511,从令牌桶中扣减请求所需的令牌,
在操作S512,返回请求所需的令牌。
图6示意性示出了根据本公开另一实施例的基于令牌桶的限流方法的示意图。如图6所示,该方法可以包括操作S601~S618。
具体地,在操作S601,请求进入限流器,向限流器申请令牌。
在操作S602,获取令牌桶中剩余令牌的数量。
在操作S603,判断剩余令牌的数量是否充足。若剩余令牌的数量充足,则执行操作S617。若剩余令牌的数量不充足,则执行操作S604。
在操作S604,获取上一次补充令牌的时间。需要说明的是,此时“上一次生产令牌的时间”的值为距离当前时间最近的一次生产令牌的时间。
在操作S605,根据上一次补充令牌的时间,计算可补充令牌数。计算公式为,可补充令牌数=(当前时间-上一次补充令牌的时间)/添加令牌间隔时长*单次生产令牌数量。
在操作S606,判断可补充令牌数是否大于0,若可补充令牌属大于0,则执行操作S613,否则,执行操作S607。
在操作S607,获取上一次赊欠令牌时间,需要说明的是,此时上一次赊欠令牌时间的值为距离当前时间最近的一次触发赊欠令牌操作的时间。
在操作S608,判断是否满足赊欠条件。若不满足,则执行操作S612。若满足,则执行操作S609~S611。其中,赊欠条件例如可以包括:累计赊欠令牌数与待处理请求所需的令牌数之和小于单次生产令牌数,以及上一次赊欠令牌时间与赊欠时间间隔之和小于上一次生产令牌的时间。
在操作S609,补充赊欠数量的令牌到令牌桶。
在操作S610,累加赊欠令牌。
在操作S611,更新上一次赊欠令牌时间为当前时间,然后跳转执行操作S617。
在操作S612,返回无令牌,以拒绝请求。
在操作S613,计算可补充令牌数与累计赊欠令牌量的差值。
在操作S614,判断差值是否大于0,若差值大于0,则执行S615。若差值小于或等于0,则执行操作S612。
在操作S615,补充差值数量的令牌到令牌桶中,并清空赊欠令牌数,以完成还债。
在操作S616,更新上一次补充令牌时间为当前时间。
在操作S617,减扣请求所需的令牌数。
在操作S618,返回请求分配所需数量的令牌。
如图5和图6所示,本公开的实施例提供了两种解决方案,一种基于普通版本的令牌桶(图5),一个基于可以赊欠的令牌桶(图6)。在实现令牌桶算法的过程中,采用了‘懒加载’的思想,当令牌不足的时候,才会触发令牌桶的添加机制,调用限流器组件执行相应的限流操作,不需要额外设置令牌生产节点,从而可以减少系统的节点数量,提高可靠性。
图7示意性示出了根据本公开的实施例的基于令牌桶的限流装置的框图。
如图7所示,基于令牌桶的限流装置700包括接收模块710、获取模块720、第一确定模块730、添加模块740和通过模块750。
接收模块710,可以用于接收待处理请求。
获取模块720,可以用于获取令牌桶中令牌的数量。
第一确定模块730,可以用于在令牌桶中令牌的数量小于待处理请求所需的令牌数量的情况下,根据上一次生产令牌的时间和当前时间,确定目标令牌数。
添加模块740,可以用于为令牌桶添加目标令牌数的令牌。
通过模块750,可以用于根据执行添加操作后的令牌桶中的令牌的数量,确定是否允许待处理请求通过。
根据本公开的实施例,第一确定模块例如可以包括:第二确定子模块,可以用于确定上一次生产令牌的时间和当前时间之间的时间差。第三确定子模块,可以用于根据时间差,确定令牌生产次数。第四确定子模块,可以用于根据令牌生产次数,确定目标令牌数。
根据本公开实施例的基于令牌桶的限流装置,在令牌桶中令牌不足的情况下,才会执行令牌桶的添加操作,不需要额外设置定时任务用于定时添加令牌。因此,该方法可以由限流装置(例如限流器)本身执行,不需要额外设置令牌生产节点,从而可以减少系统的节点数量,提高可靠性。
根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
例如,接收模块710、获取模块720、第一确定模块730、添加模块740和通过模块750中的任意多个可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,接收模块710、获取模块720、第一确定模块730、添加模块740和通过模块750中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,接收模块710、获取模块720、第一确定模块730、添加模块740和通过模块750中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图8示意性示出了根据本公开实施例的适于实现上文描述的方法的计算机系统的方框图。图8示出的计算机系统仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图8所示,根据本公开实施例的计算机系统800包括处理器801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。处理器801例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器801还可以包括用于缓存用途的板载存储器。处理器801可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 803中,存储有系统800操作所需的各种程序和数据。处理器801、ROM 802以及RAM 803通过总线804彼此相连。处理器801通过执行ROM 802和/或RAM 803中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 802和RAM 803以外的一个或多个存储器中。处理器801也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,系统800还可以包括输入/输出(I/O)接口805,输入/输出(I/O)接口805也连接至总线804。系统800还可以包括连接至I/O接口805的以下部件中的一项或多项:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被处理器801执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 802和/或RAM 803和/或ROM 802和RAM 803以外的一个或多个存储器。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
Claims (10)
1.一种基于令牌桶的限流方法,包括:
接收待处理请求;
获取令牌桶中令牌的数量;
在所述令牌桶中令牌的数量小于所述待处理请求所需的令牌数量的情况下,根据上一次生产令牌的时间和当前时间,确定目标令牌数;
为所述令牌桶添加所述目标令牌数的令牌;以及
根据执行添加操作后的令牌桶中的令牌的数量,确定是否允许所述待处理请求通过。
2.根据权利要求1所述的方法,其中,所述根据上一次生产令牌的时间和当前时间,确定目标令牌数,包括:
确定所述上一次生产令牌的时间和当前时间之间的时间差;
根据所述时间差,确定令牌生产次数;以及
根据所述令牌生产次数,确定所述目标令牌数。
3.根据权利要求2所述的方法,其中,所述根据所述令牌生产次数,确定所述目标令牌数,包括:
获取单次生产令牌数;以及
根据所述令牌生产次数和所述单次生产令牌数,确定所述目标令牌数。
4.根据权利要求2所述的方法,其中,所述根据所述令牌生产次数,确定所述目标令牌数,包括:
在所述令牌生产次数小于1的情况下:
获取累计赊欠令牌数和单次生产令牌数;
在满足赊欠条件的情况下,确定所述待处理请求所需的令牌数作为所述目标令牌数,并确定所述累计赊欠令牌数与所述待处理请求所需的令牌数之和作为新的累计赊欠令牌数;以及
在所述令牌生产次数大于或等于1的情况下:
根据所述令牌生产次数和单次生产令牌数量,确定可生产令牌数;
获取累计赊欠令牌数;以及
在所述可生产令牌数大于所述累计赊欠令牌数的情况下,确定所述可生产令牌数与所述累计赊欠令牌数的差值作为所述目标令牌数,并将所述累计赊欠令牌数设置为0。
5.根据权利要求4所述的方法,其中,所述赊欠条件包括:
所述累计赊欠令牌数与所述待处理请求所需的令牌数之和小于所述单次生产令牌数;以及/或者
上一次赊欠令牌时间与赊欠时间间隔之和小于上一次生产令牌的时间。
6.根据权利要求1所述的方法,其中,所述根据执行添加操作后的令牌桶中的令牌的数量,确定是否允许所述待处理请求通过,包括:
在所述令牌桶中令牌的数量大于或等于所述待处理请求所需的令牌数量的情况下,从令牌桶扣减所述待处理请求所需的令牌数,以允许所述待处理请求通过;以及
在所述令牌桶中令牌的数量小于所述待处理请求所需的令牌数量的情况下,拒绝所述待处理请求通过。
7.一种基于令牌桶的限流装置,包括:
接收模块,用于接收待处理请求;
获取模块,用于获取令牌桶中令牌的数量;
第一确定模块,用于在所述令牌桶中令牌的数量小于所述待处理请求所需的令牌数量的情况下,根据上一次生产令牌的时间和当前时间,确定目标令牌数;
添加模块,用于为所述令牌桶添加所述目标令牌数的令牌;以及
通过模块,用于根据执行添加操作后的令牌桶中的令牌的数量,确定是否允许所述待处理请求通过。
8.根据权利要求7所述的装置,所述第一确定模块包括:
第二确定子模块,用于确定所述上一次生产令牌的时间和当前时间之间的时间差;
第三确定子模块,用于根据所述时间差,确定令牌生产次数;以及
第四确定子模块,用于根据所述令牌生产次数,确定所述目标令牌数。
9.一种计算设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至6中任一项的方法。
10.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器实现权利要求1至6中任一项的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011199853.4A CN113765820A (zh) | 2020-10-30 | 2020-10-30 | 基于令牌桶的限流方法、装置、计算设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011199853.4A CN113765820A (zh) | 2020-10-30 | 2020-10-30 | 基于令牌桶的限流方法、装置、计算设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113765820A true CN113765820A (zh) | 2021-12-07 |
Family
ID=78785936
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011199853.4A Pending CN113765820A (zh) | 2020-10-30 | 2020-10-30 | 基于令牌桶的限流方法、装置、计算设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113765820A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114598658A (zh) * | 2022-03-07 | 2022-06-07 | 浪潮云信息技术股份公司 | 一种流量限制方法及装置 |
CN114745334A (zh) * | 2022-03-31 | 2022-07-12 | 广州易星信息科技有限公司 | 一种分布式系统限流方法及系统 |
CN114860334A (zh) * | 2022-04-24 | 2022-08-05 | 曙光信息产业(北京)有限公司 | 虚拟机启动风暴的处理方法、装置、设备及介质 |
CN114915596A (zh) * | 2022-05-10 | 2022-08-16 | 北京奇艺世纪科技有限公司 | 数据发送方法、装置、设备及存储介质 |
CN115174487A (zh) * | 2022-09-06 | 2022-10-11 | 浙江大华技术股份有限公司 | 一种高并发限流方法、装置以及计算机存储介质 |
CN115378656A (zh) * | 2022-07-26 | 2022-11-22 | 青岛海尔科技有限公司 | 令牌回填方法、存储介质及电子装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107465630A (zh) * | 2017-08-30 | 2017-12-12 | 郑州云海信息技术有限公司 | 一种带宽流量监管方法及系统 |
CN110545246A (zh) * | 2018-05-29 | 2019-12-06 | 北京京东尚科信息技术有限公司 | 一种基于令牌桶的限流方法和装置 |
-
2020
- 2020-10-30 CN CN202011199853.4A patent/CN113765820A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107465630A (zh) * | 2017-08-30 | 2017-12-12 | 郑州云海信息技术有限公司 | 一种带宽流量监管方法及系统 |
CN110545246A (zh) * | 2018-05-29 | 2019-12-06 | 北京京东尚科信息技术有限公司 | 一种基于令牌桶的限流方法和装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114598658A (zh) * | 2022-03-07 | 2022-06-07 | 浪潮云信息技术股份公司 | 一种流量限制方法及装置 |
CN114745334A (zh) * | 2022-03-31 | 2022-07-12 | 广州易星信息科技有限公司 | 一种分布式系统限流方法及系统 |
CN114745334B (zh) * | 2022-03-31 | 2024-06-28 | 广州易星信息科技有限公司 | 一种分布式系统限流方法及系统 |
CN114860334A (zh) * | 2022-04-24 | 2022-08-05 | 曙光信息产业(北京)有限公司 | 虚拟机启动风暴的处理方法、装置、设备及介质 |
CN114860334B (zh) * | 2022-04-24 | 2024-01-26 | 曙光信息产业(北京)有限公司 | 虚拟机启动风暴的处理方法、装置、设备及介质 |
CN114915596A (zh) * | 2022-05-10 | 2022-08-16 | 北京奇艺世纪科技有限公司 | 数据发送方法、装置、设备及存储介质 |
CN115378656A (zh) * | 2022-07-26 | 2022-11-22 | 青岛海尔科技有限公司 | 令牌回填方法、存储介质及电子装置 |
CN115174487A (zh) * | 2022-09-06 | 2022-10-11 | 浙江大华技术股份有限公司 | 一种高并发限流方法、装置以及计算机存储介质 |
CN115174487B (zh) * | 2022-09-06 | 2022-12-06 | 浙江大华技术股份有限公司 | 一种高并发限流方法、装置以及计算机存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113765820A (zh) | 基于令牌桶的限流方法、装置、计算设备及介质 | |
JP7127010B2 (ja) | リソースの割り当て方法、装置、電子設備、コンピュータ可読媒体およびコンピュータプログラム | |
CN111901249A (zh) | 业务限流方法、装置、设备及存储介质 | |
CN110706093A (zh) | 一种账务处理方法和装置 | |
CN115421922A (zh) | 一种分布式系统的限流方法、装置、设备、介质及产品 | |
CN111427691A (zh) | 虚拟资源分配方法、装置、介质及电子设备 | |
CN113535726A (zh) | 数据库扩容方法及装置 | |
CN117118698A (zh) | 一种元数据服务器的访问限流方法、装置及设备 | |
CN108683608B (zh) | 分配流量的方法和装置 | |
CN114647499A (zh) | 异步作业任务并发控制方法、装置、电子设备和存储介质 | |
CN115408297A (zh) | 测试方法、装置、设备及介质 | |
CN114090247A (zh) | 用于处理数据的方法、装置、设备以及存储介质 | |
CN114490136A (zh) | 服务调用和提供方法、装置、电子设备、介质和程序产品 | |
CN111402030A (zh) | 账单生成的方法和装置 | |
CN114510309B (zh) | 动画效果的设置方法、装置、设备及介质 | |
CN114268558B (zh) | 监控图的生成方法、装置、设备、介质 | |
CN115312208B (zh) | 接诊数据展示方法、装置、设备、介质 | |
CN113347250B (zh) | 数据访问方法、数据访问装置、电子设备及可读存储介质 | |
CN110378609B (zh) | 业务处理方法、业务处理装置、电子设备和介质 | |
CN110827009B (zh) | 一种基于账户余额限制的资金转移方法及装置 | |
CN116737109A (zh) | 数字资源处理方法、装置、电子设备及存储介质 | |
CN114816736A (zh) | 业务处理方法、装置、设备和介质 | |
CN114385170A (zh) | 表单生成方法、装置、设备、介质和程序产品 | |
CN116188146A (zh) | 一种业务处理方法、装置、电子设备及计算机可读介质 | |
CN113051090A (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 |