CN110166376B - 流量控制方法及装置、***、服务器、计算机可读介质 - Google Patents
流量控制方法及装置、***、服务器、计算机可读介质 Download PDFInfo
- Publication number
- CN110166376B CN110166376B CN201910491605.8A CN201910491605A CN110166376B CN 110166376 B CN110166376 B CN 110166376B CN 201910491605 A CN201910491605 A CN 201910491605A CN 110166376 B CN110166376 B CN 110166376B
- Authority
- CN
- China
- Prior art keywords
- flow control
- window
- current
- count value
- value
- 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.)
- Active
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/22—Traffic shaping
- H04L47/225—Determination of shaping rate, e.g. using a moving window
-
- 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
-
- 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/29—Flow control; Congestion control using a combination of thresholds
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本公开提供了一种流量控制方法,涉及云计算领域,包括:在接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度,其中,滑动窗口用于表示时间段;若是,按照预设的业务逻辑处理所述业务请求;否则,向全局流控节点发送超额流控请求,以供全局流控节点根据超额流控请求,判断缓存的当前滑动窗口内的第二计数值是否小于预设的第二流控额度;接收全局流控节点在判断出缓存的当前滑动窗口内的第二计数值小于预设的第二流控额度时发送的业务处理指令;基于业务处理指令,按照预设的业务逻辑处理所述业务请求。本公开还提供了流量控制装置及***、服务器及计算机可读介质。
Description
技术领域
本公开实施例涉及通信技术领域,特别涉及流量控制方法及装置、***、服务器、计算机可读介质。
背景技术
产品业务对外提供的服务,通常部署于多个服务器上,为了避免用户恶意攻击,或者避免用户的使用量超出***能够承载的范围,通常都需要针对服务接口进行流量控制,如限制单个用户调用单个接口时,一秒钟只能调用10次(10qps),尤其在用户按照流量付费的场景下。在单机环境下实现流量控制是非常简单的,但在分布式环境下,兼顾性能、准确性和可用性是实现流量控制的难点。
目前,在分布式环境下,通常有两种实现流量控制的方式:1、通过redis进行全局流量控制计算,具体在redis中执行lua脚本实现滑动窗口或者令牌桶等算法,从而实现分布式环境的流量控制。2、按当前服务实例(如服务器)的个数平均分配每个服务实例上的流控限额,将分布式问题转化为单机问题进行流量控制。如当前接口总流控限额是100qps,服务部署有5个服务实例,则每个服务实例上对应的接口的流控限额为100/5=20qps,每个服务实例通过在本地采用单机的滑动窗口算法或者令牌桶算法,以20qps为限制进行流量控制。
发明内容
本公开实施例旨在至少解决现有技术中存在的技术问题之一,提供一种流量控制方法及装置、***、服务器、计算机可读介质。
第一方面,本公开实施例提供一种流量控制方法,该流量控制方法包括:
在接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度;其中,所述滑动窗口用于表示时间段;
若判断出本地缓存的当前滑动窗口内的第一计数值小于预设的第一流控额度时,按照预设的业务逻辑处理所述业务请求;
若判断出本地缓存的当前滑动窗口内的第一计数值大于或等于预设的第一流控额度时,向全局流控节点发送超额流控请求,以供所述全局流控节点根据超额流控请求,判断缓存的当前滑动窗口内的第二计数值是否小于预设的第二流控额度;
接收所述全局流控节点在判断出缓存的当前滑动窗口内的第二计数值小于预设的第二流控额度时发送的业务处理指令;
基于所述业务处理指令,按照预设的业务逻辑处理所述业务请求。
在一些实施例中,所述滑动窗口包括至少两个子窗口,所述时间段包括至少两个时间周期,每个子窗口对应一个时间周期,每个子窗口对应一个预设的第三流控额度,各子窗口对应的第三流控额度之和等于所述第一流控额度;
所述在接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度之前,还包括:
在接收到业务请求时,判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度;其中,本地缓存的当前滑动窗口内的各子窗口的第三计数值之和等于当前滑动窗口内的第一计数值;
若判断出本地缓存的当前子窗口内的第三计数值小于当前子窗口对应的第三流控额度时,按照预设的业务逻辑处理所述业务请求;
若判断出本地缓存的当前子窗口内的第三计数值大于或等于当前子窗口对应的第三流控额度时,执行所述判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度的步骤。
在一些实施例中,所述若判断出本地缓存的当前子窗口内的第三计数值小于当前子窗口对应的第三流控额度时,按照预设的业务逻辑处理所述业务请求之后,以及所述若判断出本地缓存的当前滑动窗口内的第一计数值小于预设的第一流控额度时,按照预设的业务逻辑处理所述业务请求之后,还包括:
将本地缓存的当前子窗口内的第三计数值进行加1处理,更新当前子窗口内的第三计数值和当前滑动窗口内的第一计数值;
判断当前子窗口内的第三计数值与当前子窗口对应的已同步值的差值是否大于或等于预设阈值;
若判断出当前子窗口内的第三计数值与当前子窗口对应的已同步值的差值大于或等于预设阈值时,向所述全局流控节点发送同步更新计数请求,所述同步更新计数请求包括待同步值,以供所述全局流控节点基于同步更新计数请求,根据缓存的当前子窗口内的第四计数值与所述待同步值之和,更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值;其中,所述待同步值等于当前子窗口内的第三计数值和当前子窗口对应的第三流控额度中的最小值与当前子窗口对应的已同步值之差,全局流控节点缓存的当前滑动窗口的各子窗口内的第四计数值之和等于当前滑动窗口内的第二计数值;
令本地缓存的当前子窗口对应的已同步值等于当前子窗口内的第三计数值,更新本地缓存的当前子窗口对应的已同步值,并等待接收新的业务请求。
在一些实施例中,所述向所述全局流控节点发送同步更新计数请求之后,还包括:
接收所述全局流控节点在更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值之后发送的当前滑动窗口内的第二计数值;
根据当前滑动窗口内的第二计数值,更新本地缓存的全局剩余流控额度,其中,本地预先缓存的全局剩余流控额度等于本地预先缓存的第二流控额度与当前滑动窗口内的第二计数值之差。
在一些实施例中,所述全局流控节点在发送业务处理指令之后,将缓存的当前子窗口内的第四计数值进行加1处理,以更新当前子窗口内的第四计数值和当前滑动窗口内的第二计数值。
在一些实施例中,所述流量控制方法还包括:
接收所述全局流控节点在更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值之后发送的当前滑动窗口内的第二计数值;
根据所述当前滑动窗口内的第二计数值,更新本地预先缓存的全局剩余流控额度,其中,本地预先缓存的全局剩余流控额度等于本地缓存的第二流控额度与当前滑动窗口内的第二计数值之差;
将本地缓存的当前子窗口内的第三计数值进行加1处理,更新当前子窗口内的第三计数值和当前子窗口内的第一计数值,并等待接收新的业务请求。
在一些实施例中,所述在接收到业务请求时,判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度之前,还包括:
在接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值与当前滑动窗口对应的已同步值之差,是否小于本地缓存的全局剩余流控额度;
若判断出本地缓存的当前滑动窗口内的第一计数值与当前滑动窗口对应的已同步值之差,小于本地缓存的全局剩余流控额度时,执行判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度的步骤。
第二方面,本公开实施例提供一种流量控制装置,该流量控制装置包括:
接收模块,用于接收业务请求;
判断模块,用于在所述接收模块接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度;其中,所述滑动窗口用于表示时间段;
业务处理模块,用于在所述判断模块判断出本地缓存的当前滑动窗口内的第一计数值小于预设的第一流控额度时,按照预设的业务逻辑处理所述业务请求;
发送模块,用于在所述判断模块判断出本地缓存的当前滑动窗口内的第一计数值大于或等于预设的第一流控额度时,向全局流控节点发送超额流控请求,以供所述全局流控节点根据超额流控请求,判断缓存的当前滑动窗口内的第二计数值是否小于预设的第二流控额度;
所述业务处理模块还用于接收所述全局流控节点在判断出缓存的当前滑动窗口内的第二计数值小于预设的第二流控额度时发送的业务处理指令;基于所述业务处理指令,按照预设的业务逻辑处理所述业务请求。
在一些实施例中,所述滑动窗口包括至少两个子窗口,所述时间段包括至少两个时间周期,每个子窗口对应一个时间周期,每个子窗口对应一个预设的第三流控额度,各子窗口对应的第三流控额度之和等于所述第一流控额度;
所述判断模块还用于在判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度之前,判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度,其中,本地缓存的当前滑动窗口内的各子窗口的第三计数值之和等于当前滑动窗口内的第一计数值;若判断出本地缓存的当前子窗口内的第三计数值大于或等于当前子窗口对应的第三流控额度时,执行所述判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度的步骤;
所述业务处理模块还用于若所述判断模块判断出本地缓存的当前子窗口内的第三计数值小于当前子窗口对应的第三流控额度时,按照预设的业务逻辑处理所述业务请求。
在一些实施例中,还包括第一计数模块和本地同步值更新模块;
所述第一计数模块用于在所述业务处理模块按照预设的业务逻辑处理所述业务请求之后,将本地缓存的当前子窗口内的第三计数值进行加1处理,更新当前子窗口内的第三计数值和当前滑动窗口内的第一计数值;
所述判断模块还用于判断当前子窗口内的第三计数值与当前子窗口对应的已同步值的差值是否大于或等于预设阈值;
所述发送模块还用于若所述判断模块判断出当前子窗口内的第三计数值与当前子窗口对应的已同步值的差值大于或等于预设阈值时,向所述全局流控节点发送同步更新计数请求,所述同步更新计数请求包括待同步值,以供所述全局流控节点基于同步更新计数请求,根据缓存的当前子窗口内的第四计数值与所述待同步值之和,更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值;其中,所述待同步值等于当前子窗口内的第三计数值和当前子窗口对应的第三流控额度中的最小值与当前子窗口对应的已同步值之差,全局流控节点缓存的当前滑动窗口的各子窗口内的第四计数值之和等于当前滑动窗口内的第二计数值;
所述本地同步值更新模块用于在所述发送模块向所述全局流控节点发送同步更新计数请求之后,令本地缓存的当前子窗口对应的已同步值等于当前子窗口内的第三计数值,更新本地缓存的当前子窗口对应的已同步值,并触发所述接收模块等待接收新的业务请求。
在一些实施例中,还包括第一缓存模块,所述第一缓存模块用于在所述发送模块向所述全局流控节点发送同步更新计数请求之后,接收所述全局流控节点在更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值之后发送的当前滑动窗口内的第二计数值;根据当前滑动窗口内的第二计数值,更新本地缓存的全局剩余流控额度,其中,本地预先缓存的全局剩余流控额度等于本地预先缓存的第二流控额度与当前滑动窗口内的第二计数值之差。
在一些实施例中,所述全局流控节点在发送业务处理指令之后,将缓存的当前子窗口内的第四计数值进行加1处理,以更新当前子窗口内的第四计数值和当前滑动窗口内的第二计数值。
在一些实施例中,还包括第二缓存模块和第二计数模块;
所述第二缓存模块用于接收所述全局流控节点在将缓存的当前子窗口内的第四计数值进行加1处理,以更新当前子窗口内的第四计数值和当前滑动窗口内的第二计数值之后发送的当前滑动窗口内的第二计数值;根据所述当前滑动窗口内的第二计数值,更新本地预先缓存的全局剩余流控额度,其中,本地预先缓存的全局剩余流控额度等于本地缓存的第二流控额度与当前滑动窗口内的第二计数值之差;
所述第二计数模块用于将本地缓存的当前子窗口内的第三计数值进行加1处理,更新当前子窗口内的第三计数值和当前子窗口内的第一计数值,并触发所述接收模块等待接收新的业务请求。
在一些实施例中,所述判断模块还用于在判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度之前,判断本地缓存的当前滑动窗口内的第一计数值与当前滑动窗口对应的已同步值之差,是否小于本地缓存的全局剩余流控额度;若判断出本地缓存的当前滑动窗口内的第一计数值与当前滑动窗口对应的已同步值之差,小于本地缓存的全局剩余流控额度时,执行判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度的步骤。
第三方面,本公开实施例提供一种流量控制***,该流量控制***包括多个服务实例和全局流控节点,所述服务实例包括前述任一实施例所提供的流量控制装置。
第四方面,本公开实施例提供一种服务器,该服务器包括:
一个或多个处理器;
存储装置,其上存储有一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现前述任一实施例所提供的流量控制方法。
第五方面,本公开实施例提供一种计算机可读介质,其上存储有计算机程序,其中,所述程序被执行时实现前述任一实施例所提供的流量控制方法。
本公开实施例提供的流量控制方法及装置、***、服务器、计算机可读介质,基于滑动窗口算法,通过服务实例结合全局流控节点来进行流量控制,从而实现了较高的流量控制的性能和可用性,同时,提高了流量控制的准确性。
附图说明
附图用来提供对本公开实施例的进一步理解,并且构成说明书的一部分,与本公开的实施例一起用于解释本公开,并不构成对本公开的限制。通过参考附图对详细示例实施例进行描述,以上和其他特征和优点对本领域技术人员将变得更加显而易见,在附图中:
图1为本公开实施例提供的一种流量控制方法的流程图;
图2为本公开实施例中滑动窗口的一种示例图;
图3为本公开实施例提供的另一种流量控制方法的流程图;
图4为本公开实施例提供的又一种流量控制方法的流程图;
图5为本公开实施例提供的再一种流量控制方法的流程图;
图6为本公开实施例提供的再一种流量控制方法的流程图;
图7为本公开实施例提供的再一种流量控制方法的流程图;
图8为本公开实施例提供的流量控制方法的一种应用示意图;
图9为本公开实施例提供的流量控制方法的另一种应用示意图;
图10为本公开实施例提供的一种流量控制装置的结构示意图;
图11为本公开实施例提供的一种流量控制***的结构示意图。
具体实施方式
为使本领域的技术人员更好地理解本公开的技术方案,下面结合附图对本公开提供的流量控制方法及装置、***、服务器、计算机可读介质进行详细描述。
在下文中将参考附图更充分地描述示例实施例,但是所述示例实施例可以以不同形式来体现且不应当被解释为限于本文阐述的实施例。反之,提供这些实施例的目的在于使本公开透彻和完整,并将使本领域技术人员充分理解本公开的范围。
如本文所使用的,术语“和/或”包括一个或多个相关列举条目的任何和所有组合。
本文所使用的术语仅用于描述特定实施例,且不意欲限制本公开。如本文所使用的,单数形式“一个”和“该”也意欲包括复数形式,除非上下文另外清楚指出。还将理解的是,当本说明书中使用术语“包括”和/或“由……制成”时,指定存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加一个或多个其他特征、整体、步骤、操作、元件、组件和/或其群组。
本文所述实施例可借助本公开的理想示意图而参考平面图和/或截面图进行描述。因此,可根据制造技术和/或容限来修改示例图示。因此,实施例不限于附图中所示的实施例,而是包括基于制造工艺而形成的配置的修改。因此,附图中例示的区具有示意性属性,并且图中所示区的形状例示了元件的区的具体形状,但并不旨在是限制性的。
除非另外限定,否则本文所用的所有术语(包括技术和科学术语)的含义与本领域普通技术人员通常理解的含义相同。还将理解,诸如那些在常用字典中限定的那些术语应当被解释为具有与其在相关技术以及本公开的背景下的含义一致的含义,且将不解释为具有理想化或过度形式上的含义,除非本文明确如此限定。
本公开实施例所提供的流量控制方法,可以由流量控制装置来执行,该装置可以通过软件和/或硬件的方式实现,该装置可以集成在服务器、电子设备中。
本公开实施例所提供的流量控制方法,用于在分布式环境下,实现流量控制。在分布式环境下,产品业务对外提供的服务通常部署于多个服务实例上,例如,服务实例为服务器。在本公开实施例中,流量控制装置可以集成于服务实例中,用以实现本公开实施例所提供的流量控制方法。
图1为本公开实施例提供的一种流量控制方法的流程图,如图1所示,该流量控制方法包括:
步骤11、针对每个服务实例,该服务实例在接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度,若是,执行步骤12,否则,执行步骤13。
其中,滑动窗口用于表示时间段。在本公开实施例中,在分布式环境下,每个服务实例(如服务器)设置有用于表示时间段的滑动窗口,相应的,全局流控节点上设置有用于表示时间段的滑动窗口。可以理解的是,当前滑动窗口则用于表示当前时间段。图2为本公开实施例中滑动窗口的一种示例图,如图2所示,在本公开实施例中,沿图2中箭头所指的时间轴的方向,将流逝的时间虚拟成若干个滑动窗口,滑动窗口用于表示时间段,该时间段的长度可以根据实际业务需求进行动态配置,例如,该时间段可以为1秒,也可以是1毫秒等。在本公开实施例中,该时间段设置为1秒,即滑动窗口用于表示1秒的时间段。
在本公开实施例中,服务实例在本地缓存的滑动窗口可以用于记录对应的时间段内该服务实例已接收处理的业务请求的数量;相应的,全局流控节点缓存的滑动窗口可以用于记录对应的时间段内全局(所有服务实例)已接收处理的业务请求的数量。
在本公开实施例中,针对每个服务实例,第一计数值c1用于表示滑动窗口对应的时间段内,该服务实例已接收处理的业务请求的数量。可以理解的是,当前滑动窗口内的第一计数值c1为当前滑动窗口所表示的当前时间段内的第一计数值c1,即服务实例在当前滑动窗口所表示的当前时间段内已接收处理的业务请求的数量。
在本公开实施例中,假设在分布式环境下,服务接口对应设置有n(n为大于或等于2的正整数)个服务实例,假设服务接口的流控额度为Qs,服务接口的每秒查询率(QPS)为Qs,即全局的流控额度为Qs,则全局流控节点对应的流控额度为Qs;针对每个服务实例,可根据实际需要预先设定每个服务实例的对应该服务接口的本地流控额度为qs=Qs/n,每个服务实例的每秒查询率(QPS)为qs,则每个服务实例对应的流控额度为qs。例如,Qs为100,n=5,则qs=100/5=20。
在本公开实施例中,服务接口的流控额度可以理解为该服务接口在一定时间内(如每秒内)可以处理的业务请求的最大数量,相应的,该服务接口所对应的各服务实例的本地流控额度也可以理解为各服务实例在一定时间内(如每秒内)可以处理的业务请求的最大数量。例如,服务接口为短信服务接口,业务请求为短信发送业务请求,服务实例为用于部署短信服务的服务器。
在本公开实施例中,在分布式环境下,针对每个服务实例,将该服务实例对应的流控额度qs称为为第一流控额度,将全局流控节点对应的流控额度Qs称为第二流控额度。其中,第一流控额度为qs,第二流控额度为Qs,Qs的值可以根据实际情况设定,qs的值可以根据实际Qs的值和服务实例的总数量n确定。
在本公开实施例中,全局流控节点可以为Redis服务器。
在步骤11中,针对每个服务实例(如服务器),该服务实例在接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值c1是否小于预设的第一流控额度qs,若判断出本地缓存的当前滑动窗口内的第一计数值c1小于预设的第一流控额度qs时,表明该服务实例在当前滑动窗口对应的当前时间段内(例如当前秒内)已接收处理的业务请求的数量(即第一计数值c1)未达到且未超过该服务实例对应的流控额度(即第一流控额度qs),因此,该服务实例可以继续处理该接收到的业务请求,故执行步骤12。
而该服务实例若判断出本地缓存的当前滑动窗口内的第一计数值c1大于或等于预设的第一流控额度时,表明该服务实例在当前滑动窗口对应的当前时间段内(例如当前秒内)已接收处理的业务请求的数量(即第一计数值c1)已达到或超过该服务实例对应的流控额度(即第一流控额度qs),则该服务实例需要向全局流控节点请求超额流控计算,以确定是否可以处理该接收到的业务请求,故执行步骤13。
步骤12、该服务实例按照预设的业务逻辑处理所述业务请求。
在本公开实施例中,针对每个服务实例(如服务器),该服务实例在接收到业务请求时,若判断出本地缓存的当前滑动窗口内的第一计数值c1小于预设的第一流控额度qs时,表明该服务实例在当前滑动窗口对应的当前时间段内(例如当前秒内)已接收处理的业务请求的数量(即第一计数值c1)未达到且未超过该服务实例对应的流控额度(即第一流控额度qs),即本地流控额度当前还未被用完,该服务实例对应的服务接口当前仍可以被调用,因此,该服务实例可以按照预设的业务逻辑处理当前接收到的业务请求。
步骤13、该服务实例向全局流控节点发送超额流控请求。
在步骤13中,针对每个服务实例(如服务器),该服务实例在接收到业务请求时,若判断出本地缓存的当前滑动窗口内的第一计数值c1大于或等于预设的第一流控额度时,表明该服务实例在当前滑动窗口对应的当前时间段内(例如当前秒内)已接收处理的业务请求的数量(即第一计数值c1)已达到或超过该服务实例对应的流控额度(即第一流控额度qs),即本地流控额度当前已被用完,故该服务实例需要向全局流控节点请求超额流控计算,以确定是否可以处理该接收到的业务请求。
步骤14、全局流控节点根据超额流控请求,判断缓存的当前滑动窗口内的第二计数值是否小于预设的第二流控额度,若是,执行步骤15,否则通过该服务实例返回业务请求失败消息。
在本公开实施例中,第二计数值C2用于表示滑动窗口对应的时间段内全局(所有服务实例)已接收处理的业务请求的数量。可以理解的是,当前滑动窗口内的第二计数值C2为当前滑动窗口所表示的当前时间段内的第二计数值C2,即全局(所有服务实例)在当前滑动窗口所表示的当前时间段内已接收处理的业务请求的数量。
可以理解的是,在理论上,全局流控节点缓存的当前滑动窗口内的第二计数值C2等于各服务实例缓存的当前滑动窗口内的第一计数值c1之和。但在实际应用中,若服务实例和全局流控节点没有同步更新计数或者没有及时同步更新计数时,会使得全局流控节点缓存的当前滑动窗口内的第二计数值C2与各服务实例缓存的当前滑动窗口内的第一计数值c1之和存在一定的误差。
在步骤14中,全局流控节点在接收到超额流控请求后,判断缓存的当前滑动窗口内的第二计数值C2是否小于预设的第二流控额度Qs,若判断出缓存的当前滑动窗口内的第二计数值C2小于预设的第二流控额度Qs时,表明全局(所有服务实例)在当前滑动窗口对应的当前时间段内(例如当前秒内)已接收处理的业务请求的数量(即第二计数值C2)未达到且未超过全局流控节点对应的流控额度(即第二流控额度Qs),即全局的流控额度Qs当前还未被用完,该服务实例对应的服务接口当前仍可以被调用,即使本地流控额度已被用完,该接收到的业务请求仍可以被处理,因此执行步骤15,向该服务实例反馈业务处理指令,以通过该服务实例处理该业务请求。
该全局流控节点若判断出缓存的当前滑动窗口内的第二计数值C2是否大于或等于预设的第二流控额度Qs时,表明全局(所有服务实例)在当前滑动窗口对应的当前时间段内(例如当前秒内)已接收处理的业务请求的数量(即第二计数值)已达到或超过该服务实例对应的流控额度(即第二流控额度Qs),即全局的流控额度当前也已被用完,因此该全局流控节点可以通过该服务实例返回业务请求失败消息。
在本公开实施例中,全局流控节点可以使用lua脚本,通过mget命令获取当前滑动窗口内的第二计数值。而后判断缓存的当前滑动窗口内的第二计数值是否小于预设的第二流控额度。
步骤15、全局流控节点向该服务实例发送业务处理指令。
步骤16、该服务实例基于业务处理指令,按照预设的业务逻辑处理所述业务请求。
在步骤16中,该服务实例基于业务处理指令,按照预设的业务逻辑处理该接收到的业务请求。
本公开实施例所提供的流量控制方法,基于滑动窗口算法,通过服务实例结合全局流控节点来进行流量控制,从而实现了较高的流量控制的性能和可用性,同时,提高了流量控制的准确性。
图3为本公开实施例提供的另一种流量控制方法的流程图,本公开实施例所提供的流量控制方法与前述实施例所提供的流量控制方法的不同之处在于,在本公开实施例中,滑动窗口包括至少两个子窗口,时间段包括至少两个时间周期.
其中,每个子窗口对应一个时间周期,每个子窗口用于表示对应的时间周期,每个子窗口对应一个预设的第三流控额度,各子窗口对应的第三流控额度之和等于第一流控额度。
其中,每个时间周期的长度可以根据实际业务需求进行动态配置,参见图2,在一些实施例中,滑动窗口包括5个子窗口,时间段包括5个时间周期,时间段的长度为1秒,则每个子窗口对应的时间周期的长度可以设置为1秒/5=200毫秒。
在本公开实施例中,服务实例在本地缓存的子窗口可以用于记录对应的时间周期内该服务实例已接收处理的业务请求的数量;相应的,全局流控节点缓存的子窗口可以用于记录对应的时间周期全局(所有服务实例)已接收处理的业务请求的数量。
在本公开实施例中,每个子窗口对应的预设的第三流控额度可以理解为该服务实例在该子窗口对应的时间周期内可以接收处理的业务请求的最大数量。
在一些实施例中,第三流控额度q等于滑动窗口对应的第一流控额度qs除以子窗口的数量。例如,第一流控额度为qs,滑动窗口包括5个子窗口,则每个子窗口对应的第三流控额度q=qs/5。
在本公开实施例中,如图3所示,在步骤11之前,还包括:
步骤10、针对每个服务实例,该服务实例在接收到业务请求时,判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度,若是,执行步骤12,否则执行步骤11。
可以理解的是,如图2所示,随着时间的流逝,时间周期也沿着图2中的箭头所指的时间轴的方向滑动,当前时间周期也随着时间的流逝而沿时间轴的方向滑动,相应的,当前滑动窗口内的当前子窗口也随之滑动。
例如,如图2所示,当前滑动窗口包括5个子窗口,其中,位于箭头所指的时间轴方向上的最右端的子窗口为当前子窗口,当前子窗口对应的时间周期为当前时间周期,其余4个子窗口为当前时间周期的前4个时间周期分别对应的子窗口。
在本公开实施例中,针对每个服务实例,第三计数值c3用于表示子窗口对应的时间周期内该服务实例已接收处理的业务请求的数量。可以理解的是,该服务实例在本地缓存的当前子窗口内的第三计数值c3为该服务实例在本地缓存的当前子窗口所表示的当前时间周期内的第三计数值c3,即该服务实例在当前子窗口对应的当前时间周期内已接收处理的业务请求的数量。
在本公开实施例中,该服务实例在本地缓存的当前滑动窗口的各子窗口内的第三计数值c3之和等于所述当前滑动窗口内的第一计数值c1。
在步骤10中,针对每个服务实例,该服务实例在接收到业务请求时,先判断本地缓存的当前子窗口内的第三计数值c3是否小于当前子窗口对应的第三流控额度q,若判断出本地缓存的当前子窗口内的第三计数值c3小于当前子窗口对应的第三流控额度q时,表明该服务实例在当前子窗口对应的当前时间周期内(例如当前200毫秒内),已接收处理的业务请求的数量(即第三计数值c3)未达到且未超过该服务实例在当前子窗口内对应的当前时间周期内可以接收处理的业务请求的最大数量(即第三流控额度q),因此,该服务实例可以继续处理该接收到的业务请求,故执行步骤12。
而该服务实例若判断出本地缓存的当前子窗口内的第三计数值c3大于或等于当前子窗口对应的第三流控额度q时,表明该服务实例在当前子窗口对应的当前时间周期内(例如当前200毫秒内),已接收处理的业务请求的数量(即第三计数值c3)已达到或者超过该服务实例在当前子窗口内对应的当前时间周期内可以接收处理的业务请求的最大数量(即第三流控额度q),因此执行步骤11,进一步判断当前滑动窗口内的第一计数值c1是否第一流控额度qs。
在一些实施例中,该服务实例在按照预设的业务逻辑处理该业务请求后,可以将本地缓存的当前子窗口内的第三计数值c3进行加1处理,更新当前子窗口内的第三计数值c3,即更新该服务实例在当前子窗口对应的当前时间周期内已接收处理的业务请求的数量。同时,在更新当前子窗口内的第三计数值c3之后,还可以向全局流控节点请求同步更新计数,从而使得全局流控节点可以同步更新其缓存的当前子窗口内的第四计数值C4,即更新全局(所有服务实例)在当前子窗口对应的当前时间周期内已接收处理的业务请求的数量,从而能够保证流量控制的准确性,避免流量控制的误差过大的问题。为有效减小服务实例的流量计数与全局流控节点的流量计数之间的误差,本公开实施例还提供一种流量控制方法,图4为本公开实施例提供的又一种流量控制方法的流程图,如图4所示,本公开实施例所提供的流量控制方法与前述实施例所提供的流量控制方法的不同之处在于,在本公开实施例中,在步骤12之后,还包括:
步骤121、该服务实例将本地缓存的当前子窗口内的第三计数值进行加1处理,以更新当前子窗口内的第三计数值和当前滑动窗口内的第一计数值。
在步骤121中,该服务实例在按照预设的业务逻辑处理该接收到的业务请求之后,将本地缓存的当前子窗口内的第三计数值c3进行加1处理,令c3=c3+1,以更新当前子窗口内的第三计数值c3,即更新该服务实例在当前子窗口对应的当前时间周期内已接收处理的业务请求的数量。
由于该服务实例在本地缓存的当前滑动窗口的各子窗口内的第三计数值c3之和等于所述当前滑动窗口内的第一计数值c1,因此,在当前子窗口内的第三计数值c3更新后,相应的当前滑动窗口内的第一计数值c1也自动更新。
步骤122、该服务实例判断当前子窗口内的第三计数值与当前子窗口对应的已同步值的差值,是否大于或等于预设阈值,若是,执行步骤123,否则等待接收新的业务请求。
在本公开实施例中,当前预设阈值为当前子窗口对应的第三流控额度q与预设参数值m的乘积,其中,m∈(0,1]。在一些实施例中,m为0.2、0.4、0.6、0.8或者1。
在本公开实施例中,滑动窗口的各个子窗口预先对应设置有一个已同步值sd,在当前子窗口的初始状态下(可以理解为服务实例在当前子窗口对应的当前时间周期内未接收到一个业务请求时的状态),当前子窗口内的第三计数值c3为0,该已同步值sd=0。当当前子窗口内的第三计数值c3开始更新增加时,在每次请求同步更新计数之后,都会令该已同步值sd等于当前子窗口内的第三计数值c3。
在本公开实施例中,预设阈值为触发向全局流控节点请求同步更新计数的阈值。在步骤122中,该服务实例当判断出当前子窗口内的第三计数值c3与当前子窗口对应的已同步值之差达到或超过触发向全局流控节点请求同步更新计数的阈值时,执行步骤123,否则,等待接收新的业务请求。
步骤123、该服务实例向全局流控节点发送同步更新计数请求,同步更新计数请求包括待同步值。
在步骤123中,当该服务实例判断出当前子窗口内的第三计数值c3达到或超过触发向全局流控节点请求同步更新计数的阈值时,该服务实例向全局流控节点发送同步更新计数请求,同步更新计数请求包括待同步值。其中,待同步值s等于当前子窗口内的第三计数值c3和当前子窗口对应的第三流控额度q中的最小值min(c3,q)与当前子窗口对应的已同步值sd之差,即s=min(c3,q)-sd。
步骤124、全局流控节点基于同步更新计数请求,根据缓存的当前子窗口内的第四计数值与待同步值之和,更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值。
在本公开实施例中,针对全局流控节点,第四计数值C4用于表示子窗口对应的时间周期内全局(所有服务实例)已接收处理的业务请求的数量。可以理解的是,全局流控节点缓存的当前子窗口内的第四计数值C4为全局流控节点缓存的当前子窗口所表示的当前时间周期内的第四计数值C4,即全局(所有服务实例)在当前子窗口对应的当前时间周期内已接收处理的业务请求的数量。
在当前子窗口的初始状态下,当前子窗口内的第四计数值C4为0。
在步骤124中,全局流控节点基于同步更新计数请求,根据缓存的当前子窗口内的第四计数值C4与待同步值s之和,更新缓存的当前子窗口内的第四计数值C4。具体地,全局流控节点令缓存的当前子窗口内的第四计数值C4等于当前子窗口内的第四计数值C4与待同步值s之和,即令C4=C4+s。
在本公开实施例中,全局流控节点缓存的当前滑动窗口的各子窗口内的第四计数值C4之和等于所述当前滑动窗口内的第二计数值C2。因此,当全局流控节点缓存的当前子窗口内的第四计数值C4更新时,全局流控节点缓存的当前滑动窗口内的第二计数值C2也将自动更新。
在本公开实施例中,全局流控节点可以使用incr命令,根据缓存的当前子窗口内的第四计数值C4与待同步值s之和,更新缓存的当前子窗口内的第四计数值C4。
步骤125、该服务实例令本地缓存的当前子窗口对应的已同步值等于当前子窗口内的第三计数值,更新本地缓存的当前子窗口对应的已同步值,并等待接收新的业务请求。
在步骤125中,在同步更新计数请求完成后,该服务实例令本地缓存的当前子窗口对应的已同步值sd等于当前子窗口内的第三计数值c3,更新本地缓存的当前子窗口对应的已同步值sd,并等待接收新的业务请求。
在本公开实施例中,各服务实例通过步骤121至步骤125的同步更新技术策略,使得全局流控节点计算更新当前子窗口内的第四计数值的误差能够保持在20%以内,从而提高了流量控制的准确性,避免流量控制的误差过大的问题。
图5为本公开实施例提供的再一种流量控制方法的流程图,如图5所示,本公开实施例所提供的流量控制方法与前述实施例所提供的流量控制方法的不同之处在于,在本公开实施例中,在步骤10之前,还包括:
步骤101、针对每个服务实例,该服务实例在接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值与当前滑动窗口对应的已同步值之差,是否小于本地预先缓存的全局剩余流控额度,若是,执行步骤10,否则返回业务请求失败消息。
在本公开实施例中,当前滑动窗口对应的已同步值SD为当前滑动窗口的各子窗口分别对应的已同步值sd之和。关于当前滑动窗口内的第一计数值c1和当前滑动窗口的各子窗口分别对应的已同步值sd的描述可见上述实施例的描述,此处不再赘述。
在本公开实施例中,各服务实例在本地预先缓存有全局剩余流控额度Qa,其中全局剩余流控额度Qa等于本地预先缓存的第二流控额度Qs与当前滑动窗口内的第二计数值C2之差。在初始状态下,C2=0,全局剩余流控额度Qa等于前述全局流控节点对应的第二流控额度Qs。当本地预先缓存的当前滑动窗口内的第二计数值C2开始更新后,全局剩余流控额度Qa随着缓存的第二计数值C2的更新而更新。其中,全局剩余流控额度可以理解为全局(所有服务实例)当前还可以接收处理的业务请求的最大数量。
在步骤101中,针对每个服务实例,该服务实例在接收到业务请求时,首先判断本地缓存的当前滑动窗口内的第一计数值c1与当前滑动窗口对应的已同步值SD之差,是否小于本地预先缓存的全局剩余流控额度,若是,则执行步骤10,进一步本地缓存的当前子窗口内的第三计数值c3是否小于当前子窗口对应的第三流控额度q,否则表明全局所有服务实例当前已接收处理的业务请求的总数量(各服务实例的当前滑动窗口内的第一计数值c1之和)已达到甚至超过全局的流控额度(第二流控额度Qs),为保证业务***的性能,各服务实例在当前滑动窗口对应的当前时间段内不能再接收处理业务请求,故该服务实例返回业务请求失败消息。
图6为本公开实施例提供的再一种流量控制方法的流程图,如图6所示,本公开实施例所提供的流量控制方法与前述实施例所提供的流量控制方法的不同之处在于,在本公开实施例中,在步骤15之后,还包括:
步骤151、全局流控节点将缓存的当前子窗口内的第四计数值进行加1处理,以更新当前子窗口内的第四计数值和当前滑动窗口内的第二计数值。
在步骤151中,全局流控节点在向该服务实例反馈业务处理指令之后,将缓存的当前子窗口内的第四计数值C4进行加1处理,相应的,当前滑动窗口内的第二计数值C2也将自动加1,从而更新当前子窗口内的第四计数值C4和当前滑动窗口内的第二计数值C2。
在本公开实施例中,全局流控节点可以使用incr命令将缓存的当前子窗口内的第四计数值进行加1处理,以更新当前子窗口内的第四计数值和当前滑动窗口内的第二计数值。
步骤152、全局流控节点向该服务实例发送更新后的当前滑动窗口内的第二计数值。
在步骤152中,全局流控节点向该服务实例发送更新后的当前滑动窗口内的第二计数值C2,以供该服务实例更新本地预先缓存的当前滑动窗口内的第二计数值C2。
在本公开实施例中,全局流控节点可以通过mget命令,将更新后的当前滑动窗口内的第二计数值返回给该服务实例。
步骤153、该服务实例根据接收到的当前滑动窗口内的第二计数值,更新本地预先缓存的全局剩余流控额度。
具体地,该服务实例根据接收到步骤152中全局流控节点发送的当前滑动窗口内的第二计数值C2后,更新本地预先缓存的第二计数值C2,而后根据本地缓存的第二流控额度Qs与当前滑动窗口内的第二计数值C2之差,更新本地预先缓存的全局剩余流控额度Qa。
步骤154、该服务实例将本地缓存的当前子窗口内的第三计数值进行加1处理,更新当前子窗口内的第三计数值,并等待接收新的业务请求。
在步骤154中,该服务实例将本地缓存的当前子窗口内的第三计数值c3进行加1处理,更新当前子窗口内的第三计数值c3,并更新当前滑动窗口内的第一计数值c1,同时,等待接收新的业务请求。
在本公开实施例中,上述步骤151至步骤154可以在步骤15之后执行,也可以在步骤16之后执行,本公开实施例对此不作限制。
图7为本公开实施例提供的再一种流量控制方法的流程图,如图6所示,本公开实施例所提供的流量控制方法与前述实施例所提供的流量控制方法的不同之处在于,在本公开实施例中,在步骤124之后,还包括:
步骤1241、全局流控节点向该服务实例发送更新后的当前滑动窗口内的第二计数值。
在步骤1241中,全局流控节点向该服务实例发送更新后的当前滑动窗口内的第二计数值C2,以供该服务实例更新本地预先缓存的当前滑动窗口内的第二计数值C2。
在本公开实施例中,全局流控节点可以通过mget命令,将更新后的当前滑动窗口内的第二计数值返回给该服务实例。
步骤1242、该服务实例根据接收到的当前滑动窗口内的第二计数值,更新本地预先缓存的全局剩余流控额度。
具体地,该服务实例根据接收到步骤1241中全局流控节点发送的当前滑动窗口内的第二计数值C2后,更新本地预先缓存的第二计数值C2,而后根据本地缓存的第二流控额度Qs与当前滑动窗口内的第二计数值C2之差,更新本地预先缓存的全局剩余流控额度Qa。
在一些实施例中,在步骤124之后,还包括:
步骤1243、该服务实例将预设的同步请求计数器的当前计数值进行加1处理。
在一些实施例中,各服务实例上预先设置同步请求计数器,该同步请求计数器用于对该服务实例发送的同步更新计数请求进行计数。在步骤1243中,在向全局流控节点发送同步更新计数请求之后,服务实例将将预设的同步请求计数器的当前计数值进行加1处理。其中,同步请求计数器的当前计数值用于表示该服务实例当前已发送同步更新计数请求的数量。在初始化状态下,该同步请求计数器的计数值为0。
步骤1244、该服务实例判断同步请求计数器的当前计数值是否大于或等于第二预设阈值,若是,阻塞新的业务请求,直至全局流控节点完成同步更新计数,否则执行步骤125。
其中,第二预设阈值可以根据实际需要进行设置,在一些实施例中,第二预设阈值可以设置为2,在一些实施例中,第二预设阈值还可以设置为1等,第二预设阈值一般不超过2。在步骤1244中,该服务实例判断同步请求计数器的当前计数值是否大于或等于第二预设阈值,若判断出同步请求计数器的当前计数值大于或等于第二预设阈值时,阻塞新的业务请求,直至全局流控节点完成令牌同步扣除,即判断出同步请求计数器的当前计数值大于或等于第二预设阈值时,该服务实例当前将不接收处理新的业务请求,直至全局流控节点完成同步更新计数,当全局流控节点完成同步更新计数后,该服务实例将同步请求计数器的当前计数器进行清零处理,而后执行步骤125。
在极端情况下,在短时间内,若一个服务实例接收的业务请求量很大,而其他服务实例接收的业务请求量都很小,假设接收的业务请求量大的服务实例实际已经用完全局的流控额度Qs,但其他服务实例由于未能及时进行同步更新计数,使得本地缓存的第二计数值C2没有及时得到更新,那么本地缓存的全局剩余流控额度Qa的值可能仍然很大,这时当其他服务实例接收到大量业务请求时,将会导致全局接收业务请求的量将达到接近全局的流控额度Qs的两倍的状态,甚至远远超过全局的流控额度Qs。为避免这种现象发生,本公开实施例通过在步骤124之后,执行步骤1243和步骤1244,这样就可以及时通过全局流控节点获取并更新本地缓存的第二计数值C2,避免大量的超额使用现象发生。
为避免上述现象发生,在一些实施例中,针对每个服务实例,该服务实例还可以维护一个同步更新计数请求的状态集,每次请求同步更新计数时,该服务实例都会在状态集中记录一个请求中的标记,在请求完成后移除标记。如果状态集中请求中的标记的数量大于第二预设阈值(一般不超过2)时,则阻塞新的业务请求的处理,等待全局流控节点完成同步更新计数后再释放,这样就可以及时通过全局流控节点获取并更新本地缓存的第二计数值,避免大量的超额使用现象发生。
在一些实施例中,在分布式环境下,各服务实例均在本地设置有超额流控装置,超额流控装置对应的流控额度设置为Qs*1.2/n,其中,n为服务实例的数量,Qs为全局的流控额度。当全局流控节点出现故障导致不可用时,服务实例在接收到业务请求时,若判断出本地缓存的当前滑动窗口内的第一计数值c1大于或等于第一流控额度qs时,该服务实例可以通过请求超额流控装置进行流量控制,超额流控装置代替全局流控节点进行流量控制。
在一些实施例中,通过外部的注册中心来监控各服务实例的健康状态,当服务实例出现宕机时,通过注册中心向其他存活的各服务实例和全局流控节点下发当前存活的服务实例总数,通知存活的服务实例调整本地流控额度qs,即第一流控额度qs。例如,假设全局的流控额度为Qs,服务实例的总数量为n,当所有服务实例均正常时,各服务实例的本地流控额度为qs=Qs/n=第一流控额度;而当注册中心监控到有1个服务实例宕机时,注册中心向其他存活的服务实例下发当前存活的服务实例的总数量为n-1,则各存活的服务实例根据当前存活的服务实例的总数量n-1更新本地流控额度qs=Qs/(n-1),相应的,各子窗口对应的第三流控额度q也将被调整。
图8为本公开实施例提供的流量控制方法的一种应用示意图,如图8所示,在一种示例性的应用场景中,服务实例的数量为2,该2个服务实例分别为服务实例1和服务实例2,图8示出了各服务实例和全局流控节点在当前滑动窗口对应的时间段内的计数情况,在图8所示的应用场景中,滑动窗口包括5个子窗口,全局的流控额度(即第二流控额度)Qs为100,服务实例1和服务实例2对应的本地流控额度(即第一流控额度)qs均为50,各子窗口对应的第三流控额度q为10。
如图8所示,针对服务实例1,当该服务实例1在接收到新的业务请求时,由于在当前滑动窗口对应的时间段内,各子窗口内的第三计数值c3均未超出对应的第三流控额度q,当前滑动窗口内的第一计数值c1也未超出第一流控额度qs,因此,可直接让该业务请求通过,按照预设的业务逻辑处理该业务请求,并在处理该业务请求后,更新当前子窗口对应的第三计数值c3,同时,判断当前子窗口对应的第三计数值c3与对应的已同步值sd的差值是否达到或超过预设阈值,其中,预设阈值设置为2,并在判断出达到或超过预设阈值后,向全局流控节点请求同步更新计数,以使全局流控节点更新当前子窗口内的第四计数值C4。
如图8所示,针对服务实例2,在服务实例2中,由于当前子窗口对应的第三计数值c3=9与对应的已同步值sd=8的差值为1,未达到预设阈值2,因此,服务实例在当前子窗口对应的第三计数值c3等于9时没有向全局流控节点请求同步更新计数,因此,全局流控节点上当前子窗口内的第四计数值C4为8+4=12,而不是9+4=13。
当该服务实例2在当前子窗口对应的时间周期内接收到新的业务请求时,由于在当前滑动窗口对应的时间段内,各子窗口内的第三计数值c3均未超出对应的第三流控额度q,当前滑动窗口内的第一计数值c1也未超出第一流控额度qs,因此,可直接让该业务请求通过,按照预设的业务逻辑处理该业务请求,并在处理该业务请求后,更新当前子窗口对应的第三计数值c3,同时,判断当前子窗口对应的第三计数值c3与对应的已同步值sd的差值是否达到或超过预设阈值,其中,预设阈值设置为2,并在判断出达到或超过预设阈值后,向全局流控节点请求同步更新计数,以使全局流控节点更新当前子窗口内的第四计数值C4。
在图8所示的应用场景中,全局流控节点缓存的当前滑动窗口内的第二计数值C2为77,也未超出第二流控额度。需要说明的是,在图8中,超额数是指子窗口内的第三计数值c3超出第三流控额度q的数量,第三计数值c3未超出第三流控额度q时,对应的超额数记为0。
图9为本公开实施例提供的流量控制方法的另一种应用示意图,如图9所示,在一种示例性的应用场景中,服务实例的数量为2,该2个服务实例分别为服务实例1和服务实例2,图9示出了各服务实例和全局流控节点在当前滑动窗口对应的时间段内的计数情况,在图9所示的应用场景中,滑动窗口包括5个子窗口,全局的流控额度(即第二流控额度)Qs为100,服务实例1和服务实例2对应的本地流控额度(即第一流控额度)qs均为50,各子窗口对应的第三流控额度q为10。
如图9所示,针对服务实例1,当服务实例1在当前子窗口对应的时间周期内接收到新的业务请求时,由于本地缓存的当前滑动窗口内的第二计数值C2已达到100,即全局剩余流控额度已为0,当前子窗口内的第三计数值c3与已同步值sd的差值已超过全局剩余流控额度,因此,服务实例1将拒绝该业务请求,返回业务请求失败消息。
在服务实例1中,由于当前子窗口对应的第三计数值c3=10与对应的已同步值sd=8的差值为2,等于预设阈值2,触发同步更新计数,故向全局流控节点请求同步更新计数,当同步更新计数完成时,全局流控节点上当前子窗口内的第四计数值C4将由26变为28。此时,全局流控节点上,当前滑动窗口内第二计数值C2将由100变为102,即超额2个。
如图9所示,针对服务实例2,当服务实例2在当前子窗口对应的时间周期内接收到新的业务请求时,由于本地缓存的当前滑动窗口内的第二计数值C2已达到100,即全局剩余流控额度已为0,当前子窗口内的第三计数值c3与已同步值sd的差值已超过全局剩余流控额度,因此,服务实例1将拒绝该业务请求,返回业务请求失败消息。
本公开实施例所提供的流量控制方法,在性能方面,在流量(业务请求量)未超过本地流控阈值(第一流控额度qs)时,能够充分利用本地流控的优势进行流量控制,从而达到较高的流量控制的性能;在可用性方面,流量控制不完全依赖全局流控节点(redis服务器),不管是全局流控节点(redis服务器)故障还是服务实例故障,都能有相应的容错措施,有效避免了全局流控节点(redis服务器)故障导致业务***的不可用现象,可大幅提升流量控制的可用性;在准确性方面,超出本地流控阈值(第一流控额度qs)的流量将通过全局流控节点进行流量控制,通过分布式令牌桶算法的设计,能够将超出约定值(第二流控额度Qs)的部分控制在20%以内,属于可接受范围。因此,本公开实施例所提供的流量控制方法,保证了较高的性能和可用性,并将准确性控制在合理的范围内,能够全面支持业务生成环境使用。
图10为本公开实施例提供的一种流量控制装置的结构示意图,如图10所示,该流量控制装置用于实现上述任一实施例所提供的流量控制方法,该流量控制装置包括:接收模块201、判断模块202、业务处理模块203和发送模块204。
其中,接收模块201用于接收业务请求。
判断模块202用于在接收模块201接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度;其中,所述滑动窗口用于表示时间段。
业务处理模块203用于在判断模块202判断出本地缓存的当前滑动窗口内的第一计数值小于预设的第一流控额度时,按照预设的业务逻辑处理所述业务请求。
发送模块204用于在判断模块202判断出本地缓存的当前滑动窗口内的第一计数值大于或等于预设的第一流控额度时,向全局流控节点发送超额流控请求,以供全局流控节点根据超额流控请求,判断缓存的当前滑动窗口内的第二计数值是否小于预设的第二流控额度。
业务处理模块203还用于接收全局流控节点在判断出缓存的当前滑动窗口内的第二计数值小于预设的第二流控额度时发送的业务处理指令;基于所述业务处理指令,按照预设的业务逻辑处理所述业务请求。
在一些实施例中,滑动窗口包括至少两个子窗口,时间段包括至少两个时间周期,每个子窗口对应一个时间周期,每个子窗口对应一个预设的第三流控额度,各子窗口对应的第三流控额度之和等于所述第一流控额度。
判断模块202还用于在判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度之前,判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度,其中,本地缓存的当前滑动窗口内的各子窗口的第三计数值之和等于当前滑动窗口内的第一计数值;若判断出本地缓存的当前子窗口内的第三计数值大于或等于当前子窗口对应的第三流控额度时,执行判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度的步骤。
业务处理模块203还用于若判断模块202判断出本地缓存的当前子窗口内的第三计数值小于当前子窗口对应的第三流控额度时,按照预设的业务逻辑处理所述业务请求。
在一些实施例中,该流量控制装置还包括第一计数模块205和本地同步值更新模块206。其中,第一计数模块205用于在业务处理模块203按照预设的业务逻辑处理所述业务请求之后,将本地缓存的当前子窗口内的第三计数值进行加1处理,更新当前子窗口内的第三计数值和当前滑动窗口内的第一计数值。
判断模块202还用于判断当前子窗口内的第三计数值与当前子窗口对应的已同步值的差值是否大于或等于预设阈值。
发送模块204还用于若判断模块202判断出当前子窗口内的第三计数值与当前子窗口对应的已同步值的差值大于或等于预设阈值时,向全局流控节点发送同步更新计数请求,同步更新计数请求包括待同步值,以供全局流控节点基于同步更新计数请求,根据缓存的当前子窗口内的第四计数值与所述待同步值之和,更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值;其中,待同步值等于当前子窗口内的第三计数值和当前子窗口对应的第三流控额度中的最小值与当前子窗口对应的已同步值之差,全局流控节点缓存的当前滑动窗口的各子窗口内的第四计数值之和等于当前滑动窗口内的第二计数值。
本地同步值更新模块206用于在发送模块204向全局流控节点发送同步更新计数请求之后,令本地缓存的当前子窗口对应的已同步值等于当前子窗口内的第三计数值,更新本地缓存的当前子窗口对应的已同步值,并触发接收模块201等待接收新的业务请求。
在一些实施例中,该流量控制装置还包括第一缓存模块207,第一缓存模块207用于在发送模块204向所述全局流控节点发送同步更新计数请求之后,接收全局流控节点在更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值之后发送的当前滑动窗口内的第二计数值;根据当前滑动窗口内的第二计数值,更新本地缓存的全局剩余流控额度,其中,本地预先缓存的全局剩余流控额度等于本地预先缓存的第二流控额度与当前滑动窗口内的第二计数值之差。
在一些实施例中,全局流控节点在发送业务处理指令之后,将缓存的当前子窗口内的第四计数值进行加1处理,以更新当前子窗口内的第四计数值和当前滑动窗口内的第二计数值。
在一些实施例中,该流量控制装置还包括第二缓存模块208和第二计数模块209。
其中,第二缓存模块208用于接收全局流控节点在将缓存的当前子窗口内的第四计数值进行加1处理,以更新当前子窗口内的第四计数值和当前滑动窗口内的第二计数值之后发送的当前滑动窗口内的第二计数值;根据当前滑动窗口内的第二计数值,更新本地预先缓存的全局剩余流控额度,其中,本地预先缓存的全局剩余流控额度等于本地缓存的第二流控额度与当前滑动窗口内的第二计数值之差。
第二计数模块209用于将本地缓存的当前子窗口内的第三计数值进行加1处理,更新当前子窗口内的第三计数值和当前子窗口内的第一计数值,并触发接收模块201等待接收新的业务请求。
在一些实施例中,判断模块202还用于在判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度之前,判断本地缓存的当前滑动窗口内的第一计数值与当前滑动窗口对应的已同步值之差,是否小于本地缓存的全局剩余流控额度;若判断出本地缓存的当前滑动窗口内的第一计数值与当前滑动窗口对应的已同步值之差,小于本地缓存的全局剩余流控额度时,执行判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度的步骤。
此外,本公开实施例所提供的流量控制装置,用于实现前述任一实施例所提供的流量控制方法,其他具体描述可参见前述任一实施例的描述,此处不再赘述。
图11为本公开实施例提供的一种流量控制***的结构示意图,如图11所示,该流量控制***用于实现上述任一实施例所提供的流量控制方法,该流量控制***包括:多个服务实例301和全局流控节点302,其中,服务实例401包括上述实施例所提供的流量控制装置。
关于该流量控制装置的具体描述可参见上述实施例中对流量控制装置的描述,此处不再赘述。
此外,本公开实施例所提供的流量控制***具体用于实现前述流量控制方法,具体可参见前述流量控制方法的描述,此处不再赘述。
本公开实施例还提供了一种服务器,该服务器包括:一个或多个处理器以及存储装置;其中,存储装置上存储有一个或多个程序,当上述一个或多个程序被上述一个或多个处理器执行时,使得上述一个或多个处理器实现前述任一实施例所述的流量控制方法。
本公开实施例还提供了一计算机可读存储介质,其上存储有计算机程序,其中,该计算机程序被执行时实现前述任一实施例所述的流量控制方法。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、***、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
本文已经公开了示例实施例,并且虽然采用了具体术语,但它们仅用于并仅应当被解释为一般说明性含义,并且不用于限制的目的。在一些实例中,对本领域技术人员显而易见的是,除非另外明确指出,否则可单独使用与特定实施例相结合描述的特征、特性和/或元素,或可与其他实施例相结合描述的特征、特性和/或元件组合使用。因此,本领域技术人员将理解,在不脱离由所附的权利要求阐明的本公开的范围的情况下,可进行各种形式和细节上的改变。
Claims (17)
1.一种流量控制方法,其中,在分布式环境下,针对每个服务实例,将该服务实例对应的流控额度称为第一流控额度,将全局流控节点对应的流控额度称为第二流控额度,该方法包括:
在当前服务实例接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度;其中,所述滑动窗口用于表示时间段;其中,所述第一计数值表示滑动窗口对应的时间段内,当前服务实例已接收处理的业务请求的数量;
若判断出本地缓存的当前滑动窗口内的第一计数值小于预设的第一流控额度时,按照预设的业务逻辑处理所述业务请求;
若判断出本地缓存的当前滑动窗口内的第一计数值大于或等于预设的第一流控额度时,向全局流控节点发送超额流控请求,以供所述全局流控节点根据超额流控请求,判断缓存的当前滑动窗口内的第二计数值是否小于预设的第二流控额度;所述第二计数值表示滑动窗口对应的时间段内所有服务实例已接收处理的业务请求的数量;
接收所述全局流控节点在判断出缓存的当前滑动窗口内的第二计数值小于预设的第二流控额度时发送的业务处理指令;
基于所述业务处理指令,按照预设的业务逻辑处理所述业务请求;其中,所述滑动窗口包括至少两个子窗口,所述时间段包括至少两个时间周期,每个子窗口对应一个时间周期,每个子窗口对应一个预设的第三流控额度,各子窗口对应的第三流控额度之和等于所述第一流控额度。
2.根据权利要求1所述的流量控制方法,所述在接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度之前,还包括:
在接收到业务请求时,判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度;其中,本地缓存的当前滑动窗口内的各子窗口的第三计数值之和等于当前滑动窗口内的第一计数值;若判断出本地缓存的当前子窗口内的第三计数值小于当前子窗口对应的第三流控额度时,按照预设的业务逻辑处理所述业务请求;若判断出本地缓存的当前子窗口内的第三计数值大于或等于当前子窗口对应的第三流控额度时,执行所述判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度的步骤。
3.根据权利要求2所述的流量控制方法,其中所述若判断出本地缓存的当前子窗口内的第三计数值小于当前子窗口对应的第三流控额度时,按照预设的业务逻辑处理所述业务请求之后,以及所述若判断出本地缓存的当前滑动窗口内的第一计数值小于预设的第一流控额度时,按照预设的业务逻辑处理所述业务请求之后,还包括:
将本地缓存的当前子窗口内的第三计数值进行加1处理,更新当前子窗口内的第三计数值和当前滑动窗口内的第一计数值;
判断当前子窗口内的第三计数值与当前子窗口对应的已同步值的差值是否大于或等于预设阈值;
若判断出当前子窗口内的第三计数值与当前子窗口对应的已同步值的差值大于或等于预设阈值时,向所述全局流控节点发送同步更新计数请求,所述同步更新计数请求包括待同步值,以供所述全局流控节点基于同步更新计数请求,根据缓存的当前子窗口内的第四计数值与所述待同步值之和,更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值;其中,所述待同步值等于当前子窗口内的第三计数值和当前子窗口对应的第三流控额度中的最小值与当前子窗口对应的已同步值之差,全局流控节点缓存的当前滑动窗口的各子窗口内的第四计数值之和等于当前滑动窗口内的第二计数值;
令本地缓存的当前子窗口对应的已同步值等于当前子窗口内的第三计数值,更新本地缓存的当前子窗口对应的已同步值,并等待接收新的业务请求。
4.根据权利要求3所述的流量控制方法,其中所述向所述全局流控节点发送同步更新计数请求之后,还包括:
接收所述全局流控节点在更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值之后发送的当前滑动窗口内的第二计数值;
根据当前滑动窗口内的第二计数值,更新本地缓存的全局剩余流控额度,其中,本地预先缓存的全局剩余流控额度等于本地预先缓存的第二流控额度与当前滑动窗口内的第二计数值之差。
5.根据权利要求2所述的流量控制方法,其中所述全局流控节点在发送业务处理指令之后,将缓存的当前子窗口内的第四计数值进行加1处理,以更新当前子窗口内的第四计数值和当前滑动窗口内的第二计数值。
6.根据权利要求5所述的流量控制方法,其中所述流量控制方法还包括:
接收所述全局流控节点在更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值之后发送的当前滑动窗口内的第二计数值;
根据所述当前滑动窗口内的第二计数值,更新本地预先缓存的全局剩余流控额度,其中,本地预先缓存的全局剩余流控额度等于本地缓存的第二流控额度与当前滑动窗口内的第二计数值之差;
将本地缓存的当前子窗口内的第三计数值进行加1处理,更新当前子窗口内的第三计数值和当前子窗口内的第一计数值,并等待接收新的业务请求。
7.根据权利要求4或6所述的流量控制方法,其中所述在接收到业务请求时,判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度之前,还包括:
在接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值与当前滑动窗口对应的已同步值之差,是否小于本地缓存的全局剩余流控额度;
若判断出本地缓存的当前滑动窗口内的第一计数值与当前滑动窗口对应的已同步值之差,小于本地缓存的全局剩余流控额度时,执行判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度的步骤。
8.一种流量控制装置,其中,在分布式环境下,针对每个服务实例,将该服务实例对应的流控额度称为第一流控额度,将全局流控节点对应的流控额度称为第二流控额度,该装置包括:
接收模块,用于接收业务请求;
判断模块,用于在所述接收模块接收到业务请求时,判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度;其中,所述滑动窗口用于表示时间段;其中,所述第一计数值表示滑动窗口对应的时间段内,当前服务实例已接收处理的业务请求的数量;
业务处理模块,用于在所述判断模块判断出本地缓存的当前滑动窗口内的第一计数值小于预设的第一流控额度时,按照预设的业务逻辑处理所述业务请求;
发送模块,用于在所述判断模块判断出本地缓存的当前滑动窗口内的第一计数值大于或等于预设的第一流控额度时,向全局流控节点发送超额流控请求,以供所述全局流控节点根据超额流控请求,判断缓存的当前滑动窗口内的第二计数值是否小于预设的第二流控额度;所述第二计数值表示滑动窗口对应的时间段内所有服务实例已接收处理的业务请求的数量;
所述业务处理模块还用于接收所述全局流控节点在判断出缓存的当前滑动窗口内的第二计数值小于预设的第二流控额度时发送的业务处理指令;基于所述业务处理指令,按照预设的业务逻辑处理所述业务请求;其中所述滑动窗口包括至少两个子窗口,所述时间段包括至少两个时间周期,每个子窗口对应一个时间周期,每个子窗口对应一个预设的第三流控额度,各子窗口对应的第三流控额度之和等于所述第一流控额度。
9.根据权利要求8所述的流量控制装置,其中,所述判断模块还用于在判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度之前,判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度,其中,本地缓存的当前滑动窗口内的各子窗口的第三计数值之和等于当前滑动窗口内的第一计数值;若判断出本地缓存的当前子窗口内的第三计数值大于或等于当前子窗口对应的第三流控额度时,执行所述判断本地缓存的当前滑动窗口内的第一计数值是否小于预设的第一流控额度的步骤;
所述业务处理模块还用于若所述判断模块判断出本地缓存的当前子窗口内的第三计数值小于当前子窗口对应的第三流控额度时,按照预设的业务逻辑处理所述业务请求。
10.根据权利要求9所述的流量控制装置,其中还包括第一计数模块和本地同步值更新模块;
所述第一计数模块用于在所述业务处理模块按照预设的业务逻辑处理所述业务请求之后,将本地缓存的当前子窗口内的第三计数值进行加1处理,更新当前子窗口内的第三计数值和当前滑动窗口内的第一计数值;
所述判断模块还用于判断当前子窗口内的第三计数值与当前子窗口对应的已同步值的差值是否大于或等于预设阈值;
所述发送模块还用于若所述判断模块判断出当前子窗口内的第三计数值与当前子窗口对应的已同步值的差值大于或等于预设阈值时,向所述全局流控节点发送同步更新计数请求,所述同步更新计数请求包括待同步值,以供所述全局流控节点基于同步更新计数请求,根据缓存的当前子窗口内的第四计数值与所述待同步值之和,更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值;其中,所述待同步值等于当前子窗口内的第三计数值和当前子窗口对应的第三流控额度中的最小值与当前子窗口对应的已同步值之差,全局流控节点缓存的当前滑动窗口的各子窗口内的第四计数值之和等于当前滑动窗口内的第二计数值;
所述本地同步值更新模块用于在所述发送模块向所述全局流控节点发送同步更新计数请求之后,令本地缓存的当前子窗口对应的已同步值等于当前子窗口内的第三计数值,更新本地缓存的当前子窗口对应的已同步值,并触发所述接收模块等待接收新的业务请求。
11.根据权利要求10所述的流量控制装置,其中还包括第一缓存模块,所述第一缓存模块用于在所述发送模块向所述全局流控节点发送同步更新计数请求之后,接收所述全局流控节点在更新缓存的当前子窗口内的第四计数值和当前滑动窗口内的第二计数值之后发送的当前滑动窗口内的第二计数值;根据当前滑动窗口内的第二计数值,更新本地缓存的全局剩余流控额度,其中,本地预先缓存的全局剩余流控额度等于本地预先缓存的第二流控额度与当前滑动窗口内的第二计数值之差。
12.根据权利要求9所述的流量控制装置,其中所述全局流控节点在发送业务处理指令之后,将缓存的当前子窗口内的第四计数值进行加1处理,以更新当前子窗口内的第四计数值和当前滑动窗口内的第二计数值。
13.根据权利要求12所述的流量控制装置,其中还包括第二缓存模块和第二计数模块;
所述第二缓存模块用于接收所述全局流控节点在将缓存的当前子窗口内的第四计数值进行加1处理,以更新当前子窗口内的第四计数值和当前滑动窗口内的第二计数值之后发送的当前滑动窗口内的第二计数值;根据所述当前滑动窗口内的第二计数值,更新本地预先缓存的全局剩余流控额度,其中,本地预先缓存的全局剩余流控额度等于本地缓存的第二流控额度与当前滑动窗口内的第二计数值之差;
所述第二计数模块用于将本地缓存的当前子窗口内的第三计数值进行加1处理,更新当前子窗口内的第三计数值和当前子窗口内的第一计数值,并触发所述接收模块等待接收新的业务请求。
14.根据权利要求11或13所述的流量控制装置,其中所述判断模块还用于在判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度之前,判断本地缓存的当前滑动窗口内的第一计数值与当前滑动窗口对应的已同步值之差,是否小于本地缓存的全局剩余流控额度;若判断出本地缓存的当前滑动窗口内的第一计数值与当前滑动窗口对应的已同步值之差,小于本地缓存的全局剩余流控额度时,执行判断本地缓存的当前子窗口内的第三计数值是否小于当前子窗口对应的第三流控额度的步骤。
15.一种流量控制***,包括多个服务实例和全局流控节点,所述服务实例包括权利要求8-14中任一所述流量控制装置。
16.一种服务器,包括:
一个或多个处理器;
存储装置,其上存储有一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1-7中任一所述的流量控制方法。
17.一种计算机可读介质,其上存储有计算机程序,其中,所述程序被处理器执行时实现如权利要求1-7中任一所述的流量控制方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910491605.8A CN110166376B (zh) | 2019-06-06 | 2019-06-06 | 流量控制方法及装置、***、服务器、计算机可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910491605.8A CN110166376B (zh) | 2019-06-06 | 2019-06-06 | 流量控制方法及装置、***、服务器、计算机可读介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110166376A CN110166376A (zh) | 2019-08-23 |
CN110166376B true CN110166376B (zh) | 2022-11-01 |
Family
ID=67628070
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910491605.8A Active CN110166376B (zh) | 2019-06-06 | 2019-06-06 | 流量控制方法及装置、***、服务器、计算机可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110166376B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110719337A (zh) * | 2019-10-23 | 2020-01-21 | 北京悠易网际科技发展有限公司 | 业务***、业务请求处理方法、装置及服务器 |
CN110896382B (zh) * | 2019-12-13 | 2023-06-30 | 北京奇艺世纪科技有限公司 | 流量控制方法、装置、设备和计算机可读存储介质 |
CN111010339B (zh) * | 2019-12-24 | 2021-11-30 | 象辑知源(武汉)科技有限公司 | 企业级高性能api服务网关设计方法 |
CN111352967B (zh) * | 2020-02-27 | 2024-02-06 | 携程旅游网络技术(上海)有限公司 | 滑动窗口算法的频次控制方法、***、设备及介质 |
CN111404828B (zh) * | 2020-03-11 | 2023-04-28 | 中国工商银行股份有限公司 | 实现全局流控的方法及装置 |
CN111580961B (zh) * | 2020-04-28 | 2023-12-26 | 北京达佳互联信息技术有限公司 | 访问请求处理方法、装置、服务器及存储介质 |
CN113301075B (zh) * | 2020-05-18 | 2022-09-13 | 阿里巴巴集团控股有限公司 | 流量控制方法、分布式***、设备及存储介质 |
CN111795706A (zh) * | 2020-06-29 | 2020-10-20 | 北京百度网讯科技有限公司 | 导航地图显示方法、装置、电子设备及存储介质 |
CN112600932B (zh) * | 2020-12-22 | 2023-04-07 | 百度在线网络技术(北京)有限公司 | 定量下发方法、控制台、下发节点、设备和介质 |
CN112615795A (zh) * | 2020-12-25 | 2021-04-06 | 北京百度网讯科技有限公司 | 流量控制方法、装置、电子设备、存储介质及产品 |
CN113765692B (zh) * | 2021-01-28 | 2024-05-21 | 北京京东拓先科技有限公司 | 限流方法、装置、电子设备和计算机可读介质 |
CN112819624B (zh) * | 2021-02-01 | 2024-04-16 | 上交所技术有限责任公司 | 一种适用于证券交易***的低时延分布式流控方法 |
CN114172902B (zh) * | 2021-11-12 | 2024-05-14 | 北京达佳互联信息技术有限公司 | 服务集群的流量控制方法及*** |
CN114745338A (zh) * | 2022-03-30 | 2022-07-12 | Oppo广东移动通信有限公司 | 流量控制方法、装置、存储介质以及服务器 |
CN114785739A (zh) * | 2022-04-22 | 2022-07-22 | 天津中科曙光存储科技有限公司 | 逻辑卷服务质量的控制方法、装置、设备及介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1209861A1 (en) * | 2000-11-22 | 2002-05-29 | Telefonaktiebolaget L M Ericsson (Publ) | Monitoring traffic in packet networks |
JP4749195B2 (ja) * | 2006-03-28 | 2011-08-17 | 京セラ株式会社 | 通信制御装置、無線通信装置、通信制御方法及び無線通信方法 |
US20080005391A1 (en) * | 2006-06-05 | 2008-01-03 | Bugra Gedik | Method and apparatus for adaptive in-operator load shedding |
CN103763208B (zh) * | 2014-01-29 | 2017-08-29 | 华为技术有限公司 | 数据流量限制方法及装置 |
CN107920095A (zh) * | 2016-10-08 | 2018-04-17 | 阿里巴巴集团控股有限公司 | 一种在p2p环境下发送方以及接收方流量限制的方法、装置 |
CN109257245B (zh) * | 2017-07-14 | 2022-04-29 | 阿里巴巴集团控股有限公司 | 流量监测、上传控制的方法及设备 |
CN114599070B (zh) * | 2017-08-11 | 2024-06-07 | 华为技术有限公司 | 一种数据传输方法、装置、***、网络设备及用户设备 |
-
2019
- 2019-06-06 CN CN201910491605.8A patent/CN110166376B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110166376A (zh) | 2019-08-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110166376B (zh) | 流量控制方法及装置、***、服务器、计算机可读介质 | |
CN110213173B (zh) | 流量控制方法及装置、***、服务器、计算机可读介质 | |
US11546644B2 (en) | Bandwidth control method and apparatus, and device | |
US9923965B2 (en) | Storage mirroring over wide area network circuits with dynamic on-demand capacity | |
CN110753131A (zh) | 微服务分布式限流方法及装置、存储介质和电子设备 | |
US6988156B2 (en) | System and method for dynamically tuning interrupt coalescing parameters | |
KR101871383B1 (ko) | 계층적 데이터 구조의 노드 상에서 재귀적 이벤트 리스너를 사용하기 위한 방법 및 시스템 | |
US10389801B2 (en) | Service request processing method, related apparatus, and system | |
KR102316397B1 (ko) | 추가-전용-파일 재기입들을 제어하기 위한 방법들, 시스템들 및 매체들 | |
CN113037794B (zh) | 计算资源配置调度方法、装置及*** | |
CN111158878B (zh) | 资源转移请求线程控制方法、装置及存储介质 | |
CN110069337B (zh) | 一种容灾降级的方法和装置 | |
CN113434337B (zh) | 重试策略的控制方法、装置及电子设备 | |
CN111352943A (zh) | 实现数据一致性的方法和装置、服务器和终端 | |
CN110661717A (zh) | 一种限流方法、装置及电子设备 | |
CN109726151B (zh) | 用于管理输入输出栈的方法、设备和介质 | |
US20200220786A1 (en) | Statistics increment for multiple publishers | |
CN114691547B (zh) | 部署实例的方法、实例管理节点、计算节点和计算设备 | |
CN114080790A (zh) | 用于提供带有性能路由测量的双向转发检测的***和方法 | |
CN112383486A (zh) | 基于租约的分布式对象存储服务质量保证方法及*** | |
CN110838989A (zh) | 一种用于基于令牌进行网络限流的方法和装置 | |
WO2017177865A1 (en) | Distributed resource management method and system | |
CN112311671B (zh) | 向交换芯片下发聚合链路配置的方法、装置、介质及设备 | |
KR102212080B1 (ko) | 다수의 클라이언트의 주기적 픽스 요청을 위한 가변 간격 | |
CN110058866B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |