首页 娱乐 新闻 视频 体育 博客 图库

实现全局流控的方法及装置与流程

文档序号:21460565 发布日期:2020-07-10 18:27
实现全局流控的方法及装置与流程

本发明涉及互联网大数据技术领域,具体而言,涉及一种实现全局流控的方法及装置。



背景技术:

随着信息技术的高速发展,包括文字、图像、视频等结构化、半结构化数据实现指数级增长。传统数据库很难存储、分析这些数据的内容,所以业界一般使用hadoop生态系统等大数据技术进行业务处理。基于hadoop生态系统搭建一个在线业务平台时,需考虑满足大流量、高并发、低成本等要求。同时,为了整个在线业务平台的稳定,防止单租户的大流量压垮平台,我们需要通过增加硬件设备的方法增大系统容量,降低系统风险。但随着业务量的进一步增大,这种方式显著地增加了运行成本,为了避免无止境膨胀的物理机器,对接入平台的子系统或者子应用进行限流和服务降级则十分必要。

在分布式系统中实现全局流控,即需要保障限流服务的原子化。每个提供服务的应用服务器都可以进行限流,但由于负载均衡,各应用节点压力不同,限流的程度无法控制,无法达到全局流控的理想效果。如何在保障对外界提供服务的前提下实现一种灵活配置的全局流控是目前亟需解决的问题。



技术实现要素:

本发明为了解决上述背景技术中的至少一个技术问题,提出了一种实现全局流控的方法及装置。

为了实现上述目的,根据本发明的一个方面,提供了一种实现全局流控的方法,该方法包括:

接收上层应用发送的请求;

获取通过apollo配置中心配置的所述上层应用的所述请求的全局限额阈值;

若本地配额库存小于所述请求的记录数,访问hbase数据库获取配额批次;

若本地配额库存与所述配额批次之和小于等于所述全局限额阈值且大于或等于所述请求的记录数,响应所述请求。

可选的,该实现全局流控的方法还包括:

若本地配额库存与所述配额批次之和大于所述全局限额阈值,休眠到下一个限额时间点重新处理所述请求。

可选的,该实现全局流控的方法还包括:

在每个限额时间点将本地配额库存清零。

可选的,该实现全局流控的方法还包括:

若本地配额库存大于或等于所述请求的记录数,响应所述请求并从所述本地配额库存中扣除所述请求的记录数。

可选的,该实现全局流控的方法还包括:

通过所述apollo配置中心配置各上层应用的各请求类型的全局限额阈值,并通过热发布的方法将所述全局限额阈值发送到本地。

可选的,该实现全局流控的方法还包括:

实时记录所述上层应用的请求数据,并将所述请求数据发送到所述hbase数据库中预设的全局流控表中进行存储。

可选的,所述apollo配置中心根据所述全局流控表配置各上层应用的各请求类型的全局限额阈值。

为了实现上述目的,根据本发明的另一方面,提供了一种实现全局流控的装置,该装置包括:

请求接收单元,用于接收上层应用发送的请求;

全局限额阈值获取单元,用于获取通过apollo配置中心配置的所述上层应用的所述请求的全局限额阈值;

本地配额库存单元,用于在本地配额库存小于所述请求的记录数时访问hbase数据库获取配额批次;

请求响应单元,用于在本地配额库存与所述配额批次之和小于等于所述全局限额阈值且大于或等于所述请求的记录数时响应所述请求。

可选的,该实现全局流控的装置还包括:

错峰处理单元,用于当本地配额库存与所述配额批次之和大于所述全局限额阈值时休眠到下一个限额时间点重新处理所述请求。

可选的,该实现全局流控的装置还包括:

本地配额库存清零单元,用于在每个限额时间点将本地配额库存清零。

可选的,所述请求响应单元,还用于在本地配额库存大于或等于所述请求的记录数时响应所述请求并从所述本地配额库存中扣除所述请求的记录数。

可选的,该实现全局流控的装置还包括:

全局限额阈值配置单元,用于通过所述apollo配置中心配置各上层应用的各请求类型的全局限额阈值,并通过热发布的方法将所述全局限额阈值发送到本地。

可选的,该实现全局流控的装置还包括:

流控数据记录单元,用于实时记录所述上层应用的请求数据,并将所述请求数据发送到所述hbase数据库中预设的全局流控表中进行存储。

为了实现上述目的,根据本发明的另一方面,还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述实现全局流控的方法中的步骤。

为了实现上述目的,根据本发明的另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序在计算机处理器中执行时实现上述实现全局流控的方法中的步骤。

