CN114745334A - 一种分布式系统限流方法及系统 - Google Patents
一种分布式系统限流方法及系统 Download PDFInfo
- Publication number
- CN114745334A CN114745334A CN202210343903.4A CN202210343903A CN114745334A CN 114745334 A CN114745334 A CN 114745334A CN 202210343903 A CN202210343903 A CN 202210343903A CN 114745334 A CN114745334 A CN 114745334A
- Authority
- CN
- China
- Prior art keywords
- token
- tokens
- token bucket
- module
- 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
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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种分布式系统限流方法及系统,方法包括获取客户端请求,依据客户端请求判断令牌桶内是否有足够的令牌,若有,客户端获取令牌并进行访问,否则,对客户端请求进行拦截,同时返回客户端需等待的时间,并对令牌桶中令牌的数量进行修改,从而实现分布式系统的限流;当接收到客户端请求时才计算令牌桶的令牌数量,并且当令牌桶的令牌数量不够时,才修改令牌桶中令牌的数量,令牌桶重新开始获取令牌,从而避免了现有技术每间隔一段时间向令牌桶添加指定令牌数而导致占用系统大量资源和响应慢的情况出现。
Description
技术领域
本发明涉及限流技术领域,尤其涉及一种分布式系统限流方法及系统。
背景技术
由于应用程序接口无法控制调用方的行为,因此当遇到瞬时请求量激增时,会导致接口占用过多服务器资源,使得其他请求响应速度降低或是超时,更有甚者可能导致服务器宕机,因此,有必要对应用服务的请求进行限制,即限流,以此来保护服务器,线上业务出于各种原因考虑,多是分布式系统,目前针对分布式系统的限流方法一般是通过令牌桶算法实现,通过每间隔一段时间向令牌桶添加指定令牌数,有效保证令牌桶内的令牌数能够满足一定量的突发访问申请,然而,现有的分布式系统限流方法虽然可以满足一定量的突发访问申请,但是每间隔一段时间向令牌桶添加指定令牌数会导致占用了大量系统的资源,也导致了响应慢的缺陷。
发明内容
有鉴于此,本发明提出一种分布式系统限流方法及系统,可以解决现有分布式系统限流方法所存在的占用系统大量资源和响应慢的缺陷。
本发明的技术方案是这样实现的:
一种分布式系统限流方法,具体包括以下步骤:
步骤S1,获取客户端请求;
步骤S2,依据客户端请求判断令牌桶内是否有足够的令牌,若有,则执行步骤S3,否则执行步骤S4;
步骤S3,客户端获取令牌并进行访问;
步骤S4,对客户端请求进行拦截,同时返回客户端需等待的时间,并对令牌桶中令牌的数量进行修改,从而实现分布式系统的限流。
作为所述分布式系统限流方法的进一步可选方案,所述步骤S1具体包括以下步骤:
步骤S11,获取客户端请求的请求信息;
步骤S12,依据所述请求信息,确定请求令牌数。
作为所述分布式系统限流方法的进一步可选方案,所述步骤S2中依据客户端请求判断令牌桶内是否有足够的令牌,具体包括以下步骤:
步骤S21,计算令牌桶内的令牌数量;
步骤S22,判断请求令牌数是否小于令牌桶内的令牌数量,若是,则令牌桶内有足够的令牌,否则令牌桶内没有足够的令牌。
作为所述分布式系统限流方法的进一步可选方案,所述步骤S21具体包括以下步骤:
步骤S211,获取当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳;
步骤S212,依据当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳进行判断,判断令牌桶是否可以获取令牌,若是,则执行步骤S213,否则,上一次获取令牌后令牌桶剩余的令牌数量为当前令牌桶内的令牌数量;
步骤S213,计算出当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳之间可获取的令牌数量,并将可获取的令牌数量加上上一次获取令牌后令牌桶剩余的令牌数量,从而计算出当前令牌桶内的令牌数量。
作为所述分布式系统限流方法的进一步可选方案,所述步骤S4中对令牌桶进行修改设置,具体包括以下步骤:
步骤S41,配置令牌桶的参数;
步骤S42,当监控到令牌桶参数有变化或者新增令牌桶设置时,重新初始化令牌桶;
步骤S43,计数器和计时器启动,令牌桶定时定量获取令牌。
一种分布式系统限流系统,所述系统包括:
第一获取模块,用于获取客户端请求;
第一判断模块,用于依据客户端请求判断令牌桶内是否有足够的令牌;
第二获取模块,用于客户端获取令牌并进行访问;
拦截模块,用于对客户端请求进行拦截,并返回客户端需等待的时间;
修改设置模块,用于对令牌桶中令牌的数量进行修改。
作为所述分布式系统限流系统的进一步可选方案,所述第一获取模块包括:
请求信息获取模块,用于获取客户端请求的请求信息;
确定模块,用于依据所述请求信息,确定请求令牌数。
作为所述分布式系统限流系统的进一步可选方案,所述第一判断模块包括:
第一计算模块,用于计算令牌桶内的令牌数量;
第二判断模块,用于判断请求令牌数是否小于令牌桶内的令牌数量。
作为所述分布式系统限流系统的进一步可选方案,所述第一计算模块包括:
第三获取模块,用于获取当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳;
第三判断模块,用于依据当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳进行判断,判断令牌桶是否可以获取令牌;
第二计算模块,用于计算出当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳之间可获取的令牌数量,并将可获取的令牌数量加上上一次获取令牌后令牌桶剩余的令牌数量,从而计算出当前令牌桶内的令牌数量。
作为所述分布式系统限流系统的进一步可选方案,所述修改设置模块包括:
配置模块,用于配置令牌桶的参数;
初始化令牌桶模块,用于当监控到令牌桶参数有变化或者新增令牌桶设置时,重新初始化令牌桶;
启动模块,用于启动计数器和计时器,令牌桶定时定量获取令牌。
本发明的有益效果是:当接收到客户端请求时才计算令牌桶的令牌数量,并且当令牌桶的令牌数量不够时,才修改令牌桶中令牌的数量,令牌桶重新开始获取令牌,从而避免了现有技术每间隔一段时间向令牌桶添加指定令牌数而导致占用系统大量资源和响应慢的情况出现。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一种分布式系统限流方法的流程示意图;
图2为本发明一种分布式系统限流系统的组成示意图。
具体实施方式
下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
参考图1-2,一种分布式系统限流方法,具体包括以下步骤:
步骤S1,获取客户端请求;
步骤S2,依据客户端请求判断令牌桶内是否有足够的令牌,若有,则执行步骤S3,否则执行步骤S4;
步骤S3,客户端获取令牌并进行访问;
步骤S4,对客户端请求进行拦截,同时返回客户端需等待的时间,并对令牌桶中令牌的数量进行修改,从而实现分布式系统的限流。
在本实施例中,当接收到客户端请求时才计算令牌桶的令牌数量,并且当令牌桶的令牌数量不够时,才修改令牌桶中令牌的数量,令牌桶重新开始获取令牌,从而避免了现有技术每间隔一段时间向令牌桶添加指定令牌数而导致占用系统大量资源和响应慢的情况出现。
需要说明的是,调用tryAcquire方法判断是否在指定的timeout时间内有足够的令牌数,如果有,则直接调用acquire方法获取令牌并进行访问。
优选的,所述步骤S1具体包括以下步骤:
步骤S11,获取客户端请求的请求信息;
步骤S12,依据所述请求信息,确定请求令牌数。
优选的,所述步骤S2中依据客户端请求判断令牌桶内是否有足够的令牌,具体包括以下步骤:
步骤S21,计算令牌桶内的令牌数量;
步骤S22,判断请求令牌数是否小于令牌桶内的令牌数量,若是,则令牌桶内有足够的令牌,否则令牌桶内没有足够的令牌。
优选的,所述步骤S21具体包括以下步骤:
步骤S211,获取当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳;
步骤S212,依据当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳进行判断,判断令牌桶是否可以获取令牌,若是,则执行步骤S213,否则,上一次获取令牌后令牌桶剩余的令牌数量为当前令牌桶内的令牌数量;
步骤S213,计算出当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳之间可获取的令牌数量,并将可获取的令牌数量加上上一次获取令牌后令牌桶剩余的令牌数量,从而计算出当前令牌桶内的令牌数量。
在本实施例中,根据当前的时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳进行比较,如果当前时间在上一次获取令牌后设置的下次允许补充令牌的时间戳之后,那么表示令牌桶可以获取令牌,当令牌桶可以获取令牌时,计算当前时间与上一次设定时间的差值,除以每个令牌产生的时间间隔来获取这一时间段新产生的令牌数,同时加上上次剩余的令牌数与最大令牌数进行比较,取小者作为当前的令牌桶中的令牌数。
优选的,所述步骤S4中对令牌桶进行修改设置,具体包括以下步骤:
步骤S41,配置令牌桶的参数;
步骤S42,当监控到令牌桶参数有变化或者新增令牌桶设置时,重新初始化令牌桶;
步骤S43,计数器和计时器启动,令牌桶定时定量获取令牌。
在本实施例中,通过配置令牌桶的参数,能够重新初始化令牌桶,并启动计数器和计时器,从而使得令牌桶定时定量获取令牌,进一步提高系统响应速度,减少占用的资源;需要说明的是,所述令牌桶的参数包括API名称、令牌桶大小、流入速度和阻断方式。
一种分布式系统限流系统,所述系统包括:
第一获取模块,用于获取客户端请求;
第一判断模块,用于依据客户端请求判断令牌桶内是否有足够的令牌;
第二获取模块,用于客户端获取令牌并进行访问;
拦截模块,用于对客户端请求进行拦截,并返回客户端需等待的时间;
修改设置模块,用于对令牌桶中令牌的数量进行修改。
在本实施例中,当接收到客户端请求时才计算令牌桶的令牌数量,并且当令牌桶的令牌数量不够时,才修改令牌桶中令牌的数量,令牌桶重新开始获取令牌,从而避免了现有技术每间隔一段时间向令牌桶添加指定令牌数而导致占用系统大量资源和响应慢的情况出现。
需要说明的是,调用tryAcquire方法判断是否在指定的timeout时间内有足够的令牌数,如果有,则直接调用acquire方法获取令牌并进行访问。
优选的,所述第一获取模块包括:
请求信息获取模块,用于获取客户端请求的请求信息;
确定模块,用于依据所述请求信息,确定请求令牌数。
优选的,所述第一判断模块包括:
第一计算模块,用于计算令牌桶内的令牌数量;
第二判断模块,用于判断请求令牌数是否小于令牌桶内的令牌数量。
优选的,所述第一计算模块包括:
第三获取模块,用于获取当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳;
第三判断模块,用于依据当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳进行判断,判断令牌桶是否可以获取令牌;
第二计算模块,用于计算出当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳之间可获取的令牌数量,并将可获取的令牌数量加上上一次获取令牌后令牌桶剩余的令牌数量,从而计算出当前令牌桶内的令牌数量。
在本实施例中,根据当前的时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳进行比较,如果当前时间在上一次获取令牌后设置的下次允许补充令牌的时间戳之后,那么表示令牌桶可以获取令牌,当令牌桶可以获取令牌时,计算当前时间与上一次设定时间的差值,除以每个令牌产生的时间间隔来获取这一时间段新产生的令牌数,同时加上上次剩余的令牌数与最大令牌数进行比较,取小者作为当前的令牌桶中的令牌数。
优选的,所述修改设置模块包括:
配置模块,用于配置令牌桶的参数;
初始化令牌桶模块,用于当监控到令牌桶参数有变化或者新增令牌桶设置时,重新初始化令牌桶;
启动模块,用于启动计数器和计时器,令牌桶定时定量获取令牌。
在本实施例中,通过配置令牌桶的参数,能够重新初始化令牌桶,并启动计数器和计时器,从而使得令牌桶定时定量获取令牌,进一步提高系统响应速度,减少占用的资源;需要说明的是,所述令牌桶的参数包括API名称、令牌桶大小、流入速度和阻断方式。
以上所述仅为本发明的较佳实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种分布式系统限流方法,其特征在于,具体包括以下步骤:
步骤S1,获取客户端请求;
步骤S2,依据客户端请求判断令牌桶内是否有足够的令牌,若有,则执行步骤S3,否则执行步骤S4;
步骤S3,客户端获取令牌并进行访问;
步骤S4,对客户端请求进行拦截,同时返回客户端需等待的时间,并对令牌桶中令牌的数量进行修改,从而实现分布式系统的限流。
2.根据权利要求1所述的一种分布式系统限流方法,其特征在于,所述步骤S1具体包括以下步骤:
步骤S11,获取客户端请求的请求信息;
步骤S12,依据所述请求信息,确定请求令牌数。
3.根据权利要求2所述的一种分布式系统限流方法,其特征在于,所述步骤S2中依据客户端请求判断令牌桶内是否有足够的令牌,具体包括以下步骤:
步骤S21,计算令牌桶内的令牌数量;
步骤S22,判断请求令牌数是否小于令牌桶内的令牌数量,若是,则令牌桶内有足够的令牌,否则令牌桶内没有足够的令牌。
4.根据权利要求3所述的一种分布式系统限流方法,其特征在于,所述步骤S21具体包括以下步骤:
步骤S211,获取当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳;
步骤S212,依据当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳进行判断,判断令牌桶是否可以获取令牌,若是,则执行步骤S213,否则,上一次获取令牌后令牌桶剩余的令牌数量为当前令牌桶内的令牌数量;
步骤S213,计算出当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳之间可获取的令牌数量,并将可获取的令牌数量加上上一次获取令牌后令牌桶剩余的令牌数量,从而计算出当前令牌桶内的令牌数量。
5.根据权利要求4所述的一种分布式系统限流方法,其特征在于,所述步骤S4中对令牌桶进行修改设置,具体包括以下步骤:
步骤S41,配置令牌桶的参数;
步骤S42,当监控到令牌桶参数有变化或者新增令牌桶设置时,重新初始化令牌桶;
步骤S43,计数器和计时器启动,令牌桶定时定量获取令牌。
6.一种分布式系统限流系统,其特征在于,所述系统包括:
第一获取模块,用于获取客户端请求;
第一判断模块,用于依据客户端请求判断令牌桶内是否有足够的令牌;
第二获取模块,用于客户端获取令牌并进行访问;
拦截模块,用于对客户端请求进行拦截,并返回客户端需等待的时间;
修改设置模块,用于对令牌桶中令牌的数量进行修改。
7.根据权利要求6所述的一种分布式系统限流系统,其特征在于,所述第一获取模块包括:
请求信息获取模块,用于获取客户端请求的请求信息;
确定模块,用于依据所述请求信息,确定请求令牌数。
8.根据权利要求7所述的一种分布式系统限流系统,其特征在于,所述第一判断模块包括:
第一计算模块,用于计算令牌桶内的令牌数量;
第二判断模块,用于判断请求令牌数是否小于令牌桶内的令牌数量。
9.根据权利要求8所述的一种分布式系统限流系统,其特征在于,所述第一计算模块包括:
第三获取模块,用于获取当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳;
第三判断模块,用于依据当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳进行判断,判断令牌桶是否可以获取令牌;
第二计算模块,用于计算出当前时间戳和上一次获取令牌后设置的下次允许补充令牌的时间戳之间可获取的令牌数量,并将可获取的令牌数量加上上一次获取令牌后令牌桶剩余的令牌数量,从而计算出当前令牌桶内的令牌数量。
10.根据权利要求9所述的一种分布式系统限流系统,其特征在于,所述修改设置模块包括:
配置模块,用于配置令牌桶的参数;
初始化令牌桶模块,用于当监控到令牌桶参数有变化或者新增令牌桶设置时,重新初始化令牌桶;
启动模块,用于启动计数器和计时器,令牌桶定时定量获取令牌。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210343903.4A CN114745334A (zh) | 2022-03-31 | 2022-03-31 | 一种分布式系统限流方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210343903.4A CN114745334A (zh) | 2022-03-31 | 2022-03-31 | 一种分布式系统限流方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114745334A true CN114745334A (zh) | 2022-07-12 |
Family
ID=82280485
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210343903.4A Pending CN114745334A (zh) | 2022-03-31 | 2022-03-31 | 一种分布式系统限流方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114745334A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115473852A (zh) * | 2022-07-26 | 2022-12-13 | 青岛海尔科技有限公司 | 用户端输入请求的限流方法、存储介质及电子装置 |
CN115883472A (zh) * | 2022-11-29 | 2023-03-31 | 重庆紫光华山智安科技有限公司 | 令牌发放方法及相关装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111740920A (zh) * | 2020-08-17 | 2020-10-02 | 广东睿江云计算股份有限公司 | 一种基于用户令牌的灰度发布和限流方法及其系统 |
US20210173573A1 (en) * | 2018-08-16 | 2021-06-10 | Huawei Technologies Co., Ltd. | Method for assuring quality of service in distributed storage system, control node, and system |
CN113765820A (zh) * | 2020-10-30 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 基于令牌桶的限流方法、装置、计算设备及介质 |
CN113938435A (zh) * | 2021-08-30 | 2022-01-14 | 奇安信科技集团股份有限公司 | 数据传输方法、装置、电子设备、存储介质及程序产品 |
-
2022
- 2022-03-31 CN CN202210343903.4A patent/CN114745334A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20210173573A1 (en) * | 2018-08-16 | 2021-06-10 | Huawei Technologies Co., Ltd. | Method for assuring quality of service in distributed storage system, control node, and system |
CN111740920A (zh) * | 2020-08-17 | 2020-10-02 | 广东睿江云计算股份有限公司 | 一种基于用户令牌的灰度发布和限流方法及其系统 |
CN113765820A (zh) * | 2020-10-30 | 2021-12-07 | 北京沃东天骏信息技术有限公司 | 基于令牌桶的限流方法、装置、计算设备及介质 |
CN113938435A (zh) * | 2021-08-30 | 2022-01-14 | 奇安信科技集团股份有限公司 | 数据传输方法、装置、电子设备、存储介质及程序产品 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115473852A (zh) * | 2022-07-26 | 2022-12-13 | 青岛海尔科技有限公司 | 用户端输入请求的限流方法、存储介质及电子装置 |
CN115883472A (zh) * | 2022-11-29 | 2023-03-31 | 重庆紫光华山智安科技有限公司 | 令牌发放方法及相关装置 |
CN115883472B (zh) * | 2022-11-29 | 2024-05-03 | 重庆紫光华山智安科技有限公司 | 令牌发放方法及相关装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114745334A (zh) | 一种分布式系统限流方法及系统 | |
JP7020616B2 (ja) | リソーススケジューリングのための方法およびシステム | |
US8977677B2 (en) | Throttling usage of resources | |
CN110489227B (zh) | 一种资源分配方法、装置、计算机设备和存储介质 | |
CN109582649B (zh) | 一种元数据存储方法、装置、设备及可读存储介质 | |
CN110647392A (zh) | 一种基于容器集群的智能弹性伸缩方法 | |
CN111338575B (zh) | 一种存储服务质量控制方法、装置、设备及存储介质 | |
CN113422736A (zh) | 基于令牌桶的请求管理方法、装置、设备及程序产品 | |
CN114116206A (zh) | 一种云资源的管理方法、装置及计算机存储介质 | |
CN109284193B (zh) | 一种基于多线程的分布式数据处理方法及服务器 | |
CN110569114B (zh) | 一种业务处理方法、装置、设备及存储介质 | |
CN113542256A (zh) | 客户端中登录凭证的更新方法、装置、设备及存储介质 | |
CN110275780B (zh) | 用于限制流量的方法和装置 | |
CN110555009B (zh) | 一种网络文件系统nfs服务的处理方法及装置 | |
CN111782378A (zh) | 自适应性的处理性能调整方法、服务器及可读存储介质 | |
CN114157717A (zh) | 一种微服务动态限流的系统及方法 | |
CN115174358A (zh) | 存储集群接口的监测处理方法、系统、设备及存储介质 | |
CN114443274A (zh) | 调节微服务线程池中线程数的方法、装置及可读存储介质 | |
CN114374657A (zh) | 一种数据处理方法和装置 | |
CN109784045B (zh) | 双系统通信访问控制方法及计算机可读存储介质 | |
CN112312165A (zh) | 视频下发方法、装置及计算机可读存储介质 | |
CN115328978B (zh) | 一种连接池的连接方法和服务器 | |
CN111966876A (zh) | 一种基于NodeJs定时生成灾情地图的方法 | |
CN110674169B (zh) | 一种网站数据库的保护方法及相关装置 | |
CN113114505B (zh) | 基于httpClient的访问请求处理方法及系统 |
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 |