1.本发明属于流量管理的技术领域,尤其涉及一种用于网络资源受限的业务系统的访问的流量管理方法、装置、设备和存储介质。
背景技术:2.限流是对系统按照预设的规则进行流量限制的一种机制,它确保接收的流量不会超过系统所能承载的上限,以保证系统的可用性,即限流的主要目的是保证系统的高可用。
3.目前市面上已有的、与本专利最相似的技术,包括以下几种:
4.1)限制服务部署数量的技术。即限制服务部署的服务器数量,对每一台服务器进行单独授权,从而限制部署数量,并利用硬件必然存在的性能上限来实现对服务质量的限制。
5.2)限制服务并发数量的技术。即通过限制服务同一时间能够处理的服务请求数量,实现对服务质量的限制。
6.3)限制服务事务数量的技术。即通过限制服务单位时间内能够处理的业务逻辑的数量,实现对服务质量的限制。
7.限制服务部署数量的技术缺陷在于,其可行性依赖服务部署的服务器硬件信息的唯一性。其缺陷主要有以下几点:首先,硬件不能更换。一旦有提供了唯一标识信息的硬件损坏或更换,授权就会失效,需要重新授权。其次,很难兼容虚拟化技术。
8.限制服务并发数量的技术的缺陷在于,限制服务并发数量的技术在实现上比较简单,但是在分布式服务集群中使用该类技术会导致整体架构变得复杂,且很难得到一个可以充分利用服务器性能和购买的授权的方案。
9.限制服务事务数量的技术与限制服务并发数量的技术存在同样的问题,即不适合目前被广泛应用的分布式集群服务的限流。另外,限制服务事务数量的技术还存在无法区分事务类型的问题。例如,有的事务简单而高效,而有的需要消耗大量资源。有的基础事务会被大量频繁执行,而有的则很少被执行却非常重要。不区分事务类型,同样会导致服务器资源和授权使用不充分的问题。
技术实现要素:10.本发明的目的是提供一种流量管理方法、装置、设备和存储介质,用于网络资源受限的业务系统的访问,通过对每个访问源进行授权注册,以分钟级进行流量监控,实现分布式集群服务的限流。
11.为解决上述问题,本发明的技术方案为:
12.一种流量管理方法,用于网络资源受限的业务系统的访问,包括:
13.服务端接收目标访问源发送的流量授权请求,判断通过当前的可分配流量、今牌桶算法及流量授权请求中的请求消耗的授权流量是否能获取流量授权响应信息;若是,则所述服务端将所述流量授权响应信息发送到业务系统;若否,则返回异常响应信息;
14.根据所述流量授权响应信息及业务系统的被访问请求信息生成访问服务响应,并将访问服务响应返回给所述目标访问源,使目标访问源获得流量授权。
15.根据本发明一实施例,所述根据所述流量授权响应信息及业务系统的被访问请求信息生成访问服务响应,进一步包括:
16.所述流量授权响应信息中包括预设加密算法及密钥信息,所述服务端根据所述流量授权响应中的所述预设加密算法及密钥信息,验证所述流量授权响应;若验证通过,则根据所述流量授权响应及所述业务系统的被访问请求信息生成访问服务响应,若未验证通过,则生成验证不通过信息。
17.根据本发明一实施例,所述目标访问源获得流量授权之后,还包括:
18.获取集群限流信息,所述集群限流信息包括集群总限流和服务集群内各个服务的当前运行状态信息;
19.根据所述集群总限流和所述当前运行状态信息,更新服务本地缓存中的限流额度,根据所述本地缓存中的限流额度进行限流控制。
20.根据本发明一实施例,所述根据所述集群总限流和所述当前运行状态信息,更新服务本地缓存中的限流额度进一步包括:
21.根据所述当前运行状态信息,确定所述服务集群内的健康服务的数量,根据所述集群总限流与所述健康服务的数量,计算当前限流额度,并根据所述当前限流额度更新服务本地缓存中的限流额度。
22.根据本发明一实施例,所述获取集群限流信息之后还包括:
23.基于所述服务集群内的各个服务对应的当前运行状态信息,周期性地更新所述服务集群内的健康服务对应的网络地址路径。
24.根据本发明一实施例,所述根据本地缓存中的限流额度进行限流控制进一步包括:
25.接收基于更新后的网络地址路径发送的目标请求,判断所述目标请求对应的请求频次是否超过本地缓存中的限流额度;若超过,则对所述目标请求进行限流处理;若未超过,则响应所述目标请求进行对应的逻辑处理。
26.一种流量管理装置,用于网络资源受限的业务系统的访问,包括:
27.授权模块,用于服务端接收目标访问源发送的流量授权请求,通过当前的可分配流量及令牌桶算法获取流量授权响应信息;根据所述流量授权响应信息及业务系统的被访问请求信息生成访问服务响应,并将访问服务响应返回给所述目标访问源,使目标访问源获得流量授权;
28.限流模块,用于服务端获取集群限流信息,所述集群限流信息包括集群总限流和服务集群内各个服务的当前运行状态信息;根据所述集群总限流和所述当前运行状态信息,更新服务本地缓存中的限流额度,根据所述本地缓存中的限流额度进行限流控制。
29.根据本发明一实施例,所述授权模块包括判断单元及验证单元;
30.所述判断单元用于判断通过当前的可分配流量、今牌桶算法及流量授权请求中的请求消耗的授权流量是否能获取流量授权响应信息;若是,则所述服务端将所述流量授权响应信息发送到业务系统;若否,则返回异常响应信息;
31.所述验证单元用于服务端根据流量授权响应中的预设加密算法及密钥信息,验证
所述流量授权响应;若验证通过,则根据所述流量授权响应及所述业务系统的被访问请求信息生成访问服务响应,若未验证通过,则生成验证不通过信息。
32.一种流量管理设备,包括:
33.存储器和处理器,所述存储器中存储有指令,所述存储器和所述处理器通过线路互连;
34.所述处理器调用所述存储器中的所述指令,实现本发明一实施例中的流量管理方法。
35.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现本发明一实施例中的流量管理方法
36.本发明由于采用以上技术方案,使其与现有技术相比具有以下的优点和积极效果:
37.1)本发明一实施例中的流量管理方法,针对现有的流量管理系统无法对访问源进行授权鉴定的问题,通过服务端接收目标访问源发送的流量授权请求,通过当前的可分配流量及令牌桶算法获取流量授权响应信息;根据流量授权响应信息及业务系统的被访问请求信息生成访问服务响应,并将访问服务响应返回给目标访问源,使目标访问源获得流量授权。每一个访问源都必须进行流量授权注册才能访问系统,以分钟级进行流量监控,实现分布式集群服务的限流。
38.2)本发明一实施例中的流量管理方法,服务集群内的任一服务将集群限流信息更新至服务本地缓存中的限流额度,以根据本地缓存中的限流额度在本地内存中实现限流的控制。并通过基于集群总限流和服务集群内的服务的当前运行状态信息,更新本地缓存中的限流额度,避免了过多的信息传递数量,降低了请求时延。
附图说明
39.图1为本发明一实施例中的流量管理方法流图;
40.图2为本发明一实施例中的令牌桶算法限流的流程图;
41.图3为本发明一实施例中的流量管理装置的框图;
42.图4为本发明一实施例中的流量管理设备的示意图。
具体实施方式
43.以下结合附图和具体实施例对本发明提出的一种流量管理方法、装置、设备和存储介质作进一步详细说明。根据下面说明和权利要求书,本发明的优点和特征将更清楚。
44.实施例一
45.在衡量web系统性能的指标中,最重要的参数是极限qps(query per second),它表示系统每秒最多能够处理的query数。从定义中可以知道qps是一个描述系统处理速度的指标,当存在需要处理的流量(query数)使得系统即使以极限qps处理也无法在短时间内处理完所有流量,则称这个段时间内系统处于承压状态。
46.当系统处于承压状态,容易理解超出系统能力的那部分流量无法正常处理,可系统能力范围内的那部分流量也无法正常处理则比较反直觉。
47.假设某api(application programming interface,应用程序接口)的极限qps是
200,即理论上一分钟可以处理的query数为12000(200x60),如果在持续一分钟的时间内每秒收到300个query,原以为系统依旧能处理12000个query,只有6000个query无法处理,实际情况可能是前10s处理2000个query后系统就处于异常状态,接着其他query都无法在正常时间内得到处理。
48.由于系统承压导致原本1分钟可以处理12000个query骤降为2000个,更致命的是接着的几分钟甚至几十分钟内系统qps将持续保持一个相对较低的值,甚至系统完全无法正常运行,这种性能表现模式对大部分系统都比较常见。
49.大部分系统无法长时间处于高压状态,一旦承压程度超过一定的阀值,系统性能表现会急剧下降,而为了解决这一问题所普遍采用的方案是在系统中实现限流策略,始终保持系统压力处于合理范围从而让系统整体效率最高。
50.限流可以认为服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的。一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到的需要限制的阈值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:延迟处理,拒绝处理,或者部分拒绝处理等等。
51.在限流的过程中,为了追踪接口调用或访问来源,以及来源使用的流量和对调用源进行精准的流量控制,通常需要具有相应功能的系统来执行。对于这些系统,目前市面上有基于ratelimiter/sentinel框架的限流系统,具体请看下表1:
52.表1
[0053][0054]
针对上述两种限流框架存在的问题,本实施例提供了一种流量管理方法,用于网络资源受限的业务系统的访问,包括以下步骤:
[0055]
s1:服务端接收目标访问源发送的流量授权请求,判断通过当前的可分配流量、今牌桶算法及流量授权请求中的请求消耗的授权流量是否能获取流量授权响应信息;若是,则:服务端将该流量授权响应信息发送到业务系统;若否,则返回异常响应信息;
[0056]
s2:根据流量授权响应信息及业务系统的被访问请求信息生成访问服务响应,并将访问服务响应返回给目标访问源,使目标访问源获得流量授权。
[0057]
在步骤s1中,服务端接收目标访问源发送的流量授权请求,通过当前的可分配流量及令牌桶算法获取流量授权响应信息。
[0058]
以用户访问业务系统为例,用户向业务系统发起访问服务请求。业务系统在收到访问服务请求时,向服务端发起流量授权请求。业务系统接收到访问服务请求后并不会立即进行响应,而是向服务端发起流量授权请求,服务端通过授权服务对流量授权请求进行处理。
[0059]
流量授权请求的数据格式可采用以下方式撰写:
[0060][0061]
流量授权请求中的参数说明如下:
[0062]
servicename:服务名。即需要使用的访问服务的名称,如visit。
[0063]
weight:权重。即该请求需要消耗的授权量。
[0064]
challenge:随机暗号。该字段为随机字符串,访问服务在接收到授权服务的响应后将基于该字段进行检查,以确认授权服务不是伪造的。
[0065]
授权服务根据购买的授权量维护一个“令牌桶”的数据结构,当接收到流量授权请求后,就从“令牌桶”中获取weight字段指定数量的令牌数,然后得出获取结果。如果获取失败则返回异常信息,如果获取成功则返回如下格式的流量授权响应信息:
[0066][0067][0068]
其中,code为校验结果编号,当为0时则表示校验通过。message为校验结果信息,当校验出现异常,该字段会包含相关异常信息。data字段为对请求中的challenge字段和weight字段的处理结果。
[0069]
在步骤s2中,根据流量授权响应信息及业务系统的被访问请求信息生成访问服务响应,进一步包括:
[0070]
s200:流量授权响应信息中包括预设加密算法及密钥信息,服务端根据该流量授权响应中的预设加密算法及密钥信息,验证流量授权响应;若验证通过,则根据该流量授权响应及业务系统的被访问请求信息生成访问服务响应,若未验证通过,则生成验证不通过信息。
[0071]
具体的,如上述例子中的data的值由流量授权响应信息中的预设加密算法及密钥信息确定,可定义如下:
[0072]
data=md5(weight+secretsalt+challenge)
[0073]
其中,使用md5作为随机暗号的处理算法,同时约定了一个需要保密的secretsalt字段,用于混淆。当然,也可以采用其他的加密算法,如des、rsa、aes、sha1等。
[0074]
业务系统接收到服务端的授权服务返回的流量授权响应后,对该流量授权响应进
行验证,以防止流量授权响应是伪造的。其校验过程就是使用与授权服务使用相同的算法计算得到data,并与授权服务返回的data进行比较,检查是否一致,如果一致则表示校验通过,否则不通过。
[0075]
业务系统根据授权响应以及授权响应校验结果,进行访问服务响应。无异常响应且校验通过则向用户提供访问服务,否则返回异常信息。
[0076]
在目标访问源获得流量授权之后,还包括以下步骤:
[0077]
s300:服务端获取集群限流信息,该集群限流信息包括集群总限流和服务集群内各个服务的当前运行状态信息;
[0078]
s301:根据集群总限流和所述当前运行状态信息,更新服务本地缓存中的限流额度,根据本地缓存中的限流额度进行限流控制。
[0079]
通常限流控制可以分为两种,一种是针对每个应用服务单独配置限流额度,每个应用限流额度加总为整体应用的限流额度。另一种是使用分布式缓存中间件如数据库redis,在数据库redis中设置一个基于总限流额度的令牌桶,每个应用服务器在执行受控方法时去数据库redis中获取一个或多个令牌,根据拿到的令牌数量来控制受控方法的执行次数。
[0080]
对于单机限流的方案,其存在静态配置的问题,相对于分布式的限流控制,纯单机的限流在配置上较为不灵活,往往都是做静态配置,也就是在项目部署时为每台应用服务器配置固定的额度,并且在应用运行过程中不易动态调整每台机器的限流额度。
[0081]
而基于数据库redis等分布式中间件的令牌桶算法限流方案虽然能够动态调整每台机器的执行频率,并且能够精准的控制多台机器的执行频率。
[0082]
本实施例采用集群限流和单机限流多种可配置的限流方式,进行流量控制。
[0083]
在步骤s300中,集群限流信息为服务集群对应的总的限流额度,例如该服务集群一分钟允许的请求次数等,可由用户根据实际限流需求进行配置,也可以通过键值对的形式进行存储。根据服务集群内各个服务的当前运行状态信息可获得各个服务的情况。服务集群内的任一服务可以按照预设时间间隔,周期性地获取该集群限流信息,并将集群限流信息同步至本地缓存。
[0084]
为了实现实时地更新本地缓存中的集群限流信息,预设时间间隔例如可以为1s、0.5s。通过该过程,任一服务可以直接将集群限流信息保存至本地,无需在中间过程增加信息传递的数量,过程简单,不会占用过多的响应时间。根据步骤s300可知,服务端按照预设时间间隔,周期性地获取集群限流信息,基于该集群限流信息,实现周期性地更新本地缓存中的限流额度。
[0085]
在步骤s301中,根据集群总限流和所述当前运行状态信息,更新服务本地缓存中的限流额度进一步包括:
[0086]
s400:根据当前运行状态信息,确定服务集群内的健康服务的数量,根据集群总限流与所述健康服务的数量,计算当前限流额度,并根据当前限流额度更新服务本地缓存中的限流额度。
[0087]
服务的当前运行状态信息可以包括健康或者不健康。其中,健康是指服务能够正常运行;不健康是指服务因存在网络配置错误、崩溃等问题造成无法运行。
[0088]
根据当前服务的运行状态信息,可以确定服务集群内的健康服务的数量。在特殊
情况下,服务集群中可能存在一些因网络配置错误、崩溃等问题导致无法正常处理流量的服务。在这种情况下,若将流量分配至该服务中,则会造成一些流量无法正常处理。为了避免出现上述问题,可以先根据服务的当前运行状态确定服务集群中的健康服务,将流量分配至各健康服务中。
[0089]
根据集群总限流与健康服务的数量,计算当前限流额度,并根据当前限流额度更新本地缓存中的限流额度。可以通过轮询负载均衡机制,将用户访问请求按照时间顺序依次分配到不同的服务,各个服务获得的流量是相同的。因此,通过将集群总限流与健康服务的数量作比,以获得当前限流额度(即服务集群内的任—健康服务对应的单机限流额度),并根据该当前限流额度更新本地缓存中的限流额度。通过该过程,直接将服务集群内的任一服务的限流额度同步至本地缓存,信息传递的数量少,一定程度上可提高响应时间。
[0090]
根据本地缓存中的限流额度进行限流控制进一步包括:
[0091]
s500:基于服务集群内的各个服务对应的当前运行状态信息,周期性地更新服务集群内的健康服务对应的网络地址路径;
[0092]
s600:服务端接收基于更新后的网络地址路径发送的目标请求,判断目标请求对应的请求频次是否超过本地缓存中的限流额度;若超过,则对目标请求进行限流处理;若未超过,则响应该目标请求进行对应的逻辑处理。
[0093]
基于更新后的服务的网络地址路径发送的目标请求后,并且基于上述步骤获得的本地缓存中的限流额度,通过预设限流算法进行限流控制。具体的,可以判断目标请求对应的请求频次是否超过本地缓存中的限流额度,若超过,则对目标请求进行限流处理,例如返回默认值或等待重试等预设的处理方式进行处理。若未超过,则响应目标请求进行对应的逻辑处理。
[0094]
在实际应用中,预设限流算法可以为一种算法,例如令牌桶算法、漏斗算法、计数器算法等等。预设限流算法还可以为多种算法的组合,具体的组合方式可根据实际需要确定。下面以令牌桶算法为例,对任一服务根据本地缓存中的限流额度进行限流控制进行说明。
[0095]
请参看图2,在令牌桶算法中,所有目标请求在处理前都需要拿到一个可用的令牌才会被处理。实际应用中,在步骤s701中,可按照预设的速率向桶内添加令牌,并且为该桶设置最大的放置令牌限制(限流额度)。基于此,在步骤s702中,当目标请求达到后,首先通过步骤s703获取今牌桶中的今牌,在步骤s704中,若拿到,则进行其它的业务逻辑,处理完成后将令牌直接删除;在步骤s705中,若令牌不足没有拿到,则目标请求失败。
[0096]
基于上述流量管理方法,可开发一种轻量级的授权限流框架。针对sentinel框架无法对系统进行授权鉴定的问题,该授权限流框架可在接口提供给访问源访问时,分配一个授权密钥,有这个授权密钥的访问源才可以访问成功,否则不予访问。每一个访问源都必须进行授权注册后才能访问,大大提高了系统访问的安全性和可控性。
[0097]
另外,该授权限流框架采样集群限流和单机限流多种可配置的限流方式,通过分布式调度将服务集群中的流量数据全部收集至内存,写入数据库,还可对数据进行判重和持久化,提高限流框架的稳定性;对于限流的监控,根据需要,可提供分钟、小时、天等维度的监控图表。实际应用中,可根据访问源标识提取该访问源的监控图表数据。
[0098]
实施例二
[0099]
本实施例提供了一种流量管理装置,用于网络资源受限的业务系统的访问,请参看图3,该流量管理装置包括:
[0100]
授权模块1,用于服务端接收目标访问源发送的流量授权请求,通过当前的可分配流量及令牌桶算法获取流量授权响应信息;根据流量授权响应信息及业务系统的被访问请求信息生成访问服务响应,并将访问服务响应返回给目标访问源,使目标访问源获得流量授权;
[0101]
限流模块2,用于服务端获取集群限流信息,该集群限流信息包括集群总限流和服务集群内各个服务的当前运行状态信息;根据集群总限流和服务当前运行状态信息,更新服务本地缓存中的限流额度,根据本地缓存中的限流额度进行限流控制。
[0102]
授权模块1通过服务端接收目标访问源发送的流量授权请求,根据当前的可分配流量及令牌桶算法获取流量授权响应信息;基于流量授权响应信息及业务系统的被访问请求信息生成访问服务响应,并将访问服务响应返回给目标访问源,使目标访问源获得流量授权。每一个访问源都必须进行流量授权注册才能访问系统,大大提高了系统访问的安全性和可控性。
[0103]
具体的,该授权模块1包括判断单元及验证单元。其中,判断单元用于判断通过当前的可分配流量、今牌桶算法及流量授权请求中的请求消耗的授权流量是否能获取流量授权响应信息;若是,则服务端将流量授权响应信息发送到业务系统;若否,则返回异常响应信息。
[0104]
验证单元用于服务端根据流量授权响应中的预设加密算法及密钥信息,验证流量授权响应;若验证通过,则根据流量授权响应及所述业务系统的被访问请求信息生成访问服务响应,若未验证通过,则生成验证不通过信息。
[0105]
限流模块2采用分布式集群限流的方式,通过服务集群内的任一服务将集群限流信息更新至服务本地缓存中的限流额度,根据本地缓存中的限流额度在本地内存中实现限流的控制,并通过基于集群总限流和服务集群内的服务的当前运行状态信息,更新本地缓存中的限流额度,避免了过多的信息传递数量,降低了请求时延。
[0106]
该流量管理装置首先通过授权模块1对访问系统的用户进行流量授权,只有通过流量授权的用户才能访问系统。然后,通过限流模块2采用分布式集群限流的方式,使服务集群内的任一服务将集群限流信息更新至服务本地缓存中的限流额度根据本地缓存中的限流额度在本地内存中实现限流的控制,避免过多的信息传递数量,降低请求时延。
[0107]
上述授权模块1及限流模块2的实现方式均如上述实施例一中所述,在此不再赘述。
[0108]
实施例三
[0109]
本实施例提供了一种流量管理设备。请参看图4,该流量管理设备500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,cpu)510(例如,一个或一个以上处理器)和存储器520,一个或一个以上存储应用程序533或数据532的存储介质530(例如一个或一个以上海量存储设备)。其中,存储器520和存储介质530可以是短暂存储或持久存储。存储在存储介质530的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对流量管理设备500中的一系列指令操作。
[0110]
进一步地,处理器510可以设置为与存储介质530通信,在流量管理设备500上执行
存储介质530中的一系列指令操作。
[0111]
流量管理设备500还可以包括一个或一个以上电源540,一个或一个以上有线或无线网络接口550,一个或一个以上输入输出接口560,和/或,一个或一个以上操作系统531,例如windows serve、vista等等。
[0112]
本领域技术人员可以理解,图4示出的流量管理设备结构并不构成对流量管理设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0113]
本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质。该计算机可读存储介质中存储有指令,当该指令在计算机上运行时,使得计算机执行实施例一中的流量管理方法的步骤。
[0114]
实施例二中的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件的形式体现出来,该计算机软件存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read
‑
only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0115]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置及设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0116]
上面结合附图对本发明的实施方式作了详细说明,但是本发明并不限于上述实施方式。即使对本发明作出各种变化,倘若这些变化属于本发明权利要求及其等同技术的范围之内,则仍落入在本发明的保护范围之中。