本发明的有益效果为:本发明提供了一种灵活部署的全局流控方案,使分布式系统中可以同时保障服务稳定性和服务高可用,缓解了通过横向增加设备量带来的成本问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:

图1是本发明实施例实现全局流控的方法的流程图;

图2是本发明实施例实现全局流控的方法的应用场景示意图;

图3是本发明实施例实现全局流控的方法的初始化流程图;

图4是本发明实施例实现全局流控的方法的各组成部分交互示意图;

图5是本发明一具体实施例流量控制方法的流程示意图;

图6是本发明实施例实现全局流控的装置的结构框图;

图7是本发明实施例计算机设备示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。

本发明提供一种基于hbase和apollo配置中心实现全局流控的方法。本发明通过hbase自身的分布式处理能力,和apollo配置中心的配置热发布能力,提供了一种灵活部署的全局流控方案,使分布式系统中可以同时保障服务稳定性和服务高可用,缓解了通过横向增加设备量带来的成本问题。

图2是本发明实施例实现全局流控的方法的应用场景示意图,如图2所示,本发明实现全局流控的方法的应用场景中包含上层应用、应用服务器、apollo配置中心以及hbase数据库四个部分。应用服务器分别与上层应用和hbase数据库连接,以使上层应用通过应用服务器访问hbase数据库。apollo配置中心用于配置各上层应用的各请求类型的全局限额阈值,并将各上层应用的各请求类型的全局限额阈值下发到应用服务器。应用服务器根据各上层应用的各请求类型的全局限额阈值进行全局流控。

上层应用可以为应用程序(app)的服务器或客户端,可以为现有技术的各种类型的服务器,例如云服务器等,以及各种类型的客户端,如移动终端。

hbase是一个分布式、面向列的开源数据库,能够对大数据提供随机、实时的读写访问功能,且可以非常简单地通过增加服务器数量来进行扩容。因为hbase中每张表的数据按照rowkey的字典顺序排序,因此,如果按照某个指定的rowkey去查询数据,或者指定某一个rowkey范围去扫描数据时,hbase可以快速定位到需要读取的数据位置,从而可以高效地获取到所需要的数据。因此,在全局流控方案中,本发明选择使用hbase做为所有子系统全局全局限额阈值的存储介质。同时,为了避免访问热点,我们对写入hbase的数据,根据rowkey进行了hash分区处理,并以同样的hash范围对region进行了划分,尽量保证数据均匀落在每个region上。

apollo(阿波罗)配置中心是开源的配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时地推送到应用端,并且具备规范的权限、流程治理等特性。本发明主要使用apollo配置中心的热发布能力,用户在apollo配置好各上层应用的各请求类型的全局限额阈值并发布后,应用服务器能实时(1秒)接收到最新的配置。因此全局流控方案将各上层应用系统是否流控,某种请求类型的全局限额阈值大小等均可以配置在apollo配置中心中,如遇到双十一促销等交易量突增的场景,也可实现灵活配置。apollo配置中心通过配置各各上层应用的各种请求类型的全局限额阈值(一段时间内的总请求数设定的阈值来进行限流),超过服务能力的请求数将被延迟处理。例如,通过限制一秒内的请求总数(即tps),来进行请求数的限流。

图1是本发明实施例实现全局流控的方法的流程图,实施主体为应用服务器,如图1所示,本实施例的实现全局流控的方法包括步骤101至步骤104。

步骤101,接收上层应用发送的请求。

在本发明可选实施例中,所述请求可以为用于获取数据或写入数据的请求,所述请求的请求类型包括:写请求和读请求。上层应用可以同时发送写请求和读请求。

步骤102,获取通过apollo配置中心配置的所述上层应用的所述请求的全局限额阈值。

在本发明实施例中,用户在apollo配置中心配置各上层应用的各请求类型的全局限额阈值,即配置各上层应用的写请求的全局限额阈值和读请求的全局限额阈值,并通过热发布的方法将所述全局限额阈值发送到应用服务器,应用服务器根据所述全局限额阈值对上层应用进行流量控制。

步骤103,若本地配额库存小于所述请求的记录数,访问hbase数据库获取配额批次。

在本发明实施例中,本地配额库存为hbase数据库分配给应用服务器的当前的单位时间可访问请求数(可以为tps),例如,hbase数据库分配给应用服务器a当前每秒可访问请求数为5000笔。

