CN113691457B - 限流控制方法、装置、设备及存储介质 - Google Patents

限流控制方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN113691457B
CN113691457B CN202110913583.7A CN202110913583A CN113691457B CN 113691457 B CN113691457 B CN 113691457B CN 202110913583 A CN202110913583 A CN 202110913583A CN 113691457 B CN113691457 B CN 113691457B
Authority
CN
China
Prior art keywords
request
current limiting
period
instance
requests
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
Application number
CN202110913583.7A
Other languages
English (en)
Other versions
CN113691457A (zh
Inventor
陈林
圣赞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Unionpay Co Ltd
Original Assignee
China Unionpay Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by China Unionpay Co Ltd filed Critical China Unionpay Co Ltd
Priority to CN202110913583.7A priority Critical patent/CN113691457B/zh
Publication of CN113691457A publication Critical patent/CN113691457A/zh
Priority to PCT/CN2022/078759 priority patent/WO2023015869A1/zh
Priority to US18/682,057 priority patent/US20240267331A1/en
Application granted granted Critical
Publication of CN113691457B publication Critical patent/CN113691457B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/12Avoiding congestion; Recovering from congestion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/11Identifying congestion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/28Flow control; Congestion control in relation to timing considerations
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

本申请公开了一种限流控制方法、装置、设备及存储介质,属于数据处理领域。限流控制方法包括:响应于本次请求,获取本次请求的第一时间戳;获取预先创建的限流实例,限流实例包括N个存储块、实例请求总数、限流请求数量阈值、前次请求的存储块的标识、前次请求的第二时间戳和请求等待时间,N个存储块与预设的单位时长划分的N个子时长段一一对应,存储块存储有与存储块对应的子时长段中的请求数量,实例请求总数为各存储块存储的请求数量之和;根据第一时间戳与第二时间戳之间的间隔时长、单位时长以及限流请求数量阈值,更新限流实例;根据更新后的限流实例中的请求等待时间,确定是否限流。根据本申请实施例能够提高限流控制的精准度。

Description

限流控制方法、装置、设备及存储介质
技术领域
本申请属于数据处理领域,尤其涉及一种限流控制方法、装置、设备及存储介质。
背景技术
随着网络技术的普及,网络用户的数量逐渐增多。对应地,网络用户在网络中发出或接收的请求的数量也越来越大。
为了保证应用程序、网络系统等的稳定性和健壮性,需要对请求进行限流,以防业务处理发生堵塞。在现阶段,可利用计数器在时间窗口内进行计数,当该时间窗口内计数器计数大于限流阈值时,拒绝请求。
但现阶段对请求的限流控制比较粗糙,精确度较差,降低了限流效果。
发明内容
本申请实施例提供一种限流控制方法、装置、设备及存储介质,能够提高限流控制的精准度。
第一方面,本申请实施例提供一种限流控制方法,包括:响应于本次请求,获取本次请求的第一时间戳;获取预先创建的限流实例,限流实例包括N个存储块、实例请求总数、限流请求数量阈值、前次请求的存储块的标识、前次请求的第二时间戳和请求等待时间,其中,N个存储块与预设的单位时长划分的N个子时长段一一对应,N为大于1的整数,存储块存储有与存储块对应的子时长段中的请求数量,实例请求总数为各存储块存储的请求数量之和;根据第一时间戳与第二时间戳之间的间隔时长、单位时长以及限流请求数量阈值,更新限流实例;根据更新后的限流实例中的请求等待时间,确定是否限流。
第二方面,本申请实施例提供一种限流控制装置,包括:获取模块,用于响应于本次请求,获取本次请求的第一时间戳,以及用于获取预先创建的限流实例,限流实例包括N个存储块、实例请求总数、限流请求数量阈值、前次请求的存储块的标识、前次请求的第二时间戳和请求等待时间,其中,N个存储块与预设的单位时长划分的N个子时长段一一对应,N为大于1的整数,存储块存储有与存储块对应的子时长段中的请求数量,实例请求总数为各存储块存储的请求数量之和;处理模块,用于根据第一时间戳与第二时间戳之间的间隔时长、单位时长以及限流请求数量阈值,更新限流实例;限流模块,用于根据更新后的限流实例中的请求等待时间,确定是否限流。
第三方面,本申请实施例提供一种限流控制设备,包括:处理器以及存储有计算机程序指令的存储器;处理器执行计算机程序指令时实现第一方面的限流控制方法。
第四方面,本申请实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序指令,计算机程序指令被处理器执行时实现第一方面的限流控制方法。
本申请实施例提供一种限流控制方法、装置、设备及存储介质,限流实例包括N个存储块,每个存储块存储有该存储块对应的子时长段中的请求数量,子时长段由单位时长划分得到。获取本次请求的第一时间戳和限流实例。通过第一时间戳与限流实例中前次请求的第二时间戳的间隔时长和单位时长可确定本次请求与前次请求是否发生在一个单位时长内,从而根据间隔时长、单位时长和限流请求数量阈值来更新限流实例。更新后的存储块中存储的请求数量可表征本次请求所在的单位时长内的各子时长段中的请求数量。更新后的实例请求总数可表征本次请求所在的单位时长内的各子时长段中的请求数量之和,即表征本次请求所在的单位时长内的请求数量的总和。在更新后的存储块中存储的请求数量和更新后的实例请求总数的条件下的更新后的限流实例中的请求等待时间能够体现网络拥塞的程度。通过对限流实例的更新,完成了对更高精准度的子时长段内的请求数量的更新、由更高精确度的子时长段得到的本次请求最近的单位时长内的请求数量的总和的更新,以及请求等待时间的更新。根据能够体现网络拥塞程度的请求等待时间来确定是否限流,能够避免限流因控制粗糙引起的限流失效,提高了限流控制的精准度。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单的介绍,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的限流控制方法的一示例的应用场景示意图;
图2为本申请提供的限流控制方法的一实施例的流程图;
图3为本申请实施例提供的限流实例中组成元素的一示例的示意图;
图4为本申请提供的限流控制方法的另一实施例的流程图;
图5为本申请提供的限流控制方法的又一实施例的流程图;
图6为本申请实施例提供的限流控制的功能结构的一示例的示意图;
图7为本申请提供的限流控制装置的一实施例的结构示意图;
图8为本申请提供的限流控制装置的另一实施例的结构示意图;
图9为本申请提供的限流控制设备的一实施例的结构示意图。
具体实施方式
下面将详细描述本申请的各个方面的特征和示例性实施例,为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及具体实施例,对本申请进行进一步详细描述。应理解,此处所描述的具体实施例仅意在解释本申请,而不是限定本申请。对于本领域技术人员来说,本申请可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本申请的示例来提供对本申请更好的理解。
随着网络技术的普及,网络用户的数量逐渐增多。对应地,网络用户在网络中发出或接收的请求的数量也越来越大。而发出或接收请求的设备或系统处理能力和容量有限,大量的请求会造成网络堵塞。为了保证设备安装的应用程序、网络系统等的稳定性和健壮性,需要对请求进行限流。但现阶段的限流控制较为粗糙,限流精确度较差,在某些情况下会导致限流失效。例如,限流控制规则是每秒60个请求,以秒为单位计数,如果第1秒中前0.5秒即500毫秒中无请求,第1秒中后0.5秒中发生60个请求,第2秒中前0.5秒即500毫秒中发生60个请求,第2秒中后0.5秒中无请求。单看第1秒中的请求数量是符合上述限流规则的,单看第2秒中的请求数量也是符合上述限流规则的,但将第1秒和第2秒中发生的请求集中看待,就会发现第1秒中后0.5秒和第2秒中前0.5秒这一段时间实际是会发生网络堵塞的,但按照上述限流控制规则并不会对其进行限流,从而导致限流失效。
本申请实施例提供一种限流控制方法、装置、设备及存储介质,能够将单位时长划分为多个子时长段,设置限流实例中的存储块,以根据存储块统计每个子时长段中的请求数量、本次请求的时间戳、限流实例中记录的前次请求的时间戳、单位时长和限流请求数量阈值,来得到请求的请求等待时间,以根据请求等待时间,确定是否对本次请求进行限流。通过划分子时长段可将限流控制精细化,以提高限流控制的精确度,进而提高限流效果。
本申请实施例中的限流控制方法可应用于接收或发送请求的装置或设备,在此并不限定接收或发送请求的装置或设备的种类。例如,图1为本申请实施例提供的限流控制方法的一示例的应用场景示意图。如图1所示,终端设备11可与服务器12之间进行通信交互。终端设备11可接受用户的操作,向服务器12发送请求,服务器可接收请求。本申请实施例中的限流控制方法可应用于终端设备11,也可应用于服务器12,在此并不限定。在一些示例中,终端设备11与服务器12之间还可设置有其他装置或设备,本申请实施例中的限流控制方法也可应用于终端设备11与服务器12之间的其他装置和设备,在此并不限定。
本申请提供一种限流控制方法,可应用于限流控制装置或限流控制设备,在此并不限定。图2为本申请提供的限流控制方法的一实施例的流程图。如图2所示,该限流控制方法可包括步骤S201至步骤S204。
在步骤S201中,响应于本次请求,获取本次请求的第一时间戳。
可以在接收或发送本次请求的情况下,获取第一时间戳。第一时间戳为本次请求的时间戳,第一时间戳可表征本次请求的时间点。
在步骤S202中,获取预先创建的限流实例。
限流实例包括N个存储块、实例请求总数、限流请求数量阈值、前次请求的存储块的标识、前次请求的第二时间戳和请求等待时间。限流实例可以为线程级实例,即限流实例的宿主程序为线程程序,限流实例可被线程调用。限流实例也可也为进程级实例,即限流实例的宿主程序为进程程序,限流实例可被进程调用。限流实例的级别可根据限流场景和限流需求具体设置,在此并不限定。限流实例能够适应单体程序如终端设备的客户端程序,也可适应服务端的程序,能够实现单个通道的数据的流速控制,也能实现多个通道的数据的总的流速控制,使得限流控制的适用性更强、更广泛,也能够在不采用服务器/客户机架构即C/S架构或分布式架构等部署难度高的架构的基础上,实现限流控制,提高单体程序中限流控制的应用效率。
N个存储块与预设的单位时长划分的N个子时长段一一对应,即一个存储块与一个子时长段对应。N为大于1的整数。N个子时长段可首尾相连,使得任意一个时间点均可落到N个子时长段中的一个子时长段中。存储块存储有与存储块对应的子时长段中的请求数量。在一些示例中,N个存储块可以以数据块或链表的形式存在,在此并不限定。单位时长、子时长段的时长和N可根据具体场景和具体需求设定,在此并不限定。单位时长可为秒级别的时长、毫秒级别的时长或其他级别的时长,在此并不限定。子时长段的时长可为秒级别的时长、毫秒级别的时长或其他级别的时长,在此并不限定。在一些示例中,单位时长可为秒级时长,例如,单位时长为1秒。在一些示例中,子时长段的时长可为毫秒级的时长,例如,子时长段的时长可为10毫秒。又例如,子时长段的时长可为20毫秒。N个子时长段的时长之和为单位时长。在N个子时长段的时长均相等的情况下,子时长段的时长与N的乘积即为单位时长。也可先设置单位时长和子时长段的时长,将单位时长与子时长段的时长的比值作为N。
实例请求总数为各存储块存储的请求数量之和。
限流请求数量阈值为限流的请求数量的门限值。实例请求总数大于等于限流请求数量阈值,表示网络极有可能发生堵塞。实例请求总数小于限流请求数量阈值,表示网络较为通畅。
前次请求的存储块的标识为前次请求所处的子时长段对应的存储块的标识。存储块的标识用于标识存储块,在此并不限定存储块的标识的形式。在一些示例中,存储块的标识可包括存储块的索引,可通过索引快速查询到对应的存储块。随着时间点的变化,时间点对应的子时长段会发生变化。存储块的标识可根据对应的子时长段设置,随着时间点的变化,时间点所对应的存储块也会发生变化。例如,设单位时长为1秒,子时长段的时长为10毫秒,则将单位时长划分为了100个子时长段;设初始时间点为0,开始计时,时间点0毫秒至时间点10毫秒(不包括10毫秒)对应的存储块的标识为1,时间点10毫秒至时间点20毫秒(不包括20毫秒)对应的存储块的标识为2,……,依次类推,时间点980毫秒至时间点990毫秒(不包括990毫秒)对应的存储块的标识为99,时间点990毫秒至时间点1000毫秒(不包括1000毫秒)对应的存储块的标识为100,时间点1000毫秒即时间点1秒之后的时间点对应的存储块的标识循环从1至100;若时间点为21214微秒即21.214毫秒,时间点21214微秒对应的存储块的标识为3;若时间点为43358微秒即43.358毫秒,时间点43358微秒对应的存储块的标识为5。
第二时间戳为前次请求的时间戳,第二时间戳可表征前次请求的时间点。前次请求为本次请求的上一次请求。
请求等待时间为请求发送或接收之前应该等待的时长。例如,请求等待时间等于0,表示该请求不需等待,可直接发送或接收。请求等待时间大于0,表示该请求需要等待该请求等待时间后再发送或接收。
例如,图3为本申请实施例提供的限流实例中组成元素的一示例的示意图。如图3所示,限流实例可包括N个与毫秒级子时间段对应的存储块,存储块内的数字表示存储块内存储的对应的子时间段中的请求数量,存储块下方的数字为存储块的标识,存储块的标识为存储块的索引。索引为1的存储块存储的请求数量为7,索引为2的存储块存储的请求数量为6,其他存储块存储的请求数量均为0。限流实例包括本次请求的存储块的索引,本次请求的存储块的索引为2。限流实例包括实例请求总数,实例请求总数为13。限流实例包括限流请求数量阈值,限流请求数量阈值为200。限流实例包括第二时间戳,第二时间戳包括tv_sec和tv_usec,tv_sec表示秒,tv_usec表示微秒,tv_sec为1622471313,tv_usec表示21214微秒,即第二时间戳表征的时间点为1622471313秒21214微秒。限流实例包括请求等待时间,请求等待时间为0。
在步骤S203中,根据第一时间戳与第二时间戳之间的间隔时长、单位时长以及限流请求数量阈值,更新限流实例。
通过第一时间戳和第二时间戳,可以得到第一时间戳与第二时间戳之间的间隔时长,即前次请求与本次请求的间隔时长。通过间隔时长和单位时长可确定本次请求与前次请求是否发生在一个单位时长内,从而根据间隔时长、单位时长和限流请求数量阈值来更新限流实例。具体地,可更新限流实例中的存储块中存储的请求数量、实例请求总数、前次请求的存储块的标识、第二时间戳和请求等待时间。
更新后的存储块中存储的请求数量可表征本次请求所在的单位时长内的各子时长段中的请求数量。更新后的实例请求总数可表征本次请求所在的单位时长内的请求数量的总和,从而可结合限流请求数量阈值判断本次请求所在的单位时长内请求数量可能会引发的网络拥塞程度,网络拥塞程度可体现为更新后的请求等待时间。请求等待时间越长,表示网络拥塞程度越大,需要设置较长的请求等待时间,以缓解网络拥塞;请求等待时间越短,表示网络拥塞程度越小,设置较短的请求等待时间即可缓解网络拥塞;请求等待时间为0,表示网络较为畅通。其中,本次请求所在的单位时长是指将本次请求的时间点作为终点的单位时长。
在步骤S204中,根据更新后的限流实例中的请求等待时间,确定是否限流。
更新后的限流实例中的请求等待时间即更新后的请求等待时间能够体现网络拥塞的程度,可根据更新后的请求等待时间,结合场景和需求,进一步确定是否限流。这里的限流可包括多种方式,在此并不限定。例如,可按照请求等待时间等待,等待的时长达到请求等待时间的情况下,允许请求通过。又例如,直接丢弃请求。
是否限流的决定可以由限流实例的宿主程序执行,在此并不限定限流决定的执行方。
在本申请实施例中,限流实例包括N个存储块,每个存储块存储有该存储块对应的子时长段中的请求数量,子时长段由单位时长划分得到。调用限流实例,获取本次请求的第一时间戳。通过第一时间戳与限流实例中前次请求的第二时间戳的间隔时长和单位时长可确定本次请求与前次请求是否发生在一个单位时长内,从而根据间隔时长、单位时长和限流请求数量阈值来更新限流实例。更新后的存储块中存储的请求数量可表征本次请求所在的单位时长内的各子时长段中的请求数量。更新后的实例请求总数可表征本次请求所在的单位时长内的各子时长段中的请求数量之和,即表征本次请求所在的单位时长内的请求数量的总和。在更新后的存储块中存储的请求数量和更新后的实例请求总数的条件下的更新后的限流实例中的请求等待时间能够体现网络拥塞的程度。通过对限流实例的更新,完成了对更高精准度的子时长段内的请求数量的更新、由更高精确度的子时长段得到的本次请求最近的单位时长内的请求数量的总和的更新,以及请求等待时间的更新。根据能够体现网络拥塞程度的请求等待时间来确定是否限流,能够避免限流因控制粗糙引起的限流失效,提高了限流控制的精准度。
经过实际测试,将子时长段的时长设置为10毫秒,单位时长设置为1秒,即单位时长划分为100个子时长段,利用本申请实施例中的限流控制方法可实现数量为个位数级别至十万级别的限流请求数量阈值下的数据匀速控制目标,未出现限流失效。而且,子时长段设置为毫秒级别,单位时长设置为秒级别,能够平衡限流控制精度、限流控制资源消耗以及请求所对应的业务处理时间这三方面,达到更优的综合效果。
根据第一时间戳与第二时间戳的间隔时长与单位时长的比较结果的不同,更新限流实例的方法会有所不同。图4为本申请提供的限流控制方法的另一实施例的流程图。图4与图2的不同之处在于,图2中的步骤S203可具体细化为步骤S2031a至步骤S2035a,或者可具体细化为步骤S2031b至步骤S2035b。
在步骤S2031a中,在间隔时长小于或等于单位时长的情况下,将实例请求总数累计加一。
间隔时长小于或等于单位时长,表示本次请求和前次请求在同一单位时长内,实例请求总数需要增加本次请求的一次计数。需要说明的是,累计加一后的实例请求总数可作为更新后的限流实例中的实例请求总数,也可再次参与计算,将计算后得到的实例请求总数作为更新后的限流实例中的实例请求总数,更新后的限流实例中实例请求总数的获取还与后续步骤相关。
在步骤S2032a中,根据第一时间戳和第二时间戳,确定第一时间戳所在的第一目标子时长段和第二时间戳所在的第二目标子时长段。
第一目标子时长段即为第一时间戳所在的子时长段。第一时间戳可表征本次请求的时间点。第二目标子时长段即为第二时间戳所在的子时长段。第二时间戳可表征前次请求的时间点。
在一些示例中,时间点与存储块的标识相关,可利用时间点计算得到存储块的标识。存储块与子时长段具有对应关系,可利用存储块与子时长段的该对应关系、第一时间戳和第二时间戳,确定第一目标子时长段和第二目标子时长段。
在步骤S2033a中,将前次请求的存储块的标识更新为第一目标子时长段对应的存储块的标识。
对于下次请求而言,本次请求的存储块的标识相当于限流实例中的前次请求的存储块的标识。将限流实例中的前次请求的存储块的标识更新为第一目标子时长段对应的存储块的标识,即更新限流实例中的前次请求的存储块的标识。
在步骤S2034a中,根据第一目标子时长段、第二目标子时长段以及限流请求数量阈值,可更新实例请求总数、存储块中存储的请求数量和请求等待时间。
通过第一目标子时长段与第二目标子时长段的对比,可确定第一目标子时长段与第二目标子时长段的相对时间位置关系,进而可根据第一目标子时长段与第二目标子时长段的相对时间位置关系,确定更新后的实例请求总数、更新后的存储块中存储的请求数量和更新后的请求等待时间。
在步骤S2035a中,将第二时间戳更新为第一时间戳。
对于下次请求而言,本次请求的时间戳即第一时间戳相当于限流实例中的前次请求的时间戳即第二时间戳。将第二时间戳更新为第一时间戳,即为更新限流实例中的第二时间戳。
在步骤S2031b中,在间隔时长大于单位时长的情况下,将实例请求总数更新为一。
间隔时长大于单位时长,表示本次请求和前次请求不在同一单位时长内,则前次请求所在的单位时长所对应的限流实例中的相关信息,在本次请求所在的单位时长中是无效的,因此需要对限流实例进行更新。
具体地,前次请求所在的单位时长所对应的限流实例中实例请求总数清零,之后增加本次请求的一次计数,即将实例请求总数更新为一。
在步骤S2032b中,根据第一时间戳,确定第一时间戳所在的第一目标子时长段。
步骤S2032b的具体内容可参见上述实施例中步骤S2032a的相关说明,在此不再赘述。
在步骤S2033b中,将前次请求的存储块的标识更新为第一目标子时长段对应的存储块的标识。
步骤S2033b的具体内容可参见上述实施例中步骤S2033a的相关说明,在此不再赘述。
在步骤S2034b中,将第一目标子时长段对应的存储块存储的请求数量更新为一,将除第一目标子时长段以外的子时长段对应的存储块中存储的请求数量和请求等待时间更新为零。
前次请求所在的单位时长所对应的限流实例中各存储块存储的请求数量,在本次请求所在的单位时长内无效。因此,可先将限流实例中各存储块存储的请求数量清零,在对第一目标子时长段对应的存储块存储的请求数量增加本次请求的一次计数。
在步骤S2035b中,将第二时间戳更新为第一时间戳。
步骤S2035b的具体内容可参见上述实施例中步骤S2035a的相关说明,在此不再赘述。
例如,单位时长为1秒,子时长段的时长为10毫秒,限流实例对应包括100个存储块,100个存储块的标识分别为标识1至标识100,第一时间戳表征的本次请求的时间点为1秒523毫秒,第二时间戳表征的前次请求的时间点为10毫秒,第一时间戳与第二时间戳的间隔时长为大于1秒的1513毫秒,则将实例请求总数更新为一,将前次请求的存储块的标识即时间点10毫秒对应的标识2更新为第一目标子时长段对应的存储块的标识即1秒523毫秒对应的标识53,将标识53的存储块存储的请求数量更新为一,将除标识53之外的其他存储块存储的请求数量更新为0,并将第二时间戳从时间段10毫秒更新为时间点1秒523毫秒。
在间隔时长小于或等于单位时长的情况下,第一目标子时长段与第二目标子时长段的相对时间位置的不同,更新限流实例中实例请求总数、存储块中存储的请求数量和请求等待时间的方法也可不同。下面对第一目标子时长段与第二目标子时长段的不同相对时间位置的情况下,限流实例中实例请求总数、存储块中存储的请求数量和请求等待时间的更新方法进行说明。图5为本申请提供的限流控制方法的又一实施例的流程图。图5示出了图4中步骤S2031a至步骤S2035a这一分支中步骤S2034a的具体细化,图4中的步骤S2034a可具体细化为图5中的步骤S20341至步骤S20346中的至少部分步骤,在此并不限定。
在步骤S20341中,在第一目标子时长段与第二目标子时长段一致的情况下,将第一目标子时长段对应的存储块存储的请求数量累计加一。
第一目标子时长段与第二目标子时长段一致,即第一目标子时长段与第二目标子时长段为同一子时长段。由于第一目标子时长段与第二目标子时长段为同一子时长段,因此,除第一目标子时长段以外的其他子时长段中的请求数量并不发生改变,只需更新第一目标子时长段对应的存储块存储的请求数量。将第一目标子时长段对应的存储块存储的请求数量累计加一,即为将第二目标子时长段对应的存储块存储的请求数量累计加一。
在步骤S20342中,保持除第一目标子时长段对应的存储块之外的其他存储块存储的请求数量和实例请求总数不变。
由于实例请求总数在步骤S2031a中已经累计加一,因此在步骤S20342中可保持实例请求总数不变。
在步骤S20343中,在第一目标子时长段与第二目标子时长段不一致,且第一目标子时长段位于第二目标子时长段之后的情况下,将实例请求总数减去第一无效存储块存储的请求数量之和,得到更新后的实例请求总数。
第一目标子时长段与第二目标子时长段不一致,表示第一目标子时长段与第二目标子时长段是不同的子时长段。需要进一步确定第一目标子时长段与第二目标子时长段的相对时间位置。第一目标子时长段与第二目标子时长段的相对时间位置可包括第一目标子时长段位于第二目标子时长段之后,以及第一目标子时长段位于第二目标子时长段之前。
第一无效存储块包括第一目标子时长段与第二目标子时长段之间的子时长段对应的存储块和第一目标子时长段对应的存储块。第一无效存储块中存储的请求数量是本次请求所在的单位时长的上一单位时长内统计的请求数量,与本次请求所在的单位时长无关,即第一无效存储块中存储的请求数量对于更新后的实例请求总数是冗余无效的,为了防止冗余数据的出现,需要将减去第一无效存储块存储的请求数量之和的实例请求总数作为更新后的实例请求总数。
第一无效存储块中存储的请求数量清零,避免本次请求所在的单位时长的上一单位时长内的请求数量对本次请求所在的单位时长内的请求数量造成影响。
在步骤S20344中,在第一目标子时长段与第二目标子时长段不一致,且第一目标子时长段位于第二目标子时长段之前的情况下,将实例请求总数减去第二无效存储块存储的请求数量之和。
第二无效存储块包括第二目标子时长段之后的所有子时长段对应的存储块、第一目标子时长段之前的所有子时长段对应的存储块和第一目标子时长段对应的存储块。第二无效存储块中存储的请求数量是本次请求所在的单位时长的上一单位时长内统计的请求数量,与本次请求所在的单位时长无关,即第二无效存储块中存储的请求数量对于更新后的实例请求总数是冗余无效的,为了防止冗余数据的出现,需要将减去第二无效存储块存储的请求数量之和的实例请求总数作为更新后的实例请求总数。
第二无效存储块中存储的请求数量清零,避免本次请求所在的单位时长的上一单位时长内的请求数量对本次请求所在的单位时长内的请求数量造成影响。
在步骤S20345中,将第一目标子时长段对应的存储块存储的请求数量累计加一。
本次请求对应的子时长段为第一目标子时长段,将第一目标子时长段对应的存储块存储的请求数量累计加一,作为更新后的第一目标子时长段对应的存储块存储的请求数量。
在第一目标子时长段与第二目标子时长段不一致,且第一目标子时长段位于第二目标子时长段之后的情况下,除第一无效存储块之外的其他存储块中存储的请求数量可保持不变。
在第一目标子时长段与第二目标子时长段不一致,且第一目标子时长段位于第二目标子时长段之前的情况下,除第二无效存储块之外的其他存储块中存储的请求数量可保持不变。
在步骤S20346中,根据限流请求数量阈值和更新后的实例请求总数,更新请求等待时间。
更新后的实例请求总数为本次请求所在的单位时长内的实例请求总数,利用更新后的实例请求总数与限流请求数量阈值比较,可得到比较结果,该比较结果可表征本次请求所在的单位时长内的实例请求总数是否大于或等于限流请求数量阈值。可根据比较结果更新请求等待时间。
在更新后的实例请求总数小于限流请求数量阈值的情况下,将请求等待时间更新为0。更新后的实例请求总数小于限流请求数量阈值,表示网络较为畅通,将请求等待时间更新为0,通过为0的请求等待时间体现网络较为畅通。
在更新后的实例请求总数大于或等于限流请求数量阈值的情况下,将请求等待时间更新为m个子时长段的时长之和,m为正整数。更新后的实例请求总数大于或等于限流请求数量阈值,表示网络可能出现拥塞,需要设置不为0的请求等待时间,以缓解网络拥塞。M可取1或大于1的整数。
在一些示例中,将更新后的实例请求总数按照第一目标子时长段之后的子时长段、第一个子时长段至第一目标子时长段的顺序,依次减去对应的存储块存储的请求数量,直至实例请求总数减少至小于限流请求数量阈值;将依次减去的请求数量对应的存储块的数量确定为m;将请求等待时间更新为m个子时长段的时长之和。
例如,子时长段的时长为10毫秒,限流请求数量阈值为200,限流实例包括10个存储块,存储块的标识分别为1至10,子时长段的顺序与存储块的标识由小到大的顺序一致,第一目标子时长段对应的存储块的标识为5,更新后的实例请求总数为205,标识为6的存储块存储的请求数量为2,标识为7的存储块存储的请求数量为5;更新后的实例请求总数205减去标识为6的存储块存储的请求数量2,再减去标识为7的存储块存储的请求数量后,实例请求总数减少至196,依次减去的请求数量对应的存储块的数量为2,对应地,m=2,请求等待时间更新为20毫秒。
又例如,子时长段的时长为10毫秒,限流请求数量阈值为200,限流实例包括10个存储块,存储块的标识分别为1至10,子时长段的顺序与存储块的标识由小到大的顺序一致,第一目标子时长段对应的存储块的标识为9,更新后的实例请求总数为207,标识为10的存储块存储的请求数量为4,标识为1的存储块存储的请求数量为2,标识为2的存储块存储的请求数量为3;更新后的实例请求总数205减去标识为10的存储块存储的请求数量2,再减去标识为1的存储块存储的请求数量,再减去标识为1的存储块存储的请求数量后,实例请求总数减少至198,依次减去的请求数量对应的存储块的数量为3,对应地,m=3,请求等待时间更新为30毫秒
在一些实施例中,可能存在本次请求与前次请求之间的间隔时长与限流实例中的请求等待时间不符的情况,则需要反馈该情况。具体地,在间隔时长小于或等于单位时长的情况下,若请求等待时间大于零,比较间隔时长与请求等待时间;在间隔时长小于请求等待时间的情况下,计算并反馈请求等待时间与间隔时长的时长差值。限流实例的宿主程序可根据该时长差值,发出用于提示用户的消息或采取其他措施,在此并不限定。
在一些实施例中,可预先创建上述限流实例。具体地,可根据设定的限流请求数量阈值和设定的请求限流精度,创建限流实例。
请求限流精度与子时长段的时长相等,即可将设定的请求限流精度作为子时长段的时长,根据子时长段的时长和单位时长,可计算得到存储块的数量N,即子时长段的数量N。
创建的限流实例中的存储块存储的请求数量、实例请求总数和请求等待时间均为零。创建的限流实例中的前次请求的存储块的标识和第二时间戳为初始态,初始态可为0、空状态或默认态等,在此并不限定。创建的限流实例中的限流请求数量阈值为设定的限流请求数量阈值。
在一些实施例中,还可响应于实例修改指令,按照实例修改指令中的所述限流请求数量阈值和请求限流精度,修改所述限流实例。
修改后的限流实例对应的子时长段的时长与实例修改指令中的请求限流精度相等。修改后的限流实例中限流请求数量阈值与实例修改指令中的限流请求数量阈值相等。
在一些示例中,可为限流实例配置接口,通过该接口可修改限流实例,以修改限流实例对应的子时长段的时长,即相当于修改了限流实例的限流精度;通过该接口可修改限流实例,以修改限流实例中的限流请求数量阈值。通过实例修改指令能够及时对限流实例进行调整,从而调整限流精度和限流请求数量阈值,提高了限流控制的灵活性和可扩展性。
在一些实施例中,可在限流实例的宿主程度不需要进行限流控制或该宿主程序被退出的情况下,清除限流实例。具体地,可响应于限流结束指令,清除限流实例,完成限流实例的数据结构、数据对象的清理,以释放限流实例占用的资源。
下面以一示例来具体说明第一时间戳与第二时间戳之间的间隔时长小于或等于单位时长的情况下,对限流实例中存储块中存储的请求数量、实例请求总数、前次请求的存储块的标识和第二时间戳的更新的流程。在该示例中,N=100,单位时长为1秒,每个子时长段的时长为10毫秒。其中,设时间点0毫秒至时间点10毫秒(不包括10毫秒)对应的存储块的标识为1,时间点10毫秒至时间点20毫秒(不包括20毫秒)对应的存储块的标识为2,……,依次类推,时间点980毫秒至时间点990毫秒(不包括990毫秒)对应的存储块的标识为99,时间点990毫秒至时间点1000毫秒(不包括1000毫秒)对应的存储块的标识为100,时间点1000毫秒及之后的时间点对应的存储块的标识循环从1至100。
初始化的限流实例中的各存储块的标识、各存储块中存储的请求数量、实例请求总数、前次请求的存储块的标识和第二时间戳如下表一所示:
表一
如表一所示,初始化的限流实例中各存储块中存储的请求数量均为0,实例请求总数为0,前次请求的存储块的标识为空,第二时间戳为0。
第一次获取到请求,第一时间戳表征的时间点为8毫秒,更新后的限流实例中各存储块中存储的请求数量、实例请求总数、前次请求的存储块的标识和第二时间戳如下表二所示:
表二
如表二所示,第一次更新后的限流实例中存储块标识为1的存储块中存储的请求数量为1,第一次更新后的限流实例中其他存储块中存储的请求数量均为0;第一次更新后的限流实例中实例请求总数为1;第一次更新后的限流实例中前次请求的存储块的标识为1;第一次更新后的限流实例中第二时间戳为8ms即8毫秒。
第二次获取到请求,第一时间戳表征的时间点为8.001毫秒,第二次更新后的限流实例中各存储块中存储的请求数量、实例请求总数、前次请求的存储块的标识和第二时间戳如下表二所示:
表二
如表二所示,8.001毫秒与8毫秒处于同一子时长段,该子时长段与存储块标识为1的存储块对应,第二次更新后的限流实例中存储块标识为1的存储块中存储的请求数量为2,第二次更新后的限流实例中其他存储块中存储的请求数量为0;第二次更新后的限流实例中实例请求总数为2;第二次更新后的限流实例中前次请求的存储块的标识为1;第二次更新后的限流实例中第二时间戳为8.001ms。
第三次获取到请求,第一时间戳表征的时间点为38毫秒,第三次更新后的限流实例中各存储块中存储的请求数量、实例请求总数、前次请求的存储块的标识和第二时间戳如下表三所示:
表三
如表三所示,38毫秒与8.001毫秒处于不同的子时长段,38毫秒所处的子时长段与存储块标识为4的存储块对应,且38毫秒所处的子时长段位于8.001毫秒所处的子时长段之后,第三次更新后的限流实例中存储块标识为1的存储块中存储的请求数量为2,第三次更新后的限流实例中存储块标识为4的存储块中存储的请求数量为1,第三次更新后的限流实例中其他存储块中存储的请求数量为0;第三次更新后的限流实例中实例请求总数为2+1-0-0-0=3,减去的三个0分别是存储块标识为2的存储块中存储的请求数量、存储块标识为3的存储块中存储的请求数量和更新前存储块标识为4的存储块中存储的请求数量;第三次更新后的限流实例中前次请求的存储块的标识为4;第三次更新后的限流实例中第二时间戳为38ms。
第四次获取到请求,第一时间戳表征的时间点为48毫秒,第四次更新后的限流实例中各存储块中存储的请求数量、实例请求总数、前次请求的存储块的标识和第二时间戳如下表四所示:
表四
如表四所示,48毫秒与38毫秒处于不同的子时长段,48毫秒所处的子时长段与存储块标识为5的存储块对应,且48毫秒所处的子时长段位于38毫秒所处的子时长段之后,第四次更新后的限流实例中存储块标识为1的存储块中存储的请求数量为2,第四次更新后的限流实例中存储块标识为4的存储块中存储的请求数量为1,第四次更新后的限流实例中存储块标识为5的存储块中存储的请求数量为1,第四次更新后的限流实例中其他存储块中存储的请求数量为0;第四次更新后的限流实例中实例请求总数为3+1=4;第四次更新后的限流实例中前次请求的存储块的标识为5,第四次更新后的限流实例中第二时间戳为48ms。
第五次获取到请求,第一时间戳表征的时间点为1秒18毫秒,第五次更新后的限流实例中各存储块中存储的请求数量、实例请求总数、前次请求的存储块的标识和第二时间戳如下表五所示:
表五
如表五所示,1分18毫秒与48毫秒之间的间隔时长小于1秒;1分18毫秒与48毫秒处于不同的子时长段,1分18毫秒所处的子时长段与存储块标识为2的存储块对应,且1分18毫秒所处的子时长段位于48毫秒所处的子时长段之前,第五次更新后的限流实例中存储块标识为1的存储块中存储的请求数量为0,第五次更新后的限流实例中存储块标识为2的存储块中存储的请求数量为1,第五次更新后的限流实例中存储块标识为4的存储块中存储的请求数量为1,第五次更新后的限流实例中存储块标识为5的存储块中存储的请求数量为1,第五次更新后的限流实例中其他存储块中存储的请求数量为0;第五次更新后的限流实例中实例请求总数为4+1-0-……-0-2-0=3,减去的九十五个0分别是存储块标识为6至100的存储块中存储的请求数量,减去的一个2是存储块标识为1的存储块中存储的请求数量,在减去2后减去的一个0是更新前的存储块标识为2的存储块中存储的请求数量;第五次更新后的限流实例中前次请求的存储块的标识为2,第五次更新后的限流实例中第二时间戳为1s18ms即1秒18毫秒。
第六次获取到请求,第一时间戳表征的时间点为1分58毫秒,第六次更新后的限流实例中各存储块中存储的请求数量、实例请求总数、前次请求的存储块的标识和第二时间戳如下表六所示:
表六
如表六所示,1分58毫秒与1分18毫秒处于不同的子时长段,1分58毫秒所处的子时长段与存储块标识为6的存储块对应,且1分58毫秒所处的子时长段位于1分18毫秒所处的子时长段之后,第六次更新后的限流实例中存储块标识为2的存储块中存储的请求数量为1,第六次更新后的限流实例中存储块标识为4的存储块中存储的请求数量为0,第六次更新后的限流实例中存储块标识为5的存储块中存储的请求数量为0,第六次更新后的限流实例中存储块标识为6的存储块中存储的请求数量为1,第六次更新后的限流实例中其他存储块中存储的请求数量为0;第六次更新后的限流实例中实例请求总数为3+1-0-1-1-0=2,减去的第一个0是存储块标识为3的存储块中存储的请求数量,减去的两个1分别是存储块标识为4的存储块中存储的请求数量和存储块标识为5的存储块中存储的请求数量,减去的第二个0为更新前的存储块标识为6的存储块中存储的请求数量;第六次更新后的限流实例中前次请求的存储块的标识为6;第六次更新后的限流实例中第二时间戳为1s58ms。
针对上述实施例中的限流实例,在功能结构上可对应配置多个接口和多个功能单元。图6为本申请实施例提供的限流控制的功能结构的一示例的示意图。如图6所示,限流控制的功能结构300可包括限流实例301、实例创建接口302、实例修改接口303、实例清理接口304、限流判定接口305、时间戳获取单元306、实例重置单元307、单位时长判定单元308和时长差计算单元309。
限流实例301的具体内容可参见上述实施例中限流实例的相关说明,在此不再赘述。
实例创建接口302用于创建限流实例301。
实例修改接口303用于修改限流实例301。
实例清理接口304用于清除限流实例301。
限流判定接口305可用于调用时间戳获取单元306、实例重置单元307、单位时长判定单元308和时长差计算单元309,以实现上述实施例中的限流控制方法中的至少部分内容,在此并不限定。
时间戳获取单元306可用于获取上述实施例中的第一时间戳;以及用于根据第一时间戳,确定对应的第一目标子时长段;还可用于根据第一目标子时长段,确定第一目标子时长段对应的存储块和该存储块的标识等,在此并不限定。
实例重置单元307可用于重置限流实例301,具体可重置限流实例301中各存储块中存储的请求数量、实例请求总数、请求等待时间、第二时间戳、前次请求的存储块的标识等信息,在此并不限定。
单位时长判定单元308可用于比较上述实施例中第一时间戳与第二时间戳的间隔时长与单位时长等,在此并不限定。
时长差计算单元309可用于计算第一时间戳与第二时间戳的间隔时长,以及计算请求等待时间与间隔时长的差值等,在此并不限定。
本申请还提供了一种限流控制装置,该限流控制装置可执行上述实施例中的限流控制方法。限流控制装置具体可包括终端设备、服务器或其他类型的装置,在此并不限定。图7为本申请提供的限流控制装置的一实施例的结构示意图。如图7所示,限流控制装置400可包括获取模块401、处理模块402和限流模块403。
获取模块401可用于响应于本次请求,获取本次请求的第一时间戳,以及用于获取限流实例。
限流实例包括N个存储块、实例请求总数、限流请求数量阈值、前次请求的存储块的标识、前次请求的第二时间戳和请求等待时间。其中,N个存储块与预设的单位时长划分的N个子时长段一一对应,N为大于1的整数。存储块存储有与存储块对应的子时长段中的请求数量。实例请求总数为各存储块存储的请求数量之和。
在一些示例中,存储块的标识包括存储块的索引。
处理模块402可用于根据第一时间戳与第二时间戳之间的间隔时长、单位时长以及限流请求数量阈值,更新限流实例。
限流模块403可用于根据更新后的限流实例中的请求等待时间,确定是否限流。
在本申请实施例中,限流实例包括N个存储块,每个存储块存储有该存储块对应的子时长段中的请求数量,子时长段由单位时长划分得到。调用限流实例,获取本次请求的第一时间戳。通过第一时间戳与限流实例中前次请求的第二时间戳的间隔时长和单位时长可确定本次请求与前次请求是否发生在一个单位时长内,从而根据间隔时长、单位时长和限流请求数量阈值来更新限流实例。更新后的存储块中存储的请求数量可表征本次请求所在的单位时长内的各子时长段中的请求数量。更新后的实例请求总数可表征本次请求所在的单位时长内的各子时长段中的请求数量之和,即表征本次请求所在的单位时长内的请求数量的总和。在更新后的存储块中存储的请求数量和更新后的实例请求总数的条件下的更新后的限流实例中的请求等待时间能够体现网络拥塞的程度。通过对限流实例的更新,完成了对更高精准度的子时长段内的请求数量的更新、由更高精确度的子时长段得到的本次请求最近的单位时长内的请求数量的总和的更新,以及请求等待时间的更新。根据能够体现网络拥塞程度的请求等待时间来确定是否限流,能够避免限流因控制粗糙引起的限流失效,提高了限流控制的精准度。
在一些示例中,上述处理模块402可用于:在间隔时长小于或等于单位时长的情况下,将实例请求总数累计加一;根据第一时间戳和第二时间戳,确定第一时间戳所在的第一目标子时长段和第二时间戳所在的第二目标子时长段;将前次请求的存储块的标识更新为第一目标子时长段对应的存储块的标识;根据第一目标子时长段、第二目标子时长段以及限流请求数量阈值,更新实例请求总数、存储块中存储的请求数量和请求等待时间;将第二时间戳更新为第一时间戳。
具体地,上述处理模块402可用于:在第一目标子时长段与第二目标子时长段一致的情况下,将第一目标子时长段对应的存储块存储的请求数量累计加一;保持除第一目标子时长段对应的存储块之外的其他存储块存储的请求数量和实例请求总数不变;根据限流请求数量阈值和更新后的实例请求总数,更新请求等待时间。
具体地,上述处理模块402可用于:在第一目标子时长段与第二目标子时长段不一致,且第一目标子时长段位于第二目标子时长段之后的情况下,将实例请求总数减去第一无效存储块存储的请求数量之和,得到更新后的实例请求总数,第一无效存储块包括第一目标子时长段与第二目标子时长段之间的子时长段对应的存储块和第一目标子时长段对应的存储块;将第一目标子时长段对应的存储块存储的请求数量累计加一;根据限流请求数量阈值和更新后的实例请求总数,更新请求等待时间。
具体地,上述处理模块402可用于:在第一目标子时长段与第二目标子时长段不一致,且第一目标子时长段位于第二目标子时长段之前的情况下,将实例请求总数减去第二无效存储块存储的请求数量之和,第二无效存储块包括第二目标子时长段之后的所有子时长段对应的存储块、第一目标子时长段之前的所有子时长段对应的存储块和第一目标子时长段对应的存储块;将第一目标子时长段对应的存储块存储的请求数量累计加一;根据限流请求数量阈值和更新后的实例请求总数,更新请求等待时间。
在一些示例中,上述处理模块402用于:在更新后的实例请求总数小于限流请求数量阈值的情况下,将请求等待时间更新为0;在更新后的实例请求总数大于或等于限流请求数量阈值的情况下,将请求等待时间更新为m个子时长段的时长之和,m为正整数。
具体地,上述处理模块402用于将更新后的实例请求总数按照第一目标子时长段之后的子时长段、第一个子时长段至第一目标子时长段的顺序,依次减去对应的存储块存储的请求数量,直至实例请求总数减少至小于限流请求数量阈值;将依次减去的请求数量对应的存储块的数量确定为m;将请求等待时间更新为m个子时长段的时长之和。
在一些示例中,上述处理模块402还用于:在间隔时长大于单位时长的情况下,将实例请求总数更新为一;根据第一时间戳,确定第一时间戳所在的第一目标子时长段;将前次请求的存储块的标识更新为第一目标子时长段对应的存储块的标识;将第一目标子时长段对应的存储块存储的请求数量更新为一,将除第一目标子时长段以外的子时长段对应的存储块中存储的请求数量和请求等待时间更新为零;将第二时间戳更新为第一时间戳。
在一些示例中,上述处理模块402还可用于:在间隔时长小于或等于单位时长的情况下,若请求等待时间大于零,比较间隔时长与请求等待时间;在间隔时长小于请求等待时间的情况下,计算并反馈请求等待时间与间隔时长的时长差值。
图8为本申请提供的限流控制装置的另一实施例的结构示意图。图8与图7的不同之处在于,图8所示的限流控制400还可包括创建模块404、修改模块405和清除模块406。
创建模块404可用于根据设定的限流请求数量阈值和设定的请求限流精度,创建限流实例。
请求限流精度与子时长段的时长相等。创建的限流实例中的存储块存储的请求数量、实例请求总数和请求等待时间均为零。创建的限流实例中的前次请求的存储块的标识和第二时间戳为初始态。创建的限流实例中的限流请求数量阈值为设定的限流请求数量阈值。
修改模块405可用于响应于实例修改指令,按照实例修改指令中的限流请求数量阈值和请求限流精度,修改限流实例。
修改后的限流实例对应的子时长段的时长与实例修改指令中的请求限流精度相等。修改后的限流实例中限流请求数量阈值与实例修改指令中的限流请求数量阈值相等。
清除模块406可用于响应于限流结束指令,清除限流实例。
本申请实施例还提供了一种限流控制设备。图9为本申请提供的限流控制设备的一实施例的结构示意图。如图9所示,限流控制设备500包括存储器501、处理器502及存储在存储器501上并可在处理器502上运行的计算机程序。
在一个示例中,上述处理器502可以包括中央处理器(CPU),或者特定集成电路(Application Specific Integrated Circuit,ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。
存储器501可包括只读存储器(Read-Only Memory,ROM),随机存取存储器(RandomAccess Memory,RAM),磁盘存储介质设备,光存储介质设备,闪存设备,电气、光学或其他物理/有形的存储器存储设备。因此,通常,存储器包括一个或多个编码有包括计算机可执行指令的软件的有形(非暂态)计算机可读存储介质(例如,存储器设备),并且当该软件被执行(例如,由一个或多个处理器)时,其可操作来执行参考根据本申请实施例中限流控制方法所描述的操作。
处理器502通过读取存储器501中存储的可执行程序代码来运行与可执行程序代码对应的计算机程序,以用于实现上述实施例中的限流控制方法。
在一个示例中,限流控制设备500还可包括通信接口503和总线504。其中,如图9所示,存储器501、处理器502、通信接口503通过总线504连接并完成相互间的通信。
通信接口503,主要用于实现本申请实施例中各模块、装置、单元和/或设备之间的通信。也可通过通信接口503接入输入设备和/或输出设备。
总线504包括硬件、软件或两者,将限流控制设备500的部件彼此耦接在一起。举例来说而非限制,总线504可包括加速图形端口(Accelerated Graphics Port,AGP)或其他图形总线、增强工业标准架构(Enhanced Industry Standard Architecture,EISA)总线、前端总线(Front Side Bus,FSB)、超传输(Hyper Transport,HT)互连、工业标准架构(Industrial Standard Architecture,ISA)总线、无限带宽互连、低引脚数(Low pincount,LPC)总线、存储器总线、微信道架构(Micro Channel Architecture,MCA)总线、外围组件互连(Peripheral Component Interconnect,PCI)总线、PCI-Express(PCI-X)总线、串行高级技术附件(Serial Advanced Technology Attachment,SATA)总线、视频电子标准协会局部(Video Electronics Standards Association Local Bus,VLB)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线504可包括一个或多个总线。尽管本申请实施例描述和示出了特定的总线,但本申请考虑任何合适的总线或互连。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序指令,该计算机程序指令被处理器执行时可实现上述实施例中的限流控制方法,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,上述计算机可读存储介质可包括非暂态计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等,在此并不限定。
需要明确的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。对于装置实施例、设备实施例、计算机可读存储介质实施例而言,相关之处可以参见方法实施例的说明部分。本申请并不局限于上文所描述并在图中示出的特定步骤和结构。本领域的技术人员可以在领会本申请的精神之后,作出各种改变、修改和添加,或者改变步骤之间的顺序。并且,为了简明起见,这里省略对已知方法技术的详细描述。
上面参考根据本申请的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本申请的各方面。应当理解,流程图和/或框图中的每个方框以及流程图和/或框图中各方框的组合可以由计算机程序指令实现。这些计算机程序指令可被提供给通用计算机、专用计算机、或其它可编程数据处理装置的处理器,以产生一种机器,使得经由计算机或其它可编程数据处理装置的处理器执行的这些指令使能对流程图和/或框图的一个或多个方框中指定的功能/动作的实现。这种处理器可以是但不限于是通用处理器、专用处理器、特殊应用处理器或者现场可编程逻辑电路。还可理解,框图和/或流程图中的每个方框以及框图和/或流程图中的方框的组合,也可以由执行指定的功能或动作的专用硬件来实现,或可由专用硬件和计算机指令的组合来实现。
本领域技术人员应能理解,上述实施例均是示例性而非限制性的。在不同实施例中出现的不同技术特征可以进行组合,以取得有益效果。本领域技术人员在研究附图、说明书及权利要求书的基础上,应能理解并实现所揭示的实施例的其他变化的实施例。在权利要求书中,术语“包括”并不排除其他装置或步骤;数量词“一个”不排除多个;术语“第一”、“第二”用于标示名称而非用于表示任何特定的顺序。权利要求中的任何附图标记均不应被理解为对保护范围的限制。权利要求中出现的多个部分的功能可以由一个单独的硬件或软件模块来实现。某些技术特征出现在不同的从属权利要求中并不意味着不能将这些技术特征进行组合以取得有益效果。

Claims (16)

1.一种限流控制方法,其特征在于,包括:
响应于本次请求,获取本次请求的第一时间戳;
获取预先创建的限流实例,所述限流实例包括N个存储块、实例请求总数、限流请求数量阈值、前次请求的所述存储块的标识、前次请求的第二时间戳和请求等待时间,其中,N个所述存储块与预设的单位时长划分的N个子时长段一一对应,N为大于1的整数,所述存储块存储有与所述存储块对应的所述子时长段中的请求数量,所述实例请求总数为各所述存储块存储的请求数量之和;
根据所述第一时间戳与所述第二时间戳之间的间隔时长、所述单位时长以及所述限流请求数量阈值,更新所述限流实例;
根据更新后的所述限流实例中的请求等待时间,确定是否限流。
2.根据权利要求1所述的方法,其特征在于,所述根据所述第一时间戳与所述第二时间戳之间的间隔时长、所述单位时长以及所述限流请求数量阈值,更新所述限流实例,包括:
在所述间隔时长小于或等于所述单位时长的情况下,将所述实例请求总数累计加一;
根据所述第一时间戳和所述第二时间戳,确定所述第一时间戳所在的第一目标子时长段和所述第二时间戳所在的第二目标子时长段;
将前次请求的所述存储块的标识更新为所述第一目标子时长段对应的所述存储块的标识;
根据所述第一目标子时长段、所述第二目标子时长段以及所述限流请求数量阈值,更新所述实例请求总数、所述存储块中存储的请求数量和所述请求等待时间;
将所述第二时间戳更新为第一时间戳。
3.根据权利要求2所述的方法,其特征在于,所述根据所述第一目标子时长段、所述第二目标子时长段以及所述限流请求数量阈值,更新所述实例请求总数、所述存储块中存储的请求数量和所述请求等待时间,包括:
在所述第一目标子时长段与第二目标子时长段一致的情况下,将所述第一目标子时长段对应的所述存储块存储的请求数量累计加一;
保持除所述第一目标子时长段对应的所述存储块之外的其他所述存储块存储的请求数量和所述实例请求总数不变;
根据所述限流请求数量阈值和更新后的所述实例请求总数,更新所述请求等待时间。
4.根据权利要求2所述的方法,其特征在于,所述根据所述第一目标子时长段、所述第二目标子时长段以及所述限流请求数量阈值,更新所述实例请求总数、所述存储块中存储的请求数量和所述请求等待时间,包括:
在所述第一目标子时长段与第二目标子时长段不一致,且所述第一目标子时长段位于所述第二目标子时长段之后的情况下,将所述实例请求总数减去第一无效存储块存储的请求数量之和,得到更新后的所述实例请求总数,所述第一无效存储块包括所述第一目标子时长段与所述第二目标子时长段之间的所述子时长段对应的所述存储块和所述第一目标子时长段对应的所述存储块;
将所述第一目标子时长段对应的所述存储块存储的请求数量累计加一;
根据所述限流请求数量阈值和更新后的所述实例请求总数,更新所述请求等待时间。
5.根据权利要求2所述的方法,其特征在于,所述根据所述第一目标子时长段、所述第二目标子时长段以及所述限流请求数量阈值,更新所述实例请求总数、所述存储块中存储的请求数量和所述请求等待时间,包括:
在所述第一目标子时长段与第二目标子时长段不一致,且所述第一目标子时长段位于所述第二目标子时长段之前的情况下,将所述实例请求总数减去第二无效存储块存储的请求数量之和,所述第二无效存储块包括所述第二目标子时长段之后的所有所述子时长段对应的存储块、所述第一目标子时长段之前的所有所述子时长段对应的存储块和所述第一目标子时长段对应的存储块;
将所述第一目标子时长段对应的所述存储块存储的请求数量累计加一;
根据所述限流请求数量阈值和更新后的所述实例请求总数,更新所述请求等待时间。
6.根据权利要求3至5中任意一项所述的方法,其特征在于,所述根据所述限流请求数量阈值和更新后的所述实例请求总数,更新所述请求等待时间,包括:
在更新后的所述实例请求总数小于所述限流请求数量阈值的情况下,将所述请求等待时间更新为0;
在更新后的所述实例请求总数大于或等于所述限流请求数量阈值的情况下,将所述请求等待时间更新为m个所述子时长段的时长之和,m为正整数。
7.根据权利要求6所述的方法,其特征在于,所述将所述请求等待时间更新为m个所述子时长段的时长之和,包括:
将更新后的所述实例请求总数按照所述第一目标子时长段之后的所述子时长段、第一个所述子时长段至所述第一目标子时长段的顺序,依次减去对应的所述存储块存储的请求数量,直至所述实例请求总数减少至小于所述限流请求数量阈值;
将依次减去的请求数量对应的所述存储块的数量确定为m;
将所述请求等待时间更新为m个所述子时长段的时长之和。
8.根据权利要求1所述的方法,其特征在于,所述根据所述第一时间戳与所述第二时间戳之间的间隔时长、所述单位时长以及所述限流请求数量阈值,更新所述限流实例,包括:
在所述间隔时长大于所述单位时长的情况下,将所述实例请求总数更新为一;
根据第一时间戳,确定所述第一时间戳所在的第一目标子时长段;
将前次请求的所述存储块的标识更新为所述第一目标子时长段对应的所述存储块的标识;
将所述第一目标子时长段对应的所述存储块存储的请求数量更新为一,将除所述第一目标子时长段以外的所述子时长段对应的所述存储块中存储的请求数量和所述请求等待时间更新为零;
将所述第二时间戳更新为所述第一时间戳。
9.根据权利要求1所述的方法,其特征在于,还包括:
在所述间隔时长小于或等于所述单位时长的情况下,若所述请求等待时间大于零,比较所述间隔时长与所述请求等待时间;
在所述间隔时长小于所述请求等待时间的情况下,计算并反馈所述请求等待时间与所述间隔时长的时长差值。
10.根据权利要求1所述的方法,其特征在于,在所述响应于本次请求,获取本次请求的第一时间戳之前,还包括:
根据设定的所述限流请求数量阈值和设定的请求限流精度,创建所述限流实例,所述请求限流精度与所述子时长段的时长相等,创建的所述限流实例中的所述存储块存储的请求数量、所述实例请求总数和所述请求等待时间均为零,创建的所述限流实例中的前次请求的所述存储块的标识和所述第二时间戳为初始态,创建的所述限流实例中的所述限流请求数量阈值为设定的所述限流请求数量阈值。
11.根据权利要求1所述的方法,其特征在于,还包括:
响应于实例修改指令,按照所述实例修改指令中的所述限流请求数量阈值和请求限流精度,修改所述限流实例,修改后的所述限流实例对应的所述子时长段的时长与所述实例修改指令中的所述请求限流精度相等,修改后的所述限流实例中所述限流请求数量阈值与所述实例修改指令中的所述限流请求数量阈值相等。
12.根据权利要求1所述的方法,其特征在于,
响应于限流结束指令,清除所述限流实例。
13.根据权利要求1所述的方法,其特征在于,所述存储块的标识包括所述存储块的索引。
14.一种限流控制装置,其特征在于,包括:
获取模块,用于响应于本次请求,获取本次请求的第一时间戳,以及用于获取限流实例,所述限流实例包括N个存储块、实例请求总数、限流请求数量阈值、前次请求的所述存储块的标识、前次请求的第二时间戳和请求等待时间,其中,N个所述存储块与预设的单位时长划分的N个子时长段一一对应,N为大于1的整数,所述存储块存储有与所述存储块对应的所述子时长段中的请求数量,所述实例请求总数为各所述存储块存储的请求数量之和;
处理模块,用于根据所述第一时间戳与所述第二时间戳之间的间隔时长、所述单位时长以及所述限流请求数量阈值,更新所述限流实例;
限流模块,用于根据更新后的所述限流实例中的请求等待时间,确定是否限流。
15.一种限流控制设备,其特征在于,包括:处理器以及存储有计算机程序指令的存储器;
所述处理器执行所述计算机程序指令时实现如权利要求1至13中任意一项所述的限流控制方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现如权利要求1至13中任意一项所述的限流控制方法。
CN202110913583.7A 2021-08-10 2021-08-10 限流控制方法、装置、设备及存储介质 Active CN113691457B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202110913583.7A CN113691457B (zh) 2021-08-10 2021-08-10 限流控制方法、装置、设备及存储介质
PCT/CN2022/078759 WO2023015869A1 (zh) 2021-08-10 2022-03-02 限流控制方法、装置、设备及存储介质
US18/682,057 US20240267331A1 (en) 2021-08-10 2022-03-02 Method, apparatus and device for controlling traffic limitation and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110913583.7A CN113691457B (zh) 2021-08-10 2021-08-10 限流控制方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN113691457A CN113691457A (zh) 2021-11-23
CN113691457B true CN113691457B (zh) 2023-07-18

Family

ID=78579312

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110913583.7A Active CN113691457B (zh) 2021-08-10 2021-08-10 限流控制方法、装置、设备及存储介质

Country Status (3)

Country Link
US (1) US20240267331A1 (zh)
CN (1) CN113691457B (zh)
WO (1) WO2023015869A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113691457B (zh) * 2021-08-10 2023-07-18 中国银联股份有限公司 限流控制方法、装置、设备及存储介质

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6035333A (en) * 1997-11-24 2000-03-07 International Business Machines Corporation Method and system for providing congestion control in a data communications network
CN105245463A (zh) * 2014-07-09 2016-01-13 腾讯科技(深圳)有限公司 一种流量控制方法和设备
CN108073465A (zh) * 2017-12-29 2018-05-25 中国平安人寿保险股份有限公司 动态限流方法、Nginx服务器、存储介质及装置
US10164889B1 (en) * 2017-09-13 2018-12-25 Oracle International Corporation High throughput flow control
WO2020034135A1 (zh) * 2018-08-16 2020-02-20 深圳市锐明技术股份有限公司 一种交通监测报警方法、装置、终端设备及存储介质
CN111142942A (zh) * 2019-12-26 2020-05-12 远景智能国际私人投资有限公司 窗口数据的处理方法、装置、服务器及存储介质
CN111431813A (zh) * 2020-06-09 2020-07-17 北京信安世纪科技股份有限公司 访问限流方法、设备及存储介质
CN112350953A (zh) * 2019-08-07 2021-02-09 亿度慧达教育科技(北京)有限公司 流量限制方法及其装置、电子设备和计算机可读存储介质
WO2021068205A1 (zh) * 2019-10-11 2021-04-15 深圳市欢太科技有限公司 访问控制方法、装置、服务器和计算机可读介质
CN112702228A (zh) * 2020-12-18 2021-04-23 平安普惠企业管理有限公司 服务限流响应方法、装置、电子设备及可读存储介质
CN113079106A (zh) * 2021-06-04 2021-07-06 明品云(北京)数据科技有限公司 一种控制数据传输的方法、系统、设备及介质
CN113220723A (zh) * 2021-04-27 2021-08-06 深圳市云网万店科技有限公司 一种流量控制方法、装置、计算机设备及存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7949780B2 (en) * 2008-01-29 2011-05-24 Oracle America, Inc. Adaptive flow control techniques for queuing systems with multiple producers
US9626343B2 (en) * 2010-04-05 2017-04-18 Facebook, Inc. Caching pagelets of structured documents
KR20120136507A (ko) * 2011-06-09 2012-12-20 삼성전자주식회사 네임 기반의 네트워크 시스템에서 펜딩 테이블의 오버플로우를 방지하는 노드 장치 및 방법
CN110278160B (zh) * 2018-03-15 2023-02-28 阿里巴巴集团控股有限公司 速率控制方法、装置及电子设备
CN111953772B (zh) * 2020-08-11 2022-11-22 北京达佳互联信息技术有限公司 请求处理方法、装置、服务器及存储介质
CN113037862B (zh) * 2021-03-30 2022-07-29 北京三快在线科技有限公司 业务请求的处理方法、装置、设备及存储介质
CN113691457B (zh) * 2021-08-10 2023-07-18 中国银联股份有限公司 限流控制方法、装置、设备及存储介质
US20240013270A1 (en) * 2022-07-07 2024-01-11 Walmart Apollo, Llc System and method for implementing an edge queuing platform

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6035333A (en) * 1997-11-24 2000-03-07 International Business Machines Corporation Method and system for providing congestion control in a data communications network
CN105245463A (zh) * 2014-07-09 2016-01-13 腾讯科技(深圳)有限公司 一种流量控制方法和设备
US10164889B1 (en) * 2017-09-13 2018-12-25 Oracle International Corporation High throughput flow control
CN108073465A (zh) * 2017-12-29 2018-05-25 中国平安人寿保险股份有限公司 动态限流方法、Nginx服务器、存储介质及装置
WO2020034135A1 (zh) * 2018-08-16 2020-02-20 深圳市锐明技术股份有限公司 一种交通监测报警方法、装置、终端设备及存储介质
CN112350953A (zh) * 2019-08-07 2021-02-09 亿度慧达教育科技(北京)有限公司 流量限制方法及其装置、电子设备和计算机可读存储介质
WO2021068205A1 (zh) * 2019-10-11 2021-04-15 深圳市欢太科技有限公司 访问控制方法、装置、服务器和计算机可读介质
CN111142942A (zh) * 2019-12-26 2020-05-12 远景智能国际私人投资有限公司 窗口数据的处理方法、装置、服务器及存储介质
CN111431813A (zh) * 2020-06-09 2020-07-17 北京信安世纪科技股份有限公司 访问限流方法、设备及存储介质
CN112702228A (zh) * 2020-12-18 2021-04-23 平安普惠企业管理有限公司 服务限流响应方法、装置、电子设备及可读存储介质
CN113220723A (zh) * 2021-04-27 2021-08-06 深圳市云网万店科技有限公司 一种流量控制方法、装置、计算机设备及存储介质
CN113079106A (zh) * 2021-06-04 2021-07-06 明品云(北京)数据科技有限公司 一种控制数据传输的方法、系统、设备及介质

Also Published As

Publication number Publication date
CN113691457A (zh) 2021-11-23
US20240267331A1 (en) 2024-08-08
WO2023015869A1 (zh) 2023-02-16

Similar Documents

Publication Publication Date Title
CN107315761B (zh) 一种数据更新方法、数据查询方法及装置
CN110554732B (zh) 一种标识号生成方法、生成装置、电子设备及存储介质
CN107392623B (zh) 一种业务执行的方法及装置
CN104518987A (zh) 并行多线程报文处理的方法和装置
CN111262795A (zh) 基于服务接口的限流方法、装置、电子设备及存储介质
CN113691457B (zh) 限流控制方法、装置、设备及存储介质
CN109428786B (zh) 网络性能监控方法、装置和计算机可读存储介质
CN106385377A (zh) 一种信息处理方法和系统
WO2017211265A1 (zh) 限速方法及装置、存储介质
CN110069533B (zh) 一种基于区块链的事件订阅方法及装置
CN110675133A (zh) 一种抢红包的方法、装置、电子设备及可读存储介质
CN109150593B (zh) 云数据系统中资源的管理方法和装置
CN111064776A (zh) 区块链中区块的生成方法、设备及存储介质
TW202429871A (zh) 資料中心及域名的切換方法、裝置、設備及介質
CN104462116B (zh) 数据选择的方法及装置
CN117082073A (zh) 文件存储方法、文件下载方法、装置、设备及存储介质
CN115567448A (zh) 流量控制方法、装置、设备、介质及程序产品
WO2019169727A1 (zh) 网络流量测试方法、装置、设备以及计算机可读存储介质
CN106990938B (zh) 随机数获取方法、装置及电子设备
CN106131187B (zh) 一种授权的控制方法及装置
CN106407016B (zh) 一种多线程争抢资源的模拟方法及装置
CN115774837A (zh) 一种信号校验方法、装置、设备、介质、程序产品及车辆
CN114048231A (zh) 数据处理方法、装置及计算机程序产品
CN113268327A (zh) 事务请求的处理方法、装置和电子设备
CN109284467A (zh) 一种用户生成内容ugc重复次数确定方法及装置

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