一种流量控制方法、系统及相关设备与流程
未命名
08-03
阅读:106
评论:0

1.本技术涉及云计算领域,尤其涉及一种流量控制方法、系统及相关设备。
背景技术:
2.随着云计算的不断发展,越来越多的租户和越来越高的使用流量对云服务提出了更高的稳定性要求,尤其是租户流量高峰或异常流量对云服务造成冲击时,网络发生拥塞、cpu过载、内存过载等问题会造成租户请求失败率增高,甚至服务器雪崩。因此,如何通过流量控制保证服务质量,成为云服务中的一个关键问题。
3.通常情况下,服务实例会通过单机流控策略从租户发起的请求中获取需要进行流量控制的待流控请求,比如待流控请求可以是租户在流量超出阈值后发起请求,然后将待流控请求发送给流控节点,流控节点根据集群流控策略拒绝部分不需要进行流量控制的请求,将通过执行流量控制的待流控请求返回给服务实例,服务实例再对其进行流量控制。上述过程不但消耗大量的系统资源,而且会导致流控反应慢,降低租户的使用体验。
技术实现要素:
4.本技术提供了一种流量控制方法、系统及相关设备,用于解决流控反应慢、系统资源消耗大的问题。
5.第一方面,本技术提供了一种流量控制方法,该方法包括以下步骤:服务实例获取第一时间窗口的多个待流控请求以及第二时间窗口内流控节点的流控结果,其中,第二时间窗口的开始时间早于第一时间窗口的开始时间,服务实例根据流控结果对多个待流控请求进行过滤,向流控节点发送过滤后的多个待流控请求。
6.具体实现中,上述服务实例包括下述的一种或者多种:虚拟机、容器、裸金属服务器。服务实例可以是云服务提供商提供的服务实例,比如云电脑、云手机等等,也可以是应用服务商提供的服务实例,比如云游戏、云直播等等,还可以是其他有流控需求的服务实例,这里不一一举例说明。流控节点是物理服务器,比如x86、arm服务器等等,也可以是基于通用的物理服务器结合网络功能虚拟化(network functions virtualization,nfv)技术实现的虚拟机(virtual machine,vm),虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,本技术不作具体限定。
7.具体实现中,上述第二时间窗口内流控节点的流控结果可包括第二时间窗口内服务实例将多个待流控请求发送给流控节点后,流控节点根据集群流控策略确定拒绝进行流控的待流控请求。可选地,上述流控结果还可包括第二时间窗口内服务实例通过单机流控策略确定的多个待流控请求。
8.实施第一方面描述的方法,服务实例在确定当前时间窗口的多个待流控请求后,可根据上一时间窗口内流控节点的流控结果对当前时间窗口的多个待流控请求进行过滤,比如上一时间窗口被流控节点拒绝流控的次数较多的请求,在当前时间窗口可以被服务实例优先过滤掉,不再将其发送给流控节点,使得服务实例具备一定精准流控的能力,同时降
低流控节点进行集群流控的压力,减少服务实例与流控节点之间的通信消耗,提高流控效率。
9.在一可能的实现方式中,第二时间窗口的内流控节点流控结果包括第一类别,第一类别是第二时间窗口内流控节点拒绝进行流量控制的多个待流控请求的请求类别,服务实例在根据流控结果对多个待流控请求进行过滤时,从多个待流控请求中滤除请求类别是第一类别的待流控请求。
10.可选地,每个待流控请求的请求类别可以是根据租户信息确定的,租户信息可包括租户的名称、账户级别等等,举例来说,相同类别的待流控请求可以是相同租户发起的,或者相同账户级别的租户发起的,或者相同公司名下租户发起的等等,本技术不对此进行限定。
11.可选地,每个待流控请求的请求类别可以是根据租户请求的数据类型确定的,数据类型可包括数据所在的桶名、文件系统名等等,举例来说,相同类别的待流控请求所访问的数据可以是同一个桶内的数据,或者同一个文件系统中的数据等等,本技术不对此进行限定。
12.可选地,每个待流控请求的请求类别可以是根据租户使用的客户端信息确定的,客户端信息可包括客户端的ip地址或者所在的网段等等,举例来说,相同类别的待流控请求对应的客户端的ip地址相同,或者客户端所在的段地址相同等,本技术不对此进行限定。
13.具体实现中,第二时间窗口内第一类别的待流控请求的数量大于或等于第一阈值。
14.实施上述实现方式,第一类别的待流控请求在上一时间窗口被流控节点拒绝,那么第一类别的待流控请求在当前时间窗口被流控节点拒绝的可能性也很大。比如租户a的流量使用已达到阈值,租户a的访问请求上一时间周期已被流控节点拒绝,那么当前时间周期租户a的访问请求也会被流控节点拒绝,因此服务实例在当前时间窗口提前过滤掉第一类别的待流控请求,不但可以减少与流控节点之间的通信量,提高通信效率,而且可以减少流控节点的处理压力。
15.在一可能的实现方式中,服务实例可记录每个时间窗口内流控节点的流控结果,每个时间窗口内流控节点的流控结果包括该时间窗口内被流控节点拒绝流控次数较多的请求的类别,比如拒绝次数超过第一阈值的请求的类别。
16.具体实现中,服务实例可通过排序算法和随机数算法记录每个时间窗口内被拒绝流控次数较多的请求的类别。确定每个待流控请求的请求类别和随机数,其中,请求类别可以用键(key)来表示,随机数可以用随机算法获得一个随机数字来表示,然后将部分待流控请求放入一个有限的数组中,通过排序算法对随机数进行排列,然后将剩余的待流控请求对应的随机数与数组中的最小值比较,若大于最小值,可以将该随机数与最小值进行替换,可以理解的,被拒绝的流控请求的类别数量越多,其随机数大于数组中最小值的可能性越大,被写入数组中的可能性越大,因此通过该方式获得的数组中记录的key对应的请求类别是被拒绝的流控请求次数较多的类别。
17.可选地,上述排序算法可以是小顶堆算法,服务实例包括多个小顶堆,一个时间窗口对应一个小顶堆,小顶堆可包括多个节点,每个节点对应一个键(key)和一个随机数,其中,不同的键对应不同的待流控请求的类别,小顶堆中每个节点的随机数都小于或等于左
右孩子节点的随机数,因此小顶堆的根节点对应的随机数是该小顶堆中最小的随机数。
18.具体实现中,在小顶堆中的节点数量未达到上限时,当前时间窗口内服务实例接收到被流控节点拒绝的待流控请求后,先根据待流控请求的请求类别确定待流控请求的键ki(i=1,2,3,
…
,n),根据随机算法确定待流控请求的随机数ai,再将(ki,ai)作为一个新增节点写入当前时间窗口对应的小顶堆中,以此类推,直至小顶堆中的节点数量达到上限,其中,小顶堆可以在节点数量达到上限后重新排列节点,使得小顶堆中每个节点的随机数都小于或等于左右孩子节点的随机数,也可以写入一个新增节点进行一次重新排列,本技术不对此进行限定。
19.当小顶堆中的节点数量达到上限时,当前时间窗口内服务实例接收到被流控节点拒绝的待流控请求后,先根据待流控请求的请求类别确定待流控请求的键ki,根据随机算法确定待流控请求的随机数ai,然后确定当前小顶堆的根节点的随机数a0是否小于ai,在a0《ai的情况下,删除当前的根节点,将(ki,ai)作为新增节点加入小顶堆,否则,处理下一个待流控请求,不对当前的小顶堆进行处理。以此类推,直至当前时间窗口内被流控节点拒绝的待流控请求全部处理完毕,此时小顶堆中的节点的k对应的请求类别即为当前时间窗口内,被流控节点拒绝次数较多的请求类别。
20.需要说明的,上述排序算法还可以是其他排序速度快、效率稳定的排序算法,比如快排序、归并排序等等,本技术不再一一展开举例说明。
21.实施上述实现方式,被流控节点拒绝次数越多,其随机数ai大于小顶堆根节点的可能性越大,其被写入小顶堆中的可能性越大,因此通过上述随机数和小顶堆结合的算法,可以记录出当前时间窗口内被流控节点拒绝次数较多的请求类别,该方法只需要简单的随机算法和小顶堆算法即可实现,无需挨个统计每个待流控请求进行计算,处理效率高,无论待流控请求的数量多少,小顶堆中记录的是固定数量的键key和随机数a,占用内存低,降低了服务实例维护每个时间窗口内流控节点的流控结果所需的处理压力。
22.在一可能的实现方式中,第二时间窗口内第一类别的流控拒绝概率大于或等于第二阈值,其中,流控拒绝概率是根据所述第二时间窗口内第一类别的待流控请求的总数量和被流控节点拒绝的第一类别的待流控请求的数量确定的。
23.换句话说,服务实例记录的每个时间窗口内流控节点的流控结果中,还包括目标类别的流控拒绝概率,其中,目标类别是时间窗口内被拒绝流控次数较多的待流控请求的请求类别,也可以理解为是上述数组(比如小顶堆,为了便于理解,下文统一以数组为小顶堆为例进行描述)中记录的key对应的请求类别。服务实例可以优先过滤掉这些流控拒绝概率较高的请求类别对应的待流控请求。
24.具体实现中,第二时间窗口内流控节点的流控结果包括数组的统计结果,该数组的统计结果包括数组中的键对应的请求类别的流控拒绝概率。
25.具体地,统计结果可以是根据小顶堆确定的,服务实例可统计小顶堆中记录的目标类别对应请求的成功次数和失败次数,根据失败次数和被流控的总次数获得上述流控拒绝概率。举例来说,服务实例可通过哈希映射(hash map)来记录小顶堆中的请求类别被流控的成功次数和失败次数,流控拒绝概率可通过失败次数除以总次数获得。应理解,上述举例用于说明,本技术不作具体限定。
26.进一步地,服务实例可结合抽样技术对待流控请求进行过滤。简单来说,服务实例
通过单机流控策略确定当前时间窗口(第一时间窗口)的待流控请求后,服务实例获取上一时间窗口(第二时间窗口)流控结果,从第一时间窗口的待流控请求中抽取部分待流控请求,根据第二时间窗口的流控结果对部分待流控请求进行处理,从而减少服务实例对待流控请求进行过滤时的计算量,提高过滤的效率,进而提高流控效率。
27.实施上述实现方式,通过确定目标类别(小顶堆中记录的上一时间窗口内被拒绝流控次数较多的待流控请求的请求类别)的流控拒绝概率,可以避免以下情况发生:由于某类别的待流控请求数量过大导致被拒绝的待流控请求数量虽然超过第一阈值,但是该类别的待流控请求被流控节点通过的数量更多,使用流控拒绝概率来判定该流控请求在下一时间窗口是否需要被过滤,可以避免该情况的发生,提高过滤的精准度。
28.在一可能的实现方式中,服务实例在根据单机流控策略确定当前时间窗口的待流控请求时,也可以根据上一时间窗口中被流控节点通过次数较多的待流控请求的类别,将其优先确定为当前时间窗口的待流控请求。具体实现中,服务实例可根据上一时间窗口中的hash map,确定hash map中记录的请求类别的流控通过概率,将流控通过概率高于第三阈值的请求类别优先确定为当前时间窗口的待流控请求。
29.进一步的,服务实例也可以结合抽样技术对流控通过概率进行统计,租户在第一时间窗口发送的多个访问请求后,服务实例可以从多个访问请求中抽取部分访问请求,获取抽样的访问请求的抽样请求类别,根据hash map中记录的上一时间窗口内,该抽样请求类别的流控通过概率,确定同一流控概率高于第三阈值的请求类别优先确定为当前时间窗口内的待流控请求。
30.需要说明的,服务实例在对待流控请求进行过滤时,可以不对上述流控通过概率高的请求进行过滤。换句话说,若某类别的待流控请求的流控拒绝概率高于第二阈值,流控通过概率也高于第三阈值,服务实例不对该类别的待流控请求进行过滤,该类别的待流控请求在当前时间窗口会被发送至流控节点,由流控节点根据集群流控策略来决定是否对其进行流控。
31.实施上述实现方式,该类别的待流控请求在上一时间窗口被通过流控的概率高,那么该类别的待流控请求在当前时间窗口被通过的可能性也会提高,将其直接确定为待流控请求,可以提高服务实例确定待流控请求的效率,减少单机流控策略需要确定的请求的数量,使得服务实例消耗的计算资源量降低。
32.第二方面,提供了一种服务实例,该服务实例包括:获取单元,用于获取第一时间窗口的多个待流控请求以及第二时间窗口内流控节点的流控结果,其中,第二时间窗口的开始时间早于第一时间窗口的开始时间;过滤单元,用于根据流控结果对多个待流控请求进行过滤,向流控节点发送过滤后的多个待流控请求。
33.在一可能的实现方式中,第二时间窗口内流控节点的流控结果包括第一类别,第一类别是第二时间窗口内流控节点拒绝进行流量控制的多个请求的请求类别;过滤单元,用于从多个待流控请求中滤除请求类别是第一类别的待流控请求。
34.在一可能的实现方式中,第二时间窗口内第一类别的请求的数量大于或等于第一阈值。
35.在一可能的实现方式中,第二时间窗口内第一类别的流控拒绝概率大于或等于第二阈值,其中,流控拒绝概率是根据第二时间窗口内第一类别的待流控请求的总数量和被
流控节点拒绝的第一类别的待流控请求的数量确定的。
36.在一可能的实现方式中,第二时间窗口内流控节点的流控结果包括数组,数组用于记录第二时间窗口内被流控节点拒绝的待流控请求的键和随机数,其中,相同请求类别的待流控请求的键相同,数组中的每个键与一个随机数对应,数组按照随机数的大小对键进行排序,第一类别对应的随机数大于或等于数组中的最小随机数。
37.在一可能的实现方式中,第二时间窗口内流控节点的流控结果包括数组的统计结果,数组的统计结果包括数组中的键对应的请求类别的流控拒绝概率。
38.在一可能的实现方式中,服务实例包括虚拟机、容器和裸金属服务器。
39.实施第二方面描述的方法,服务实例在确定当前时间窗口的多个待流控请求后,可根据上一时间窗口内流控节点的流控结果对当前时间窗口的多个待流控请求进行过滤,比如上一时间窗口被流控节点拒绝流控的次数较多的请求,在当前时间窗口可以被服务实例优先过滤掉,不再将其发送给流控节点,使得服务实例具备一定精准流控的能力,同时降低流控节点进行集群流控的压力,减少服务实例与流控节点之间的通信消耗,提高流控效率。
40.第三方面,提供了一种流量控制系统,该流量控制系统包括至少一个服务实例和流控节点,其中,服务实例执行第一方面或第一方面任一种可能实现方式中描述的方法。
41.第四方面,提供了一种计算设备,该计算设备包括处理器和存储器,存储器存储有代码,处理器包括用于执行第一方面或第一方面任一种可能实现方式中描述的方法。
42.第五方面,提供了一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在计算设备上运行时,使得计算设备执行第一方面或第一方面任一种可能实现方式中描述的方法。
43.第六方面,提供了一种计算机程序产品,计算机程序产品包括计算机程序,当计算机程序被计算设备读取并执行时,使得计算设备执行第一方面或第一方面任一种可能实现方式中描述的方法。
44.本技术在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
45.图1是一种集群流控的步骤流程示意图;
46.图2是本技术提供的一种流量控制系统的结构示意图;
47.图3是本技术提供的一种流量控制方法的步骤流程示意图;
48.图4~图6是本技术提供的一种小顶堆的处理流程示意图;
49.图7是本技术提供的一种计算设备的结构示意图。
具体实施方式
50.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
51.首先,对本技术涉及应用场景进行说明。
52.随着云计算技术和网络基础设施的快速发展,传统的互联网技术(internet technology,it)业务架构,正在逐步向云服务系统迁移,越来越多的业务应用也基于云服务架构重新设计和使用。在云服务架构下,云服务可以向租户提供服务实例的租赁服务,租户可根据自身的业务应用需求,支付一定的费用后从公有云租赁服务实例,在任何时间、地点、使用不同的终端设备与公有云中的服务实例建立通信连接,使用相应的服务,比如游戏服务、开发服务、流媒体服务等等。
53.而随着租户数量和使用流量的不断增大,云服务提供商的服务质量也受到考验,在租户流量高峰或异常流量情境当中,网络容易发生拥塞,服务实例cpu和内存容易出现过载的问题,造成租户请求失败率增高,甚至服务器雪崩,降低租户的使用体验。因此,服务实例可通过一定的流量控制策略对租户发起的请求进行流量控制以避免出现流量高峰或流量异常,比如当租户使用流量超出阈值时,拒绝或延迟租户本次发起的请求,从而确保租户流量高峰或者异常流量情境的出现,避免出现网络拥塞或者服务实例cpu、内存出现过载的问题。
54.通常情况下,每个服务实例可以通过单机流控策略来避免出现流量高峰或流量异常,单机流控策略指的是服务实例为接口设置流量控制阈值,在接收到的请求数量超出流量控制阈值后,将超出阈值的请求进行拒绝,防止系统被突发的流量冲垮。举例来说,某个应用的应用程序接口(application programming interface,api)的容量上限为100每秒查询率(qps,queries-per-second),其中,qps是服务器每秒能够响应的查询次数,qps是查询服务器在规定时间内能够处理流量大小的标准,那么服务实例访问该api的流量控制阈值可以设为100qps,也就是流量超过100qps时租户请求将会被限制,从而避免出现流量高峰或者流量异常等情境的出现。
55.但是,单机流控策略虽然成本低,但是每个服务实例只可统计自身的流量使用情况,而无法获知其他服务实例的流量使用情况,容易出现流量不均匀导致总体限流效果不佳等问题。仍以上述例子为例,某个应用的应用程序接口(application programming interface,api)的容量上限为100qps,有10个服务实例可访问该应用,那么每个服务实例的流量控制阈值设为10qps,但是由于调用逻辑、负载均衡策略等原因,每个服务实例的流量分布可能非常不均,部分流量较大的服务实例会在总体流量未超过100qps的情况下,提前触发流量控制。同理,如果服务实例数量多但是流量上限总容量小,也可能会出现均摊阈值太小导致限流效果不佳的问题,从而降低租户的使用体验。
56.集群流控是解决服务实例单机流控策略容易出现流量不均匀导致总体限流效果不佳的问题的方法之一,图1是一种集群流控的流程示意图,如图1所示,各个服务实例100接收到租户发起的多个访问请求后,会先通过单机流控策略从多个访问请求中确定一部分需要进行流量控制的多个待流控请求,然后将待流控请求发送给流控节点200,流控节点再根据集群流控策略拒绝一部分不需要进行流控的请求,将通过或拒绝进行流控的待流控请求返回给服务实例100,服务实例100再对租户请求进行相应地流控处理,从而解决服务实例单机流控策略容易出现流量不均匀导致总体限流效果不佳的问题。但是,集群流控过程需要服务实例和流控节点之间多次通信,将消耗大量的系统资源和通信资源,并且会导致流控效率低,降低租户的使用体验。
57.综上可知,单机流控虽然成本低,但是每个服务实例只可统计自身的流量使用情况,而无法获知其他服务实例的流量使用情况,容易出现流量不均匀导致总体限流效果不佳等问题,集群流控虽然能够获知每个服务实例的流量使用情况,解决单机流控策略容易出现流量不均匀导致总体限流效果不佳的问题,但是集群流控过程需要服务实例和流控节点之间多次通信,将消耗大量的系统资源和通信资源,并且会导致流控反应慢,降低租户的使用体验。
58.为了解决上述流量控制反应慢的问题,本技术提供了一种流量控制系统,该系统中的服务实例在当前时间窗口接收到用户发送的访问请求后,先从多个访问请求中确定多个待流控请求,再根据上一时间窗口的流控节点内流控节点的流控结果对当前时间窗口的服务实例的多个待流控请求进行过滤,比如上一时间窗口被流控节点拒绝流控的次数较多的请求,在当前时间窗口可以被服务实例优先过滤掉,不再将其发送给流控节点,使得服务实例具备一定精准流控的能力,同时降低流控节点进行集群流控的压力,减少服务实例与流控节点之间的通信消耗,提高流控效率。
59.如图2所示,图2是本技术提供的流量控制系统的结构示意图,如图2所示,该系统包括服务实例100、流控节点200和客户端300,其中,服务实例100、流控节点200和客户端300之间存在通信连接,具体可以是有线连接也可以是无线连接,本身不作具体限定。其中,租户客户端300的数量、服务实例100的数量和流控节点200的数量可以是一个或者多个,一个流控节点200可以与多个服务实例100进行通信,一个服务实例与一个客户端300进行通信,图2以1一个流控节点200、2个服务实例100和2个客户端300为例进行了举例说明,本技术不对服务实例100、流控节点200和客户端300的数量进行具体限定。
60.客户端300在租户所持有的终端设备上运行,该终端设备是部署有浏览器、拥有显示屏幕和租户能够输入代码的设备,比如计算机、智能手机、掌上处理设备、平板电脑、移动笔记本、增强现实(augmented reality,ar)设备、虚拟现实(virtual reality,vr)设备、一体化掌机、穿戴设备、车载设备、智能会议设备、智能广告设备、智能家电等等,此处不作具体限定。
61.可选地,客户端300在租户持有的终端设备的浏览器中运行,具体实现中,该浏览器中部署有基于web的程序编辑器,该程序编辑器通常基于html、javascript、css等常用的web开发技术构建,通过websocket协议或者其他通信协议使得客户端300与服务实例100进行通信,本技术不作具体限定。
62.流控节点200是物理服务器,比如x86、arm服务器等等,也可以是基于通用的物理服务器结合网络功能虚拟化(network functions virtualization,nfv)技术实现的虚拟机(virtual machine,vm),虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,本技术不作具体限定。
63.服务实例100是裸金属服务器(bare metal server,bms)、虚拟机或容器中的一种。其中,bms指的是通用的物理服务器,例如,arm服务器或者x86服务器;虚拟机指的是网络功能虚拟化(network functions virtualization,nfv)技术实现的、通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,容器指的是一组受到资源限制,彼此间相互隔离的进程。
64.具体实现中,服务实例100可以是云服务提供商提供的服务实例,比如云电脑、云
手机等等,也可以是应用服务商提供的服务实例,比如云游戏、云直播等等,还可以是其他有流控需求的服务实例,这里不一一举例说明。应理解,上述举例用于说明,本技术不对服务实例100向租户提供的服务类型进行具体限定。
65.服务实例100和流控节点200可进一步划分为多个单元模块,示例性地,如图2所示,服务实例100包括获取单元110、过滤单元120和存储单元130,流控节点200包括集群流控单元210。应理解,图2所示的划分方式用于举例说明,服务实例100和流控节点200还可以包括更多或者更少的单元模块,本技术不对此进行限定。
66.服务实例100中的获取单元110用于获取第一时间窗口的多个待流控请求和第二时间窗口内流控节点的流控结果。
67.在一实施例中,获取单元110获取租户在第一时间窗口发送的多个访问请求,根据单机流控策略从多个访问请求中获取多个待流控请求。其中,获取单元110可根据预先设定的流量阈值确定多个待流控请求。流量阈值可包括请求速度阈值,用于限制请求的访问速度、每秒用户请求数等等;流量阈值还可包括并发请求数量阈值,用于限制同时处理的请求数;流量阈值还可包括数据传输速率阈值,用于限制请求处理过程中,数据传输的速率,具体可包括上行速率和下行速率,对于数据传输量小的请求还可以进行特殊处理,比如不进行传输速率控制直接放过等等,本技术不对流量阈值的设定进行具体限定。
68.进一步地,获取单元110可通过单机流控策略结合上述流量阈值对租户发起的多个访问请求进行处理,获得多个待流控请求,其中,单机流控策略可以包括简单窗口、令牌桶、漏桶等。其中,简单窗口指的是在指定时间段内控制访问次数,访问次数超出阈值时,该访问请求将被确定为待流控请求;令牌桶指的是以恒定速率不断产生访问请求对应的令牌,如果令牌不被消耗,或者令牌被消耗大额速度小于产生的速度,令牌就会不断增多直至令牌桶被填满,之后再产生的令牌将会从桶中溢出,溢出的令牌对应的访问请求将被确定为待流控请求;漏桶策略通常用于流量整形或流量速率限制的场景中,漏桶策略可控制租户发起的访问请求注入至网络的速率,平滑网络上的突发流量,漏桶策略中租户发起的访问请求先进入到漏桶容器中,漏桶容器以一定的速率出水,也就是预先设置的漏桶流出策略,当流量流入速度过大时漏桶就会溢出,溢出的请求可被确定为待流控请求。应理解,上述单机流控策略用于举例说明,单机流控还可包括更多策略,这里不一一举例说明。
69.在一实施例中,第二时间窗口的开始时间早于第一时间窗口的开始时间。第二时间窗口可以与第一时间窗口相邻,也就是第二时间窗口发生后的下一时间窗口为第一时间窗口。应理解,时间窗口越大流控精度越低,但是消耗系统资源也越低,同理,时间窗口越小流控精度越大,但是系统资源消耗也越大,时间窗口的大小可以根据业务需求确定,本技术不对时间窗口的大小进行限定。
70.在一实施例中,上述第二时间窗口的流控结果包括第二时间窗口内服务实例将多个待流控请求发送给流控节点之后,流控节点通过或拒绝进行流控的待流控请求。可选的,上述第二时间窗口的流控结果还包括第二时间窗口内服务实例通过单机流控策略确定的多个待流控请求。参考前述内容可知,服务实例在获取待流控请求后,会将待流控请求发送至流控节点,流控节点根据集群流控策略确定这些待流控请求是否都需要进行流量控制,对于不需要进行流量控制的待流控请求进行拒绝,然后将通过或拒绝进行流控的待流控请求返回给服务实例100,服务实例100再对通过流控的待流控请求执行流控。因此,根据上一
时间窗口内流控节点的流控结果对当前时间窗口的待流控请求进行过滤,可以避免同一个或者同一类型的流控请求反复被流控节点拒绝而造成资源浪费。
71.需要说明的,服务实例100可记录多个时间窗口的流控结果,例如图2所示的,服务实例100记录有时间窗口1的流控结果、时间窗口2的流控结果、时间窗口3的流控结果等等。服务实例100的获取单元110在获取当前时间窗口的多个待流控请求时,可获取上一时间窗口的流控结果,其中,当前时间窗口和上一时间窗口是相邻的时间窗口,且上一时间窗口的开始时间早于当前时间窗口。同理可知,若第一时间窗口的下一时间窗口是第三时间窗口,获取单元110获取第三时间窗口的多个待流控请求时,可获取第一时间窗口的流控结果,以供过滤单元120根据第一时间窗口的流控结果对第三时间窗口的多个待流控请求进行过滤,以此类推,这里不一一举例说明。
72.服务实例100中的过滤单元120用于根据流控结果对多个待流控请求进行过滤,向流控节点发送过滤后的多个待流控请求。
73.具体实现中,过滤单元120可个根据上一时间窗口内流控节点的流控结果对当前时间窗口的多个待流控请求进行过滤。可以理解的,服务实例100将过滤后的待流控请求发送至流控节点200,可以减少流控节点200的处理压力,减少服务实例100和流控节点200之间的通信资源消耗,提高流控处理效率。并且,根据上一时间窗口内流控节点的流控结果对当前时间窗口的多个流控请求进行过滤,可以优先滤除上一时间窗口内被流控节点200拒绝的待流控请求,从而避免同一个或者同一类型的流控请求反复被流控节点200拒绝,造成资源浪费。
74.可选地,服务实例100也可以将过滤后的待流控请求的信息发送至流控节点200,从而减少通信量,提高通信效率,其中,待流控请求的信息可包括待流控请求的租户信息、请求的数据类型、请求的发起者所在的地址信息等等,还可包括其他流控节点200的集群流控策略所需的信息,本技术不一一举例说明。
75.在一实施例中,获取单元110获取的第二时间窗口内流控节点的流控结果包括第一类别,第一类别是第二时间窗口内流控节点200拒绝进行流量控制的多个请求的请求类别。过滤单元120从多个待流控请求中滤除请求类别是第一类别的待流控请求,获得过滤后的多个待流控请求。
76.参考前述内容可知,服务实例100在获取待流控请求后,会将待流控请求发送至流控节点200,流控节点200根据集群流控策略确定这些待流控请求是否都需要进行流量控制,对于不需要进行流量控制的待流控请求进行拒绝,上述第一类别可以是流控节点200拒绝进行流量控制的多个待流控请求中的一个或多个请求类别。
77.可选地,每个待流控请求的请求类别可以是根据租户信息确定的,租户信息可包括租户的名称、账户级别等等,举例来说,相同类别的待流控请求可以是相同租户发起的,或者相同账户级别的租户发起的,或者相同公司名下租户发起的等等,本技术不对此进行限定。
78.可选地,每个待流控请求的请求类别可以是根据租户请求的数据类型确定的,数据类型可包括数据所在的桶名、文件系统名等等,举例来说,相同类别的待流控请求所访问的数据可以是同一个桶内的数据,或者同一个文件系统中的数据等等,本技术不对此进行限定。
79.可选地,每个待流控请求的请求类别可以是根据租户使用的客户端信息确定的,客户端信息可包括客户端的ip地址或者所在的网段等等,举例来说,相同类别的待流控请求对应的客户端的ip地址相同,或者客户端所在的段地址相同等,本技术不对此进行限定。
80.可以理解的,第一类别的待流控请求在上一时间窗口被流控节点200拒绝,那么第一类别的待流控请求在当前时间窗口被流控节点200拒绝的可能性也很大。比如租户a的流量使用已达到阈值,租户a的访问请求上一时间周期已被流控节点200拒绝,那么当前时间周期租户a的访问请求也会被流控节点拒绝,因此服务实例100在当前时间窗口提前过滤掉第一类别的待流控请求,不但可以减少与流控节点200之间的通信量,提高通信效率,而且可以减少流控节点200的处理压力。
81.在一实施例中,第二时间窗口内第一类别的请求的数量大于或等于第一阈值,简单来说,第一类别是第二时间窗口内被流控节点200拒绝流控次数较多的请求的类别。具体实现中,服务实例100可记录每个时间窗口内流控节点的流控结果,每个时间窗口内流控节点的流控结果包括该时间窗口内被流控节点200拒绝流控次数较多的请求的类别,比如拒绝次数超过第一阈值的请求的类别。可以理解的,上一时间窗口被拒绝次数较多的请求类别在当前时间窗口优先拒绝,可以提高过滤效率,减少系统资源和通信资源的消耗。
82.可选地,服务实例100可通过排序算法和随机数算法记录每个时间窗口内被拒绝流控次数较多的请求的类别。确定每个待流控请求的请求类别和随机数,其中,请求类别可以用键(key)来表示,随机数可以用随机算法获得一个随机数字来表示,然后将部分待流控请求放入一个有限的数组中,通过排序算法对随机数进行排列,然后将剩余的待流控请求对应的随机数与数组中的最小值比较,若大于最小值,可以将该随机数与最小值进行替换,可以理解的,被拒绝的流控请求的类别数量越多,其随机数大于数组中最小值的可能性越大,被写入数组中的可能性越大,因此通过该方式获得的数组中记录的key对应的请求类别是被拒绝的流控请求次数较多的类别。
83.具体地,上述排序算法可以是小顶堆算法,服务实例100包括多个小顶堆,一个时间窗口对应一个小顶堆,小顶堆可包括多个节点,每个节点对应一个键(key)和一个随机数,其中,不同的键对应不同的待流控请求的类别,小顶堆中每个节点的随机数都小于或等于左右孩子节点的随机数,因此小顶堆的根节点对应的随机数是该小顶堆中最小的随机数。
84.具体实现中,在小顶堆中的节点数量未达到上限时,当前时间窗口内服务实例100接收到被流控节点200拒绝的待流控请求后,先根据待流控请求的请求类别确定待流控请求的键ki(i=1,2,3,
…
,n),根据随机算法确定待流控请求的随机数ai,再将(ki,ai)作为一个新增节点写入当前时间窗口对应的小顶堆中,以此类推,直至小顶堆中的节点数量达到上限,其中,小顶堆可以在节点数量达到上限后重新排列节点,使得小顶堆中每个节点的随机数都小于或等于左右孩子节点的随机数,也可以写入一个新增节点进行一次重新排列,本技术不对此进行限定。
85.当小顶堆中的节点数量达到上限时,当前时间窗口内服务实例100接收到被流控节点200拒绝的待流控请求后,先根据待流控请求的请求类别确定待流控请求的键ki,根据随机算法确定待流控请求的随机数ai,然后确定当前小顶堆的根节点的随机数a0是否小于ai,在a0《ai的情况下,删除当前的根节点,将(ki,ai)作为新增节点加入小顶堆,否则,处理下
一个待流控请求,不对当前的小顶堆进行处理。以此类推,直至当前时间窗口内被流控节点200拒绝的待流控请求全部处理完毕,此时小顶堆中的节点的k对应的请求类别即为当前时间窗口内,被流控节点200拒绝次数较多的请求类别。
86.可以理解的,被流控节点200拒绝次数越多,其随机数ai大于小顶堆根节点的可能性越大,其被写入小顶堆中的可能性越大,因此通过上述随机数和小顶堆结合的算法,可以记录出当前时间窗口内被流控节点200拒绝次数较多的请求类别,该方法只需要简单的随机算法和小顶堆算法即可实现,无需挨个统计每个待流控请求进行计算,处理效率高,无论待流控请求的数量多少,小顶堆中记录的是固定数量的键key和随机数a,占用内存低,降低了服务实例100维护每个时间窗口内流控节点的流控结果所需的处理压力。
87.需要说明的,上述排序算法还可以是其他排序速度快、效率稳定的排序算法,比如快排序、归并排序等等,本技术不再一一展开举例说明。
88.在一实施例中,获取单元110获取的第二时间窗口内流控节点的流控结果还可包括第一类别的流控拒绝概率,其中,第二时间窗口内第一类别的流控拒绝概率大于或等于第二阈值,流控拒绝概率是根据第二时间窗口内第一类别的请求的总数量和被流控节点拒绝的第一类别的请求的数量确定的。
89.换句话说,服务实例100记录的每个时间窗口内流控节点的流控结果中,还包括目标类别的流控拒绝概率,其中,目标类别是时间窗口内被拒绝流控次数较多的待流控请求的请求类别,也可以理解为是上述数组(比如小顶堆,为了便于理解,下文统一以数组为小顶堆为例进行描述)中记录的key对应的请求类别。过滤单元120可以优先过滤掉这些流控拒绝概率较高的请求类别对应的待流控请求。
90.在一实施例中,第二时间窗口内流控节点的流控结果包括数组的统计结果,该数组的统计结果包括数组中的键对应的请求类别的流控拒绝概率。
91.具体地,统计结果可以是根据小顶堆确定的,服务实例100可统计小顶堆中记录的目标类别对应请求的成功次数和失败次数,根据失败次数和被流控的总次数获得上述流控拒绝概率。举例来说,服务实例100可通过哈希映射(hash map)来记录小顶堆中的请求类别被流控的成功次数和失败次数,流控拒绝概率可通过失败次数除以总次数获得。应理解,上述举例用于说明,本技术不作具体限定。
92.进一步地,过滤单元120可结合抽样技术对待流控请求进行过滤。简单来说,获取单元110通过单机流控策略确定当前时间窗口(第一时间窗口)的待流控请求后,过滤单元120获取上一时间窗口(第二时间窗口)内流控节点流控结果,从第一时间窗口的待流控请求中抽取部分待流控请求,根据第二时间窗口内流控节点的流控结果对部分待流控请求进行处理,从而减少过滤单元120对待流控请求进行过滤时的计算量,提高过滤的效率,进而提高流控效率。
93.在一实施例中,获取单元110在根据单机流控策略确定当前时间窗口的待流控请求时,也可以根据上一时间窗口中被流控节点200通过次数较多的待流控请求的类别,将其优先确定为当前时间窗口的待流控请求。具体实现中,获取单元110可根据上一时间窗口中的hash map,确定hash map中记录的请求类别的流控通过概率,将流控通过概率高于第三阈值的请求类别优先确定为当前时间窗口的待流控请求。
94.可以理解的,该类别的待流控请求在上一时间窗口被通过流控的概率高,那么该
类别的待流控请求在当前时间窗口被通过的可能性也会提高,将其直接确定为待流控请求,可以提高获取单元110确定待流控请求的效率,减少单机流控策略需要确定的请求的数量,使得服务实例100消耗的计算资源量降低。
95.进一步的,获取单元110也可以结合抽样技术对流控通过概率进行统计,租户在第一时间窗口发送的多个访问请求后,获取单元110可以从多个访问请求中抽取部分访问请求,获取抽样的访问请求的抽样请求类别,根据hash map中记录的上一时间窗口内,该抽样请求类别的流控通过概率,确定同一流控概率高于第三阈值的请求类别优先确定为当前时间窗口内的待流控请求。
96.举例来说,时间窗口大小为1秒,租户在1秒内发起了1万个访问请求,获取单元可以从中抽取1000个访问请求,确定1000个访问请求的请求种类包括种类1、种类2和种类3,其中,hash map记录了在上1秒中,种类1的访问请求的流控通过概率为10%,种类2的访问请求的流控通过概率为15%,种类3的访问请求的流控通过概率为60%,假设第三阈值为50%,那么种类3的流控通过概率符合条件,服务实例100可以将1000个访问请求中,请求种类为种类3的访问请求确定为待流控请求。应理解,上述举例用于说明,本技术不对此进行限定。
97.需要说明的,过滤单元120在对待流控请求进行过滤时,可以不对上述流控通过概率高的请求进行过滤。换句话说,若某类别的待流控请求的流控拒绝概率高于第二阈值,流控通过概率也高于第三阈值,过滤单元120不对该类别的待流控请求进行过滤,该类别的待流控请求在当前时间窗口会被发送至流控节点200,由流控节点200根据集群流控策略来决定是否对其进行流控。
98.综上可知,本技术提供的流量控制系统中,服务实例在确定当前时间窗口的多个待流控请求后,可根据上一时间窗口的流控结果对当前时间窗口的多个待流控请求进行过滤,比如上一时间窗口被流控节点拒绝流控的次数较多的请求,在当前时间窗口可以被服务实例优先过滤掉,不再将其发送给流控节点,使得服务实例具备一定精准流控的能力,同时降低流控节点进行集群流控的压力,减少服务实例与流控节点之间的通信消耗,提高流控效率。
99.图3是本技术提供的一种流量控制方法,该方法可应用于如图2所示的流量控制系统中,如图3所示,该方法可包括以下步骤:
100.步骤s310:服务实例获取第一时间窗口的多个待流控请求以及第二时间窗口内流控节点的流控结果,其中,第二时间窗口的开始时间早于第一时间窗口。该步骤可以由图2实施例中的服务实例100的获取单元110实现。
101.具体实现中,上述第二时间窗口内流控节点的流控结果包括第二时间窗口内服务实例将多个待流控请求发送给流控节点之后,流控节点通过或拒绝进行流控的待流控请求。
102.可选的,上述第二时间窗口内流控节点的流控结果还包括第二时间窗口内服务实例通过单机流控策略确定的多个待流控请求。
103.参考前述内容可知,服务实例在获取待流控请求后,会将待流控请求发送至流控节点,流控节点根据集群流控策略确定这些待流控请求是否都需要进行流量控制,对于不需要进行流量控制的待流控请求进行拒绝,然后将通过或拒绝进行流控的待流控请求返回
给服务实例100,服务实例100再对通过流控的待流控请求执行流控。因此,根据上一时间窗口内流控节点的流控结果对当前时间窗口的待流控请求进行过滤,可以避免同一个或者同一类型的流控请求反复被流控节点拒绝而造成资源浪费。
104.在一实施例中,服务实例可获取租户在第一时间窗口发送的多个访问请求,根据单机流控策略从多个访问请求中获取多个待流控请求,服务实例包括虚拟机、容器和裸金属服务器。其中,上述虚拟机、容器和裸金属服务器的描述可以参考图2实施例,这里不重复赘述。上述单机流控策略的描述可参考图2实施例,这里不重复赘述。
105.在一实施例中,第二时间窗口的开始时间早于第一时间窗口。第二时间窗口可以与第一时间窗口相邻,也就是第二时间窗口发生后的下一时间窗口为第一时间窗口。服务实例可包括多个时间窗口内流控节点的流控结果,例如图2所示的,服务实例100记录有时间窗口1的流控结果、时间窗口2的流控结果、时间窗口3的流控结果等等。应理解,关于时间窗口的描述可参考图2实施例,这里不重复赘述。
106.步骤s320:服务实例根据第二时间窗口内流控节点的流控结果对多个待流控请求进行过滤,向流控节点发送过滤后的多个待流控请求。该步骤可以由图2实施例中的过滤单元120实现。
107.具体实现中,服务实例可个根据上一时间窗口内流控节点的流控结果对当前时间窗口的多个待流控请求进行过滤。可以理解的,将过滤后的待流控请求发送至流控节点,可以减少流控节点的处理压力,减少服务实例和流控节点之间的通信资源消耗,提高流控处理效率。并且,根据上一时间窗口内流控节点的流控结果对当前时间窗口的多个流控请求进行过滤,可以优先滤除上一时间窗口内被流控节点拒绝的待流控请求,从而避免同一个或者同一类型的流控请求反复被流控节点拒绝,造成资源浪费。
108.在一实施例中,第二时间窗口内流控节点的流控结果包括第一类别,第一类别是第二时间窗口内流控节点拒绝进行流量控制的多个请求的请求类别,服务实例可从多个待流控请求中滤除请求类别是第一类别的待流控请求。
109.可选地,每个待流控请求的请求类别可以是根据租户信息确定的,租户信息可包括租户的名称、账户级别等等,举例来说,相同类别的待流控请求可以是相同租户发起的,或者相同账户级别的租户发起的,或者相同公司名下租户发起的等等,本技术不对此进行限定。
110.可选地,每个待流控请求的请求类别可以是根据租户请求的数据类型确定的,数据类型可包括数据所在的桶名、文件系统名等等,举例来说,相同类别的待流控请求所访问的数据可以是同一个桶内的数据,或者同一个文件系统中的数据等等,本技术不对此进行限定。
111.可选地,每个待流控请求的请求类别可以是根据租户使用的客户端信息确定的,客户端信息可包括客户端的ip地址或者所在的网段等等,举例来说,相同类别的待流控请求对应的客户端的ip地址相同,或者客户端所在的段地址相同等,本技术不对此进行限定。
112.在一实施例中,第二时间窗口内第一类别的请求的数量大于或等于第一阈值。简单来说,第一类别是第二时间窗口内被流控节点拒绝流控次数较多的请求的类别。具体实现中,服务实例可记录每个时间窗口内流控节点的流控结果,每个时间窗口内流控节点的流控结果包括该时间窗口内被流控节点拒绝流控次数较多的请求的类别,比如拒绝次数超
过第一阈值的请求的类别。可以理解的,上一时间窗口被拒绝次数较多的请求类别在当前时间窗口优先拒绝,可以提高过滤效率,减少系统资源和通信资源的消耗。
113.在一实施例中,第二时间窗口内流控节点的流控结果包括数组,该数组用于记录第二时间窗口内被流控节点拒绝的待流控请求的键(key)和随机数,其中,相同请求类别的待流控请求的键相同,数组中的每个键对应一个随机数,该数组按照随机数的大小对键进行排序,第一类别对应的随机数大于或等于数组中的最小随机数。
114.具体地,服务实例可确定每个待流控请求的请求类别和随机数,其中,请求类别可以用键来表示,随机数可以用随机算法获得一个随机数字来表示,然后将部分待流控请求放入一个有限的数组中,通过排序算法对随机数进行排列,然后将剩余的待流控请求对应的随机数与数组中的最小值比较,若大于最小值,可以将该随机数与最小值进行替换,可以理解的,被拒绝的流控请求的类别数量越多,其随机数大于数组中最小值的可能性越大,被写入数组中的可能性越大,因此通过该方式获得的数组中记录的key对应的请求类别是被拒绝的流控请求次数较多的类别。
115.具体实现中,上述排序算法可以是小顶堆算法,服务实例包括多个小顶堆,一个时间窗口对应一个小顶堆,小顶堆可包括多个节点,每个节点对应一个键(key)和一个随机数,其中,不同的键对应不同的待流控请求的类别,小顶堆中每个节点的随机数都小于或等于左右孩子节点的随机数,因此小顶堆的根节点对应的随机数是该小顶堆中最小的随机数。
116.在小顶堆中的节点数量未达到上限时,当前时间窗口内服务实例接收到被流控节点200拒绝的待流控请求后,先根据待流控请求的请求类别确定待流控请求的键ki(i=1,2,3,
…
,n),根据随机算法确定待流控请求的随机数ai,再将(ki,ai)作为一个新增节点写入当前时间窗口对应的小顶堆中,以此类推,直至小顶堆中的节点数量达到上限,其中,小顶堆可以在节点数量达到上限后重新排列节点,使得小顶堆中每个节点的随机数都小于或等于左右孩子节点的随机数,也可以写入一个新增节点进行一次重新排列,本技术不对此进行限定。
117.在小顶堆中的节点数量达到上限时,当前时间窗口内服务实例接收到被流控节点拒绝的待流控请求后,先根据待流控请求的请求类别确定待流控请求的键ki,根据随机算法确定待流控请求的随机数ai,然后确定当前小顶堆的根节点的随机数a0是否小于ai,在a0《ai的情况下,删除当前的根节点,将(ki,ai)作为新增节点加入小顶堆,否则,处理下一个待流控请求,不对当前的小顶堆进行处理。以此类推,直至当前时间窗口内被流控节点拒绝的待流控请求全部处理完毕,此时小顶堆中的节点的k对应的请求类别即为当前时间窗口内,被流控节点拒绝次数较多的请求类别。
118.举例来说,假设小顶堆的结构如图4所示,该小顶堆可记录6个key,当前时间窗口假设共有10个待流控请求,根据待流控请求的请求类别确定待流控请求的键ki,根据随机算法确定待流控请求的随机数ai,获得每个待流控请求对应的(ki,ai)可以如图4所示。该小顶堆的处理过程可以如下:
119.步骤1、在小顶堆中的节点数量未达到上限时,可以将前6个待流控请求对应的(ki,ai)作为新增节点一一写入小顶堆中,小顶堆中的各个节点重新排序后,可获得如图4示的小顶堆,其中,根节点的随机数是小顶堆中全部节点对应随机数的最小值,虚线圆圈代表
已被写入小顶堆中的(ki,ai),实线圆圈代表还未被处理的(ki,ai)。
120.步骤2、在小顶堆中的节点数量达到上限时,以图4中所示的待流控请求的ki=k1,随机数ai=5为例,由于图4中小顶堆的根节点的随机数a0=1《ai=5,因此将当前的根节点a0=1删除,如图5所示,删除根节点的步骤流程可以如下:
121.21、移除根节点,将堆底节点移动至堆顶作为新的根节点,如图5所示,随机数1对应的根节点被移除,随机数5对应的堆底节点移动至堆顶。
122.22、交换子节点与左右孩子节点之间的位置,使得小顶堆中子节点的随机数小于左右孩子节点的随机数。
123.具体地,如图5所示,子节点的随机数5大于左侧孩子节点的随机数2,因此将随机数6对应的节点与随机数2对应的节点位置进行交换,交换后的子节点的随机数2小于左侧孩子节点的随机数6,同时小于右侧孩子节点的随机数3。
124.同理,随机数6对应的子节点与随机数4对应的孩子节点进行交换,从而获得如图5所示的小顶堆,该小顶堆中根节点对应的随机数最小,且每个子节点对应的随机数小于左右孩子节点对应的随机数。
125.步骤3、将新增节点(k1,5)加入小顶堆。如图6所示,新增节点至小顶堆的步骤流程可以如下:
126.31、将新增节点(k1,5)加入小顶堆的堆底。
127.32、交换子节点与左右孩子节点之间的位置,使得子节点的随机数小于左右孩子节点的随机数,该步骤与上述步骤22类似,如图6所示,将随机数5对应的孩子节点与随机数6对应的子节点进行交换,交换后的子节点的随机数5小于左侧孩子节点的随机数6,从而获得如图6所示的小顶堆。
128.同理,图4~图6中下一个待流控请求的键为k2,随机数为7,由于下一个待流控请求的随机数7大于图5中小顶堆的根节点的随机数2,因此可以将图6中的根节点删除,阐述根节点的步骤流程可参考上述步骤21和步骤22,然后再将新增节点(k2,7)加入小顶堆,加入新增节点的步骤流程可以参考上述步骤31和步骤32,以此类推处理下一个待流控请求,直至当前时间窗口的全部待流控请求被处理完毕,这里不再一一展开赘述。
129.可以理解的,被流控节点拒绝次数越多,其随机数ai大于小顶堆根节点的可能性越大,其被写入小顶堆中的可能性越大,因此通过上述随机数和小顶堆结合的算法,可以记录出当前时间窗口内被流控节点拒绝次数较多的请求类别,该方法只需要简单的随机算法和小顶堆算法即可实现,无需挨个统计每个待流控请求进行计算,处理效率高,无论待流控请求的数量多少,小顶堆中记录的是固定数量的键key和随机数a,占用内存低,降低了服务实例维护每个时间窗口内流控节点的流控结果所需的处理压力。
130.需要说明的,上述排序算法还可以是其他排序速度快、效率稳定的排序算法,比如快排序、归并排序等等,本技术不再一一展开举例说明。
131.在一实施例中,第二时间窗口内第一类别的流控拒绝概率大于或等于第二阈值,其中,流控拒绝概率是根据第二时间窗口内第一类别的待流控请求的总数量和被流控节点拒绝的第一类别的待流控请求的数量确定的。
132.换句话说,服务实例记录的每个时间窗口内流控节点的流控结果中,还包括目标类别的流控拒绝概率,其中,目标类别是时间窗口内被拒绝流控次数较多的待流控请求的
请求类别,也可以理解为是上述数组(比如小顶堆,为了便于理解,下文统一以数组为小顶堆为例进行描述)中记录的key对应的请求类别。服务实例可以优先过滤掉这些流控拒绝概率较高的请求类别对应的待流控请求。
133.具体地,服务实例可统计小顶堆中记录的目标类别对应请求的成功次数和失败次数,进而确定目标类别流控拒绝概率,根据失败次数和被流控的总次数确定流控拒绝概率。举例来说,服务实例可通过哈希映射(hash map)来记录小顶堆中的请求类别被流控的成功次数和失败次数,流控拒绝概率可通过失败次数除以总次数获得。应理解,上述举例用于说明,本技术不作具体限定。
134.进一步地,服务实例可结合抽样技术对待流控请求进行过滤。简单来说,通过单机流控策略确定当前时间窗口(第一时间窗口)的待流控请求后,获取上一时间窗口(第二时间窗口)内流控节点流控结果,从第一时间窗口的待流控请求中抽取部分待流控请求,根据第二时间窗口内流控节点的流控结果对部分待流控请求进行处理,从而减少对待流控请求进行过滤时的计算量,提高过滤的效率,进而提高流控效率。
135.在一实施例中,第二时间窗口内流控节点的流控结果包括数组的统计结果,该数组的统计结果包括数组中的键对应的请求类别的流控拒绝概率。
136.具体地,统计结果可以是根据小顶堆确定的,服务实例可统计小顶堆中记录的目标类别对应请求的成功次数和失败次数,根据失败次数和被流控的总次数获得上述流控拒绝概率。举例来说,服务实例可通过哈希映射(hash map)来记录小顶堆中的请求类别被流控的成功次数和失败次数,流控拒绝概率可通过失败次数除以总次数获得。应理解,上述举例用于说明,本技术不作具体限定。
137.可以理解的,该类别的待流控请求在上一时间窗口被通过流控的概率高,那么该类别的待流控请求在当前时间窗口被通过的可能性也会提高,将其直接确定为待流控请求,可以提高确定待流控请求的效率,减少单机流控策略需要确定的请求的数量,使得服务实例100消耗的计算资源量降低。
138.进一步的,也可以结合抽样技术对流控通过概率进行统计,租户在第一时间窗口发送的多个访问请求后,可以从多个访问请求中抽取部分访问请求,获取抽样的访问请求的抽样请求类别,根据hash map中记录的上一时间窗口内,该抽样请求类别的流控通过概率,确定同一流控概率高于第三阈值的请求类别优先确定为当前时间窗口内的待流控请求。
139.需要说明的,在对待流控请求进行过滤时,可以不对上述流控通过概率高的请求进行过滤。换句话说,若某类别的待流控请求的流控拒绝概率高于第二阈值,流控通过概率也高于第三阈值,不对该类别的待流控请求进行过滤,该类别的待流控请求在当前时间窗口会被发送至流控节点,由流控节点根据集群流控策略来决定是否对其进行流控。
140.综上可知,本技术提供的流量控制方法,服务实例在确定当前时间窗口的多个待流控请求后,可根据上一时间窗口内流控节点的流控结果对当前时间窗口的多个待流控请求进行过滤,比如上一时间窗口被流控节点拒绝流控的次数较多的请求,在当前时间窗口可以被服务实例优先过滤掉,不再将其发送给流控节点,使得服务实例具备一定精准流控的能力,同时降低流控节点进行集群流控的压力,减少服务实例与流控节点之间的通信消耗,提高流控效率。
141.图7是本技术提供的一种计算设备的结构示意图,该计算设备700是图1至图6实施例中的服务实例,其中,上述服务实例是物理服务器、虚拟机或容器中的一种。
142.进一步地,计算设备700包括处理器701、存储单元702、存储介质703和通信接口704,其中,处理器701、存储单元702、存储介质703和通信接口704通过总线705进行通信,也通过无线传输等其他手段实现通信。
143.处理器701由至少一个通用处理器构成,例如cpu、npu或者cpu和硬件芯片的组合。上述硬件芯片是专用集成电路(application-specific integrated circuit,asic)、编程逻辑器件(programmable logic device,pld)或其组合。上述pld是复杂编程逻辑器件(complex programmable logic device,cpld)、现场编程逻辑门阵列(field-programmable gate array,fpga)、通用阵列逻辑(generic array logic,gal)或其任意组合。处理器701执行各种类型的数字存储指令,例如存储在存储单元702中的软件或者固件程序,它能使计算设备700提供较宽的多种服务。
144.具体实现中,作为一种实施例,处理器701包括一个或多个cpu,例如图7中所示的cpu0和cpu1。
145.在具体实现中,作为一种实施例,计算设备700也包括多个处理器,例如图7中所示的处理器701和处理器706。这些处理器中的每一个可以是一个单核处理器(single-cpu),也可以是一个多核处理器(multi-cpu)。这里的处理器指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
146.存储单元702用于存储程序代码,并由处理器701来控制执行,以执行上述图1-图7中任一实施例中服务实例的处理步骤。程序代码中包括一个或多个软件单元,上述一个或多个软件单元是图2实施例中的获取单元和过滤单元,其中,获取单元用于获取第一时间窗口的多个待流控请求以及第二时间窗口内流控节点的流控结果,过滤单元用于根据第二时间窗口内流控节点的流控结果对第一时间窗口的待流控请求进行过滤,向流控节点发送过滤后的多个待流控请求。上述具体实现方式参考图3~图6方法实施例,此处不再赘述。
147.存储单元702包括只读存储器和随机存取存储器,并向处理器701提供指令和数据。存储单元702还包括非易失性随机存取存储器。例如,存储单元702还存储设备类型的信息。
148.存储单元702是易失性存储器或非易失性存储器,或包括易失性和非易失性存储器两者。其中,非易失性存储器是只读存储器(read-only memory,rom)、编程只读存储器(programmable rom,prom)、擦除编程只读存储器(erasable prom,eprom)、电擦除编程只读存储器(electrically eprom,eeprom)或闪存。易失性存储器是随机存取存储器(random access memory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram用,例如静态随机存取存储器(static ram,sram)、动态随机存取存储器(dram)、同步动态随机存取存储器(synchronous dram,sdram)、双倍数据速率同步动态随机存取存储器(double data date sdram,ddr sdram)、增强型同步动态随机存取存储器(enhanced sdram,esdram)、同步连接动态随机存取存储器(synchlink dram,sldram)和直接内存总线随机存取存储器(direct rambus ram,dr ram)。还是硬盘(hard disk)、u盘(universal serial bus,usb)、闪存(flash)、sd卡(secure digital memory card,sd card)、记忆棒等等,硬盘是硬盘驱动器(hard disk drive,hdd)、固态硬盘(solid state disk,ssd)、机械
硬盘(mechanical hard disk,hdd)等,本技术不作具体限定。
149.存储介质703是存储数据的载体,比如硬盘(hard disk)、u盘(universal serial bus,usb)、闪存(flash)、sd卡(secure digital memory card,sd card)、记忆棒等等,硬盘可以是硬盘驱动器(hard disk drive,hdd)、固态硬盘(solid state disk,ssd)、机械硬盘(mechanical hard disk,hdd)等,本技术不作具体限定。
150.通信接口704为有线接口(例如以太网接口),为内部接口(例如高速串行计算机扩展总线(peripheral component interconnect express,pcie)总线接口)、有线接口(例如以太网接口)或无线接口(例如蜂窝网络接口或使用无线局域网接口),用于与其他服务器或单元进行通信,具体实现中,通信接口704用于接收报文,以供处理器701或处理器706对该报文进行处理。
151.总线705是快捷外围部件互联标准(peripheral component interconnect express,pcie)总线,或扩展工业标准结构(extended industry standard architecture,eisa)总线、统一总线(unified bus,ubus或ub)、计算机快速链接(compute express link,cxl)、缓存一致互联协议(cache coherent interconnect for accelerators,ccix)等。总线705分为地址总线、数据总线、控制总线等。
152.总线705除包括数据总线之外,还包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线705。
153.需要说明的,图7仅仅是本技术实施例的一种能的实现方式,实际应用中,计算设备700还包括更多或更少的部件,这里不作限制。关于本技术实施例中未示出或未描述的内容,参见前述图1-图6实施例中的相关阐述,这里不再赘述。
154.本技术实施例提供一种计算机读存储介质,包括:该计算机读存储介质中存储有计算机指令;当该计算机指令在计算机上运行时,使得该计算机执行上述方法实施例所述的流量控制方法。
155.本技术实施例提供了一种包含指令的计算机程序产品,包括计算机程序或指令,当该计算机程序或指令在计算机上运行时,使得该计算机执行上述方法实施例所述的流量控制方法。
156.上述实施例,全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例全部或部分地以计算机程序产品的形式实现。计算机程序产品包括至少一个计算机指令。在计算机上加载或执行计算机程序指令时,全部或部分地产生按照本发明实施例的流程或功能。计算机为通用计算机、专用计算机、计算机网络、或者其他编程装置。计算机指令存储在计算机读存储介质中,或者从一个计算机读存储介质向另一个计算机读存储介质传输,例如,计算机指令从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机读存储介质是计算机能够存取的任何用介质或者是包含至少一个用介质集合的服务器、数据中心等数据存储节点。用介质是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,高密度数字视频光盘(digital video disc,dvd)、或者半导体介质。半导体介质是ssd。
157.以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,轻易想到各种等效的修复或替换,这
些修复或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
技术特征:
1.一种流量控制方法,其特征在于,所述方法包括:服务实例获取第一时间窗口的多个待流控请求以及第二时间窗口内流控节点的流控结果,其中,所述第二时间窗口的开始时间早于所述第一时间窗口的开始时间;所述服务实例根据所述流控结果对所述多个待流控请求进行过滤,向所述流控节点发送过滤后的多个待流控请求。2.根据权利要求1所述的方法,其特征在于,所述第二时间窗口内流控节点的流控结果包括第一类别,所述第一类别是所述第二时间窗口内所述流控节点拒绝进行流量控制的多个待流控请求的请求类别;所述服务实例根据所述流控结果对所述多个待流控请求进行过滤包括:所述服务实例从所述多个待流控请求中滤除请求类别是所述第一类别的待流控请求。3.根据权利要求2所述的方法,其特征在于,所述第二时间窗口内所述第一类别的待流控请求的数量大于或等于第一阈值。4.根据权利要求2或3所述的方法,其特征在于,所述第二时间窗口内所述第一类别的流控拒绝概率大于或等于第二阈值,其中,所述流控拒绝概率是根据所述第二时间窗口内所述第一类别的待流控请求的总数量和被所述流控节点拒绝的第一类别的待流控请求的数量确定的。5.根据权利要求2至4任一权利要求所述的方法,其特征在于,所述第二时间窗口内流控节点的流控结果包括数组,所述数组用于记录所述第二时间窗口内被所述流控节点拒绝的待流控请求的键和随机数,其中,相同请求类别的待流控请求的键相同,所述数组中的每个键与一个随机数对应,所述数组按照所述随机数的大小对所述键进行排序,所述第一类别对应的随机数大于或等于所述数组中的最小随机数。6.根据权利要求5所述的方法,其特征在于,所述第二时间窗口内流控节点的流控结果包括数组的统计结果,所述数组的统计结果包括所述数组中的键对应的请求类别的流控拒绝概率。7.根据权利要求1至6任一权利要求所述的方法,其特征在于,所述服务实例包括下述的一种或多种:虚拟机、容器、裸金属服务器。8.一种服务实例,其特征在于,所述服务实例包括:获取单元,用于获取第一时间窗口的多个待流控请求以及第二时间窗口内流控节点的流控结果,其中,所述第二时间窗口的开始时间早于所述第一时间窗口的开始时间;过滤单元,用于根据所述流控结果对所述多个待流控请求进行过滤,向所述流控节点发送过滤后的多个待流控请求。9.根据权利要求8所述的服务实例,其特征在于,所述第二时间窗口内流控节点的流控结果包括第一类别,所述第一类别是所述第二时间窗口内所述流控节点拒绝进行流量控制的多个请求的请求类别;所述过滤单元,用于从所述多个待流控请求中滤除请求类别是所述第一类别的待流控请求。10.根据权利要求9所述的服务实例,其特征在于,所述第二时间窗口内所述第一类别的待流控请求的数量大于或等于第一阈值。
11.根据权利要求9或10所述的服务实例,其特征在于,所述第二时间窗口内所述第一类别的流控拒绝概率大于或等于第二阈值,其中,所述流控拒绝概率是根据所述第二时间窗口内所述第一类别的待流控请求的总数量和被所述流控节点拒绝的第一类别的待流控请求的数量确定的。12.根据权利要求9至11任一权利要求所述的服务实例,其特征在于,所述第二时间窗口内流控节点的流控结果包括数组,所述数组用于记录所述第二时间窗口内被所述流控节点拒绝的待流控请求的键和随机数,其中,相同请求类别的待流控请求的键相同,所述数组中的每个键与一个随机数对应,所述数组按照所述随机数的大小对所述键进行排序,所述第一类别对应的随机数大于或等于所述数组中的最小随机数。13.根据权利要求12所述的服务实例,其特征在于,所述第二时间窗口内流控节点的流控结果包括数组的统计结果,所述数组的统计结果包括所述数组中的键对应的请求类别的流控拒绝概率。14.根据权利要求8至13任一权利要求所述的服务实例,其特征在于,所述服务实例包括虚拟机、容器和裸金属服务器。15.一种流量控制系统,所述流量控制系统包括至少一个服务实例和流控节点,其中,所述服务实例执行如权利要求1至7中任一权利要求所述的方法。16.一种计算设备,其特征在于,所述计算设备包括处理器和存储器,所述存储器用于存储代码,所述处理器用于执行所述代码实现如权利要求1至7任一权利要求所述的方法。17.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在计算设备上运行时,所述计算设备执行如权利要求1至7任一权利要求所述的方法。18.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序,当所述计算机程序被计算设备读取并执行时,所述计算设备执行如权利要求1至7任一权利要求所述的方法。
技术总结
本申请提供了一种流量控制方法、系统及相关设备,该方法包括以下步骤:服务实例获取第一时间窗口的多个待流控请求以及第二时间窗口内流控节点的流控结果,其中,第二时间窗口的开始时间早于第一时间窗口的开始时间,服务实例根据流控结果对多个待流控请求进行过滤,向流控节点发送过滤后的多个待流控请求,使得服务实例具有精准流控的能力,提前过滤掉流控节点有极大可能拒绝掉的待流控请求,减少服务实例与流控节点之间的通信消耗,降低流控节点进行集群流控的压力,提高流控效率。提高流控效率。提高流控效率。
技术研发人员:陈智殷 白平昌 丁敬文
受保护的技术使用者:华为云计算技术有限公司
技术研发日:2022.01.19
技术公布日:2023/8/1
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/