若上层应用当前发送的请求的记录数大于本地配额库存,例如上层应用a当前这一秒发送的读请求和写请求总计6000笔,超过了应用服务器a当前每秒可访问请求数5000笔,则应用服务器需要向hbase数据库申请配额批次。所述配额批次为预设大小的可访问请求数,应用服务器每次向hbase数据库申请配额时,hbase数据库下发一个配额批次给该应用服务器。

如图4所示,在本发明可选实施例中,应用服务器可以发送当前时间戳+上层应用名称(yyyymmddhhmiss+app_name)访问hbase来申请配额批次,hbase通过申请后向应用服务器发送通知信息,并将该笔申请记录在预设的全局流控表中。

在本发明实施例中,若本地配额库存大于或等于所述请求的记录数,则响应所述请求并从所述本地配额库存中扣除所述请求的记录数,对本地配额库存进行更新。

步骤104,若本地配额库存与所述配额批次之和小于等于所述全局限额阈值且大于或等于所述请求的记录数,响应所述请求。

在本发明实施例中,若应用服务器的本地配额库存与从hbase数据库申请的配额批次的总和大于上层应用当前发送的请求的记录数,应用服务器理论上可以实现对上层应用的请求进行处理,此时还需要验证是否满足设定的所述请求的全局限额阈值。全局限额阈值为用户配置的上层应用的某种请求类型的单位时间最大总请求数(可以为tps),例如上层应用a的读请求的全局限额阈值为每秒10000笔。

在本发明实施例中,若本地配额库存与所述配额批次之和大于所述全局限额阈值,休眠到下一个限额时间点重新处理所述请求。

在本发明实施例中,应用服务器会周期性的初始化本地配额库存,每个周期的开始时间为限额时间点,每个限额时间点应用服务器会将本地配额库存清零。在本发明实施例中,每个周期的初始本地配额库存为0,应用服务器在处理每个限额时间点后的第一笔请求时,需要向hbase数据库申请配额批次。

在本发明实施例中,本发明实施例的实现全局流控的方法还包括:

实时记录所述上层应用的请求数据,并将所述请求数据发送到所述hbase数据库中预设的全局流控表中进行存储。

在本发明实施例中,应用服务器的辅助进程负责进行数据记录,每固定时间向hbase的全局流控表中批量写入未来一段时间内,每个上层应用每个间隔的所有的请求数据记录。例如,每10分钟向hbase批量写入未来10分钟内(从当前秒+1秒开始,至10分钟)每个上层应用每种请求类型每秒钟的记录。

在本发明可选实施例中,所述apollo配置中心根据所述全局流控表配置各上层应用的各请求类型的全局限额阈值,并通过热发布的方法将所述全局限额阈值发送到应用服务器。本发明可以根据全局流控表可以分析各上层应用的流量趋势,如果流量应用趋势增加,用户可以相应的调高上层应用的全局限额阈值。

图3是本发明实施例实现全局流控的方法的初始化流程图,如图3所示,在进行本发明的实现全局流控的方法之前需要进行的初始化流程包括步骤201至步骤205。

步骤201:在hbase中创建全局流控表,该表使用预先建好的region分区。

步骤202:访问hbase时,为了防止异常访问时引起的长时间等待,需设置hbase的超时时间与重试次数。

步骤203:在apollo配置中心配置各上层应用的各请求类型的全局限额阈值。例如,配置上层应用a,每秒读请求数阈值为5000笔,每秒写请求数阈值为5000笔。

步骤204:由应用服务器的辅助进程负责写入初始记录。每固定时间向hbase批量写入未来一段时间内,每个子系统每个间隔的所有的初始库存记录。例如,每10分钟向hbase批量写入未来10分钟内(从当前秒+1秒开始,至10分钟)每个应用每种请求类型每秒钟的记录。

步骤205:部署在各应用服务器上的主服务进程启动,连接apollo读取配置,获取各上层应用系统的各请求类型的全局限额阈值,并初始化本地配额库存为0。

图5是本发明一具体实施例流量控制方法的流程示意图,如图5所示,在本发明的一个具体实施例中,流量控制方法的流程具体包括步骤401至步骤408。

步骤401:上层应用发送请求到应用服务器主进程。

步骤402:各应用服务器上的主服务进程收到请求,其中某种类型的记录数为r,完成处理业务逻辑后,查看本地配额库存a是否满足需求。若本地配额库存满足需求,(a-r>=0),则执行步骤403;若本地库存不满足需求,(a-r<0),则执行步骤404。

步骤403:扣减本地库存a,响应用户请求。

步骤404:访问hbase流控表来申请配额批次q,本地配额库存a加上申请到的配额批次q,得到当前的临时库存x。若访问流控表出现异常,执行步骤408,否则执行步骤405。

步骤405:若当前的临时库存x不超过全局限额大小t,(x<=t),则执行步骤406;若当前的临时库存已经超过了全局限额大小,(x>t),则执行步骤407。

步骤406:更新本地库存a为当前的临时库存,即a=x。若更新之后的本地库存满足需求,(a-r>=0),执行步骤403;若更新之后的本地库存不满足需求,(a-r<0),则执行步骤404。

步骤407:休眠(sleep)到下一个限额时间点,并加random[m,n)时间进行错峰,然后执行步骤402。

步骤408:记录详细错误日志,降级放行处理,响应用户请求。

由以上描述可以看出,本发明提供了一种灵活部署的全局流控方案,使分布式系统中可以同时保障服务稳定性和服务高可用,缓解了通过横向增加设备量带来的成本问题。

需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

基于同一发明构思,本发明实施例还提供了一种实现全局流控的装置,可以用于实现上述实施例所描述的实现全局流控的方法,如下面的实施例所述。由于实现全局流控的装置解决问题的原理与实现全局流控的方法相似,因此实现全局流控的装置的实施例可以参见实现全局流控的方法的实施例,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图6是本发明实施例实现全局流控的装置的结构框图,如图6所示,本发明实施例实现全局流控的装置包括:请求接收单元1、全局限额阈值获取单元2、本地配额库存单元3和请求响应单元4。

请求接收单元1,用于接收上层应用发送的请求。

全局限额阈值获取单元2,用于获取通过apollo配置中心配置的所述上层应用的所述请求的全局限额阈值。

本地配额库存单元3,用于在本地配额库存小于所述请求的记录数时访问hbase数据库获取配额批次。

请求响应单元4,用于在本地配额库存与所述配额批次之和小于等于所述全局限额阈值且大于或等于所述请求的记录数时响应所述请求。

在本发明的可选实施例中,本发明的实现全局流控的装置还包括:

错峰处理单元,用于当本地配额库存与所述配额批次之和大于所述全局限额阈值时休眠到下一个限额时间点重新处理所述请求。

在本发明的可选实施例中,本发明的实现全局流控的装置还包括:

本地配额库存清零单元,用于在每个限额时间点将本地配额库存清零。

在本发明可选实施例中,所述请求响应单元4,还用于在本地配额库存大于或等于所述请求的记录数时响应所述请求并从所述本地配额库存中扣除所述请求的记录数。

在本发明的可选实施例中,本发明的实现全局流控的装置还包括:

全局限额阈值配置单元,用于通过所述apollo配置中心配置各上层应用的各请求类型的全局限额阈值,并通过热发布的方法将所述全局限额阈值发送到本地。

在本发明的可选实施例中,本发明的实现全局流控的装置还包括:

流控数据记录单元,用于实时记录所述上层应用的请求数据,并将所述请求数据发送到所述hbase数据库中预设的全局流控表中进行存储。

在本发明可选实施例中所述全局限额阈值配置单元,具体用于通过所述apollo配置中心根据所述全局流控表配置各上层应用的各请求类型的全局限额阈值,并通过热发布的方法将所述全局限额阈值发送到本地。

为了实现上述目的,根据本申请的另一方面,还提供了一种计算机设备。如图7所示,该计算机设备包括存储器、处理器、通信接口以及通信总线,在存储器上存储有可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述实施例方法中的步骤。

处理器可以为中央处理器(centralprocessingunit,cpu)。处理器还可以为其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。

存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及单元,如本发明上述方法实施例中对应的程序单元。处理器通过运行存储在存储器中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及作品数据处理,即实现上述方法实施例中的方法。

存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

所述一个或者多个单元存储在所述存储器中,当被所述处理器执行时,执行上述实施例中的方法。

上述计算机设备具体细节可以对应参阅上述实施例中对应的相关描述和效果进行理解,此处不再赘述。

为了实现上述目的,根据本申请的另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序在计算机处理器中执行时实现上述实现全局流控的方法中的步骤。本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)、随机存储记忆体(randomaccessmemory,ram)、快闪存储器(flashmemory)、硬盘(harddiskdrive,缩写:hdd)或固态硬盘(solid-statedrive,ssd)等;所述存储介质还可以包括上述种类的存储器的组合。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

再多了解一些
当前第1页 1 2 3
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1