掌桥专利:专业的专利平台
掌桥专利
首页

一种元数据服务器的访问限流方法、装置及设备

文献发布时间:2024-04-18 19:58:21


一种元数据服务器的访问限流方法、装置及设备

技术领域

本申请涉及计算机技术领域,具体涉及一种元数据服务器的访问限流方法、装置及设备。

背景技术

随着互联网技术的发展,大数据存储的数据量越来越大。为了尽可能从海量数据中挖掘更多价值,数据分析任务越来越复杂,对大数据服务的稳定性提出了挑战。

数据湖元数据服务作为大数据场景下的在线大数据服务被普遍使用,例如Hive元数据服务。数据湖元数据服务可用于获取元数据。当数据分析任务较为复杂时,通常会对数据湖元数据服务发起多种访问。这时,使得元数据存储的负载压力较大。

基于此,急需一种访问限流方法来有效限制一些访问,以提高数据湖元数据服务稳定性,降低元数据存储的负载压力。

发明内容

有鉴于此,本申请提供一种元数据服务器的访问限流方法、装置及设备,用于对提供元数据服务的数据湖元数据服务器的元数据访问请求进行限流处理。

为解决上述问题,本申请提供的技术方案如下:

第一方面,本申请提供一种元数据服务器的访问限流方法,所述方法应用于数据湖元数据服务器中,包括:

接收客户端发送的元数据访问请求,所述元数据访问请求用于获取存储服务器存储的用于描述目标数据的元数据;所述目标数据为目标表格中的数据;

根据所述元数据访问请求确定所述数据湖元数据服务器使用的元数据服务接口;

当所述元数据服务接口满足预设条件时,获取所述元数据访问请求的请求参数;所述请求参数包括所述目标表格的表分区数和分区层级数;

根据所述表分区数和所述分区层级数,获取所述元数据访问请求对应的申请令牌数;

当所述申请令牌数大于所述客户端对应的剩余令牌数时,对所述元数据访问请求进行限流处理。

第二方面,本申请提供一种元数据服务器的访问限流装置,所述装置应用于数据湖元数据服务器中,包括:

接收单元,用于接收客户端发送的元数据访问请求,所述元数据访问请求用于获取存储服务器存储的用于描述目标数据的元数据;所述目标数据为目标表格中的数据;

第一确定单元,用于根据所述元数据访问请求确定所述数据湖元数据服务器使用的元数据服务接口;

第一获取单元,用于当所述元数据服务接口满足预设条件时,获取所述元数据访问请求的请求参数;所述请求参数包括所述目标表格的表分区数和分区层级数;

第二获取单元,用于根据所述表分区数和所述分区层级数,获取所述元数据访问请求对应的申请令牌数;

处理单元,用于当所述申请令牌数大于所述客户端对应的剩余令牌数时,对所述元数据访问请求进行限流处理。

第三方面,本申请提供一种电子设备,包括:

一个或多个处理器;

存储装置,其上存储有一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现任一所述的元数据服务器的访问限流方法。

第四方面,本申请提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现任一所述的元数据服务器的访问限流方法。

由此可见,本申请具有如下有益效果:

本申请提供了一种元数据服务器的访问限流方法、装置及设备,该方法应用于提供元数据服务的数据湖元数据服务器中。数据湖元数据服务器接收客户端发送的元数据访问请求,该请求用于获取存储服务器存储的用于描述目标数据的元数据,目标数据为目标表格中的数据。接收到访问请求后开启对该元数据访问请求的限流处理流程。具体地,先根据获取的元数据访问请求确定数据湖元数据服务器使用的元数据服务接口。当元数据服务接口满足预设条件时,获取元数据访问请求的请求参数,即目标表格的表分区数和分区层级数。目标表格的表分区数和分区层级数用于实现元数据访问请求的限流处理判断。即,先根据目标表格的表分区数和分区层级数,确定元数据访问请求对应的申请令牌数。当元数据访问请求对应的申请令牌数大于客户端对应的剩余令牌数时,对元数据访问请求进行限流处理。

可知,满足预设条件的元数据服务接口接收到的请求中的不同表格或者不同时间的同一张表格所对应的请求参数均可能不同,对应的申请令牌数会不同。因此,本申请能够通过元数据服务接口以及元数据访问请求的请求参数自适应地确定元数据访问请求对应的申请令牌数,以基于申请令牌数确定是否对元数据访问请求进行限流处理。如此,能够提高数据湖元数据服务器的服务稳定性,降低存储服务器的负载压力。

附图说明

图1为本申请实施例提供的一种应用场景的示意图;

图2为本申请实施例提供的一种示例性应用场景的示意图;

图3为本申请实施例提供的一种元数据服务器的访问限流方法的流程图;

图4为本申请实施例提供的另一种示例性应用场景的示意图;

图5为本申请实施例提供的另一种元数据服务器的访问限流方法的流程图;

图6为本申请实施例提供的一种元数据服务器的访问限流装置的结构示意图;

图7为本申请实施例提供的一种电子设备的基本结构的示意图。

具体实施方式

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请实施例作进一步详细的说明。

为了便于理解和解释本申请实施例提供的技术方案,下面将先对本申请的背景技术进行说明。

可以理解的是,在使用本公开中各个实施例的技术方案之前,均会通过恰当的方式对所涉及的个人信息的类型、使用范围、使用场景等告知用户,并获得用户的授权。

例如,在响应于接收到用户的主动请求时,向用户发送提示信息,以明确的提示用户,其请求执行的操作将需要获取和使用到用户的个人信息。从而,使得用户可以根据提示信息来自主的选择是否向执行本公开技术方案的操作的电子设备、应用程序、服务器或存储介质等软件或硬件提供个人信息。

作为一种可选的但非限定的实现方式,响应于接受到用户的主动请求,向用户发送提示信息的方式例如可以是弹窗的方式,弹窗中可以以文字的方式呈现提示信息。此外,弹窗中还可以承载供用户选择“同意”或者“不同意”向电子设备提供个人信息的选择控件。

可以理解的是,上述通知和获取用户授权过程仅是示意性的,不对本公开的实现方式构成限定,其他满足相关法律法规的方式也可应用于本公开的实现方式中。

随着互联网技术的发展,大数据湖存储的数据量越来越大。为了尽可能从海量数据中挖掘更多有价值的数据,数据分析任务越来越复杂,对大数据服务的稳定性提出了挑战。数据湖元数据服务作为大数据场景下的在线大数据服务被普遍使用,例如Hive元数据服务。通过数据湖元数据服务能够获取元数据。元数据又称中介数据、中继数据,是描述数据的数据。数据分析任务往往涉及多个库表分区等的多种访问,即同一个数据分析任务也会对数据湖元数据服务发起多种访问。当数据分析任务较为复杂时,使得数据湖元数据服务的稳定性较差,元数据存储的负载压力较大。例如,当元数据存储在MySQL数据库中时,会对MySQL数据库的负载压力较大。

目前,可通过每秒请求次数QPS来进行数据湖元数据服务的限流处理。即,当元数据服务的QPS超过服务系统的上限时,对访问请求进行限流处理。但是,不同的访问请求对元数据存储的负载压力不同,通过QPS的方式来对访问请求进行限流处理,会使得限流处理效果较差。例如,数据湖元数据服务一秒钟内接收的访问请求次数为100次(可能是由不同客户端发起的访问请求),即QPS为100。当访问请求次数超过100次时,会进行限流处理,即拒绝后续的访问请求。但是,不同的访问请求对服务的负载压力不同。如,对访问负载压力量化后,若访问请求a对元数据存储的负载压力为1,访问请求b对元数据存储的负载压力为100。则接受访问请求a对数据湖元数据服务访问100次,便达到了数据湖元数据服务的访问上限,接受访问请求b一次,便达到了数据湖元数据服务的访问上限。而仍接受访问请求a对数据湖元数据服务访问100次,则数据湖元数据服务可能会发生崩溃,元数据存储的负载压力会极大。

因此,急需一种元数据服务器的访问限流方法,来有效限制一些访问,提高服务稳定性。基于此,本申请实施例提供了一种元数据服务器的访问限流方法、装置及设备,该方法应用于提供元数据服务的数据湖元数据服务器中。数据湖元数据服务器接收客户端发送的元数据访问请求,该请求用于获取存储服务器存储的用于描述目标数据的元数据,目标数据为目标表格中的数据。接收到访问请求后开启对该元数据访问请求的限流处理流程。具体地,先根据获取的元数据访问请求确定数据湖元数据服务器使用的元数据服务接口。当元数据服务接口满足预设条件时,获取元数据访问请求的请求参数,即目标表格的表分区数和分区层级数。目标表格的表分区数和分区层级数用于实现元数据访问请求的限流处理判断。即,先根据目标表格的表分区数和分区层级数,确定元数据访问请求对应的申请令牌数。当元数据访问请求对应的申请令牌数大于客户端对应的剩余令牌数时,对元数据访问请求进行限流处理。

可知,满足预设条件的元数据服务接口接收到的请求中不同的表格或者不同时间的同一张表格所对应的请求参数均可能不同,对应的申请令牌数会不同。因此,本申请能够通过元数据服务接口以及元数据访问请求的请求参数自适应地确定元数据访问请求对应的申请令牌数,以基于申请令牌数确定是否对元数据访问请求进行限流处理。如此,能够提高数据湖元数据服务器的服务稳定性,降低存储服务器的负载压力。

可以理解的是,针对以上方案所存在的缺陷,均是申请人在经过实践并仔细研究后得出的结果。因此,上述问题的发现过程以及下文中本申请实施例针对上述问题所提出的解决方案,都应该是申请人在本申请过程中对本申请实施例做出的贡献。

为了便于理解本申请实施例提供的元数据服务器的访问限流方法,下面先对数据湖元数据服务的应用场景以及元数据的获取流程进行介绍。参见图1,图1为本申请实施例提供的一种应用场景的示意图,图1中以Hive元数据服务、元数据存储在MySQL数据库为例。

Hive库是建立在Hadoop上的数据仓库基础构架,Hive库可以将结构化的数据文件映射为一张数据库表(或称数据表格)。Hive库中的数据库表的表内数据存储在Hadoop分布式文件系统(即HDFS)中。Hive库中的数据库表的元数据存储在MySQL数据库中,其中,MySQL数据库为运行在存储服务器上的应用程序,可由MySQL数据库存储该元数据。元数据为描述数据库表的数据,例如数据库表的表内数据在HDFS中的存储路径、Hive库的库名、数据库表的表名、数据库表的建立时间等。

在实际应用中,要访问HDFS中存储的数据库表的表内数据,需要先获取相应的元数据。Hive库中的数据库表的元数据可由Hive元数据服务获取。Hive元数据服务(即HiveMetastore)由元数据服务器提供,Hive元数据服务为运行在元数据服务器上的应用程序。

如图1所示,客户端中安装有SQL引擎(如Presto)、SparkJar批流处理引擎、FlinkJar批流处理引擎、商业智能BI分析平台等。以Presto引擎为例,客户端的前端用户会在客户端中输入查询语句,例如SQL语句,该查询语句可以理解为数据分析任务中的一部分。例如,查询语句为select目标数据from table1。table1为Hive库中的数据库表。

Presto引擎用于解析该查询语句,获取该查询语句中目标数据对应的元数据。元数据用于描述该查询语句中的目标数据,例如元数据包括目标数据在HDFS中的存储路径。具体地,会调用Hive元数据服务来获取目标数据对应的元数据。在实际操作中,通过调用Hive元数据服务的接口来访问MySQL数据库,从MySQL数据库中获取目标数据对应的元数据。Presto引擎获取到目标数据对应的元数据后,便可根据目标数据对应的元数据确定目标数据的存储路径,因而便可根据该存储路径从HDFS读取目标数据,并将读取到的目标数据返回到客户端的前端。

在实际应用中,如图1所示,一个客户端的一个数据分析任务可能对Hive元数据服务发起多种访问,每种访问对应一个Hive元数据服务时,一个数据分析任务可能对应多个不同的Hive元数据服务(即多个Hive元数据服务实例),多个不同的Hive元数据服务访问同一MySQL数据库。或者,多个不同客户端均对不同的Hive元数据服务发起访问,则对应多个Hive元数据服务,各个Hive元数据服务也访问同一MySQL数据库。其中,各个Hive元数据服务可以运行于不同的元数据服务器中。此时,同一MySQL数据库的访问压力来自于各个Hive元数据服务。

如图1所示,MySQL数据库仅为1个。在实际应用中,为了缓解数据库的访问压力,还可布局多个MySQL数据库,多个MySQL数据库所在的存储服务器可为同一个或多个。

可以理解的是,当数据分析任务较为复杂时,使得服务负载压力较大。服务负载压力主要指的是服务端的负载压力。Hive元数据服务和MySQL数据库均属于服务端。服务的稳定性主要依赖于存储层,如MySQL数据库。若对Hive元数据服务的访问数量越多,则对MySQL数据库的负载压力越大,越影响Hive元数据服务的稳定性。

基于上述内容,下面结合图2所示的场景示例对本申请实施例提供的元数据服务器的访问限流方法进行说明。参见图2所示,该图为本申请实施例提供的示例性应用场景的框架示意图。该方法应用于运行元数据服务的数据湖元数据服务器中。

数据湖元数据服务器接收客户端发送的元数据访问请求,该请求用于获取存储服务器存储的用于描述目标数据的元数据。其中,目标数据为目标表格中的表格数据。目标表格可能为Hive库中的数据表格,目标数据存储于HDFS中,则元数据服务可为Hive元数据服务。存储服务器中可运行有MySQL数据库。

数据湖元数据服务器接收到访问请求后开启对该元数据访问请求的限流检查(可称为preCost限流检查)。具体地,先判断元数据服务接口是否满足预设条件,若满足,通过后续的限流步骤判断是否对该元数据访问请求进行限流处理。后续的限流步骤具体为,获取元数据访问请求的请求参数,即元数据访问请求中的目标表格的表分区数(表示为part_num)和分区层级数(表示为part_level)。根据目标表格的表分区数和分区层级数,确定元数据访问请求对应的申请令牌数(表示为preCost),并向令牌服务器申请对应数量的令牌数。令牌服务器的令牌桶中存储有各个客户端对应的最大令牌数(表示为Quota)。当元数据访问请求对应的申请令牌数大于客户端对应的剩余令牌数时,拒绝该元数据访问请求,进行限流处理,此时前端显示该访问请求异常退出。其中,当客户端首次发送元数据访问请求时,客户端对应的剩余令牌数即为该客户端对应的最大令牌数。

可以理解的是,若限流检查通过,按照正常逻辑处理,获取目标数据对应的元数据,元数据用于获取目标数据。

本领域技术人员可以理解,图2所示的框架示意图仅是本申请的实施方式可以在其中得以实现的一个示例。本申请实施方式的适用范围不受到该框架任何方面的限制。

为了便于理解本申请,下面结合附图对本申请实施例提供的一种元数据服务器的访问限流方法进行说明。

参见图3所示,该图为本申请实施例提供的一种元数据服务器的访问限流方法的流程图,该方法可应用于运行数据湖元数据服务的数据湖元数据服务器中。如图3所示,该方法可以包括S301-S305:

S301:接收客户端发送的元数据访问请求,元数据访问请求用于获取存储服务器存储的用于描述目标数据的元数据;目标数据为目标表格中的数据。

用户可在客户端的前端构建数据分析任务。在数据分析任务中,可能需要获取目标表格中的目标数据,目标数据具体需要通过用户构建的查询语句获得。则先构建查询语句,客户端的引擎解析该查询语句,确定需要获取目标数据对应的元数据。作为一种可选示例,通过运行数据湖元数据服务(本申请实施例中可简称为元数据服务)的数据湖元数据服务器来获取目标数据对应的元数据。因此,客户端向数据湖元数据服务器发送元数据访问请求。

数据湖元数据服务器接收客户端发送的元数据访问请求,该元数据访问请求便是用于获取描述目标数据的元数据。描述目标数据的元数据存储在存储服务器中。作为一种可选示例,存储服务器上运行有目标数据库,目标数据库例如为SQL数据库,则需要通过访问目标数据库来获取描述目标数据的元数据。其中,当目标数据库例如为SQL数据库时,上述实施例中所述的查询语句具体为SQL查询语句。

S302:根据元数据访问请求确定数据湖元数据服务器使用的元数据服务接口。

元数据访问请求对应有元数据服务接口。根据元数据访问请求能够确定数据湖元数据服务器使用的该元数据访问请求对应的元数据服务接口。

可以理解的是,数据湖元数据服务器的元数据服务接口有多个,每个服务接口的访问频率不同。元数据服务接口不同,表示访问类型不同。不同服务接口/不同访问类型对数据湖元数据服务器和存储服务器的访问压力不同。

作为一种可选示例,元数据服务接口可为get_partitions_by_filter,该接口是数据湖元数据服务器线上使用频率最高且对元数据存储负载压力变化最大的接口之一,其旨在筛选出指定库表下满足查询语句的所有分区,该接口为复杂接口。作为另一种可选示例,元数据服务接口还可为get_database,该接口为简单接口。简单接口和复杂接口对数据湖元数据服务器和存储服务器的访问压力不同。因此,不同服务接口获取元数据的规则不同,对应的限流规则也不同。

S303:当元数据服务接口满足预设条件时,获取元数据访问请求的请求参数;请求参数包括目标表格的表分区数和分区层级数。

可以理解的是,即使是调用同一元数据服务接口,元数据访问请求中不同的请求参数,对元数据存储的负载压力也不同。其中,请求参数包括目标表格的表分区数和分区层级数。可以理解的是,当请求参数中的表分区数越大,分区层级数越大,对元数据存储的负载压力可能越大。

因此,在该步骤中,先判断元数据服务接口是否满足预设条件,若满足,表示元数据服务接口的访问类型涉及表分区和表分区层级的访问。此时,获取元数据访问请求的请求参数。基于元数据访问请求的请求参数确定元数据存储的负载压力,判断是否对该元数据访问请求进行限流处理。

其中,预设条件可为预先给出的元数据服务接口列表,列表中的元数据服务接口均涉及表分区和表分区层级的访问。例如,满足预设条件的元数据服务接口可为上述的get_partitions_by_filter接口,还可为drop_table接口。其中,drop_table接口用于删除一张数据表。可以理解的是,当删除的数据表的容量(如表分区数越大,容量越大)不同时,对元数据存储的负载压力不同。

表分区层级用于表示数据表格中存储数据的维度。例如,可以按照时间对数据表格(例如Hive库中的数据表格)进行分区。例如,按照“日期”进行分区,例如1月1日、1月2日等,则1月1日对应的分区中只存储1月1日的数据。在此基础上,还可按照小时对数据表格进行分区,例如10点到11点、11点到12点等,则10点到11点对应的分区只存储10点到11点之间的数据。若仅按照“日期”进行分区,则表分区层级包括“日期”级,分区层级数为1。若还按照小时对数据表格进行分区,则表分区层级包括“日期”级以及“小时”级,分区层级数为2。可以理解的是,每个分区均对应一个分区数据存储路径,该分区数据存储路径用于指示分区中的数据的存储地址。例如,当数据表格中的表内数据均存储在HDFS中时,上述的表内数据在HDFS中的存储路径即为表内数据所在分区的分区数据存储路径。

表分区数为存储在数据表格中的表内数据所占用的各个分区的数量。当表分区层级为多层级时,表分区数仅为最细粒度的表分区层级下的各个分区的数量。例如,表分区层级包括“日期”级以及“小时”级时,表分区数为存储数据表格的表内数据所使用的各个“小时”级分区的数量。

基于上述内容,本步骤中的元数据访问请求的请求参数具体为目标表格的表分区数和分区层级数。目标表格的表分区层级用于表示目标表格中存储数据的维度。目标表格的表分区数为目标表格的表内数据所占用的各个分区的数量。其中,表分区数可用part_num进行表示,分区层级数可用part_level进行表示。

可以理解的是,目标数据库存储有数据表格的各个分区的元数据以及每个分区对应的分区数据存储路径。在实际应用中,会通过扫描存储服务器中的目标数据库的方式来获取目标表格的表分区数。而一些大表的分区数很多,实时扫描目标数据库获取分区数会比较耗时,同时增加目标数据库的负载压力。

基于此,在一种可能的实现方式中,本申请实施例提供了一种获取元数据访问请求的请求参数的具体实施方式,包括:

根据目标表格的表名称,从数据湖元数据服务器的内存中获取目标表格的表分区数和分区层级数;

其中,目标表格的表分区数存储于存储服务器中,当数据湖元数据服务器启动后,目标表格的表分区数被加载到数据湖元数据服务器的内存中;目标表格的分区层级数按照预设周期被加载到数据湖元数据服务器的内存中。

可以理解的是,为了降低目标数据库的负载压力的情况下,加速表分区数的获取过程,采用内存来存储数据表格的表分区数。具体地,数据湖元数据服务器的内存中存储有数据表格的表名称与目标表格的表分区数的对应关系,则可根据目标表格的表名称,从数据湖元数据服务器的内存中获取目标表格的表分区数。在实际应用中,数据湖元数据服务器会记录每个数据表格(例如Hive库中的每个数据表格)的表分区数。当数据表格的分区数变化(例如创建或删除)时,会对应更新记录的表分区数。当数据湖元数据服务器启动后,会将记录的数据表格的表分区数加载到数据湖元数据服务器的内存中,以便从内存中获取数据表格的表分区数。目标表格类似,这里不再赘述。

另外,也可采用内存来存储数据表格的分区层级数。可以理解的是,存储表分区数和分区层级数的内存可相同或不同。具体地,内存中存储有数据表格的表名称与目标表格的分区层级数的对应关系,则可根据目标表格的表名称,从数据湖元数据服务器的内存中获取目标表格的分区层级数。在实际应用中,会周期性将各个数据表格的分区层级数加载到内存中。例如,按照预设周期进行加载。在实际应用中,可数据湖元数据服务器先构建分区层级数查询指令,并向目标数据库发送分区层级数查询指令,目标数据库存储有数据表格的表分区层级,则能够基于分区层级数查询指令来计算数据表格的分区层级数。

基于上述内容,目标表格的表分区数和分区层级数均可从数据湖元数据服务器的内存中获取,能够加快请求参数的计算速度,加快后续的流程处理速度,使得元数据服务能够实现低延迟和高可用。

S304:根据表分区数和分区层级数,获取元数据访问请求对应的申请令牌数。

应理解,即使调用同一元数据服务接口,元数据访问请求中要获取的数据所属的数据表格不同、或者不同时间的同一张数据表格,均会由于数据表格的表分区数part_num和分区层级数part_level不同,而使得获取的申请令牌数不同。即便是同一张数据表格,随着业务发展,数据表格中的分区可能会发生变化,使得表分区数part_num也可能会变化,使得获取的元数据访问请求对应的申请令牌数也不同。因此,本申请实施例根据实际获取的元数据访问请求中的请求参数(即目标表格的表分区数和分区层级数)来确定该元数据访问请求对应的申请令牌数。

以get_partitions_by_filter接口为例,客户端的前端用户在客户端中发送的查询语句可为get_partitions_by_filter(s:“olap_dev”,s1:“hms_monitor”,s2:“p_date>=2”)。其中,olap_dev为库名(例如Hive库),hms_monitor为数据表格名称(例如目标表格的名称),p_date>=2表示日期大于或等于2的数据(例如目标数据为hms_monitor中日期date大于或等于2的数据),为要获取的数据。由于get_partitions_by_filter接口用于筛选出指定库表下满足查询语句的所有分区,则该查询语句得到的查询结果中包括hms_monitor表中日期大于或等于2的所有表分区的元数据。可以理解的是,get_partitions_by_filter接口为Hive元数据服务的接口,在该示例中,用户发送查询语句后,客户端中的引擎解析该语句后,由Hive元数据服务处理该元数据访问请求,即获取满足该查询语句的数据的元数据。最后得到的结果可能为满足该查询语句的两个表分区(如表分区1和表分区2),则表分区1和表分区2中的数据为日期大于或等于2的数据。此处,得到的查询结果中包括这两个表分区的分区数据存储路径、分区创建时间、分区创建人、分区所属库的库名、分区所属表的表名等元数据。客户端中的引擎会获取该元数据,进而,客户端引擎便可根据表分区1和表分区2的分区数据存储路径从HDFS中读取这两个表分区的表格数据,即能获得日期大于或等于2的表格数据。

可以理解的是,由上述get_partitions_by_filter接口示例可知,当目标表格的表分区数和分区层级数越大时,从各个表分区中获取满足查询语句的分区的过程会越复杂,处理成本越高,则需要的申请令牌数越大。申请令牌数用于表征元数据访问请求的处理成本。

基于此,在一种可能的实现方式中,本申请实施例提供了一种根据表分区数和分区层级数,获取元数据访问请求对应的申请令牌数的具体实施方式,包括:

计算表分区数的对数,获取第一值;

计算第一常量、分区层级数以及第一值的乘积,获取第二值;

计算第二值与第二常量的和,获取第三值;

计算第三值与第三常量的乘积作为元数据访问请求的申请令牌数;其中,第一常量、第二常量、第三常量与存储服务器的配置相关。

基于该具体实施方式,当表分区数用part_num进行表示,分区层级数用part_level进行表示,第一常量、第二常量、第三常量分别用x,y,z进行表示,申请令牌数用pre_cost进行表示时,申请令牌数的计算公式可表示为:pre_cost=(x*part_level*log(part_num)+y)*z。

其中,计算得到的第一值为log(part_num),第二值为x*part_level*log(part_num),第三值为(x*part_level*log(part_num)+y)。其中:log(part_num)是以10为底的part_num的对数。

作为一种可选示例,满足预设条件的元数据服务接口可为get_partitions_by_filter接口。get_partitions_by_filter接口为线上使用频率最高且对元数据存储负载压力变化最大的接口之一,则可通过get_partitions_by_filter接口进行压测,对线上不同分区层级,不同分区数的数据表格,并发发起请求进行压测,获取压测数据。并基于压测数据拟合得到元数据访问请求对应的申请令牌数的计算公式,主要为获得拟合的第一常量、第二常量和第三常量。其中,压测数据包括各个数据表格的表分区数、分区层级数以及元数据访问请求对应的申请令牌数。

可以理解的是,上述元数据访问请求对应的申请令牌数的计算公式可应用于任一涉及表分区数、表分区层级且满足预设条件的元数据服务接口。

还可以理解的是,第一常量x、第二常量y、第三常量z可统称为公式参数,公式参数与存储服务器的配置相关。若存储服务器的配置不同,则根据压测数据拟合到的公式参数不同。例如,若存储服务器用的20核虚拟机时,得到的申请令牌数的计算公式具体可为pre_cost=0.5227*part_level*log(part_num)+1.3747,其中,第一常量x为0.5227,第二常量y为0,第三常量z为1.3747。若存储服务器采用其他配置,则公式参数会相应地发生变化。

S305:当申请令牌数大于客户端对应的剩余令牌数时,对元数据访问请求进行限流处理。

在实际应用中,令牌服务器的令牌桶中存储有各个客户端对应的令牌,各个客户端对应的令牌的数量可能不同。当客户端还未申请令牌之前,令牌服务器中存储的客户端对应的令牌的数量为最大令牌数。当客户端向令牌服务器申请访问需要的令牌时,若申请通过,便会从令牌桶中取出相应数量的令牌,令牌桶中剩余的令牌用于客户端后续再申请时使用。

在获取元数据访问请求对应的申请令牌数pre_cost之后,便可在请求执行前基于pre_cost判断是否触发限流处理。具体地,向令牌服务器申请需要的令牌,将元数据访问请求对应的申请令牌数发送给令牌服务器。其中,令牌服务器中设置有令牌桶,令牌桶中存放有令牌。作为一种可选示例,令牌服务器可为Redis服务器。令牌服务器设置的脚本逻辑会比较申请令牌数与存储的客户端对应的剩余令牌数。若申请令牌数大于客户端对应的剩余令牌数,则表示令牌桶中的剩余令牌数不能满足要求。令牌服务器向数据湖元数据服务器返回失败的结果。此时,限流检查未通过,访问请求不成功,数据湖元数据服务器拒绝该元数据访问请求。如此,能够在保证元数据服务高并发、低延迟的同时,还能拦截异常访问请求。

可以理解的是,由于令牌桶中会继续生成新的令牌,被限流之后,还可重新发送该元数据访问请求。

另外,若申请令牌数小于或等于客户端对应的剩余令牌数,则表示令牌桶中的剩余令牌数能够满足要求。此时,会从令牌服务器中扣除与申请令牌数同等数量的令牌。令牌服务器将申请成功的结果返回数据湖元数据服务器,此时,限流检查通过,访问请求成功,数据湖元数据服务器执行该元数据访问请求。

基于上述S301-S305的相关内容可知,本申请提供了一种元数据服务器的访问限流方法,该方法应用于提供元数据服务的数据湖元数据服务器中。数据湖元数据服务器接收客户端发送的元数据访问请求,该请求用于获取存储服务器存储的用于描述目标数据的元数据,目标数据为目标表格中的数据。接收到访问请求后开启对该元数据访问请求的限流处理流程。具体地,先根据获取的元数据访问请求确定数据湖元数据服务器使用的元数据服务接口。当元数据服务接口满足预设条件时,获取元数据访问请求的请求参数,即目标表格的表分区数和分区层级数。目标表格的表分区数和分区层级数用于实现元数据访问请求的限流处理判断。即,先根据目标表格的表分区数和分区层级数,确定元数据访问请求对应的申请令牌数。当元数据访问请求对应的申请令牌数大于客户端对应的剩余令牌数时,对元数据访问请求进行限流处理。

可知,满足预设条件的元数据服务接口接收到的请求中的不同表格或者不同时间的同一张表格所对应的请求参数均可能不同,对应的申请令牌数会不同。因此,本申请能够通过元数据服务接口以及元数据访问请求的请求参数自适应地确定元数据访问请求对应的申请令牌数,以基于申请令牌数确定是否对元数据访问请求进行限流处理。如此,能够提高数据湖元数据服务器的服务稳定性,降低存储服务器的负载压力。

可知,在客户端未消耗令牌服务器中的令牌时,令牌服务器中存储的客户端对应的令牌的数量为最大令牌数。应理解,本申请实施例中所述的客户端对应的令牌数/最大令牌数均是针对数据湖元数据服务器而言的。客户端对应的最大令牌数可用Quota进行表示,Quota也可以理解为配额。Quota表示1分钟内,客户端在数据湖元数据服务器上允许执行请求的令牌总和。由于客户端向数据湖元数据服务器发送的请求用于访问存储服务器中的目标数据库,则该令牌数也可以理解为客户端访问目标数据库的最大令牌数。在实际应用中,存在多个数据湖元数据服务器实例对应一个目标数据库实例的情况,则单个目标数据库被访问所需的总令牌数与各个数据湖元数据服务器示例所需要消耗的令牌数相关。可以理解的是,令牌服务器中存储的各个客户端对应的令牌的数量可能不同。

基于此,在一种可能的实现方式中,本申请实施例提供了客户端对应的最大令牌数的获取过程,包括:

A1:根据目标表格所属库的库名确定对应的数据湖元数据服务器的地址,并根据数据湖元数据服务器的地址确定数据湖元数据服务器对应的存储服务器的数量。

由于不同的数据仓库(如Hive库)可能使用同一个或不同的数据湖元数据服务器(如Hive库),则数据仓库与使用的数据湖元数据服务器的地址之间存在路由关系/对应关系。基于此,目标表格所属库与数据湖元数据服务器的地址之间也存在路由关系,则可根据目标表格所属库的库名确定对应的数据湖元数据服务器的地址。

为了缓解数据库的访问压力,一个数据湖元数据服务器可布局多个存储服务器。若一个存储服务器上运行有一个目标数据库,则对应多个目标数据库。在确定数据湖元数据服务器的地址之后,可根据该地址确定数据湖元数据服务器对应的存储服务器的数量。

A2:根据数据湖元数据服务器对应的存储服务器的数量以及单个存储服务器的令牌数,计算客户端对应的最大令牌数;其中,单个存储服务器的令牌数与单位时间内存储服务器的线上访问请求消耗的令牌数统计量以及存储服务器的硬件使用率相关。

单个存储服务器的令牌数即单个存储服务器允许客户端消耗的令牌的上限数量,各个存储服务器的令牌数可相同或不同。作为一种可选示例,当数据湖元数据服务器对应的各个存储服务器的令牌数相同时,客户端对应的最大令牌数为数据湖元数据服务器对应的存储服务器的数量与单个存储服务器的令牌数的乘积。作为另一种可选示例,当数据湖元数据服务器对应的各个存储服务器的令牌数不相同时,客户端对应的最大令牌数为数据湖元数据服务器对应的各个存储服务器的数量之和。

单个存储服务器的令牌数与单位时间内存储服务器的线上访问请求消耗的令牌数统计量以及存储服务器的硬件使用率相关。其中,单位时间内存储服务器的线上访问请求消耗的令牌数统计量通过试验获取。硬件使用率包括中央处理器使用率和/或内存使用率等。

在实际试验过程中,埋点统计单位时间(如1分钟)内线上存储服务器接收到的元数据访问请求消耗的令牌数的均值或峰值,该均值或峰值即为令牌数统计量。例如,均值为1500个令牌。并且,记录此时的中央处理器使用率,例如为10%。10%的中央处理器使用率与均值1500相对应。作为一种可选示例,单个存储服务器的令牌数为存储服务器的允许的中央处理器使用率对应的令牌数。例如,允许的中央处理器使用率为20%,在此使用率下存储服务器仍能正常工作,则按照比例关系,20%的中央处理器使用率对应的令牌数即为上述的令牌数统计量的2倍,即3000个令牌。

可以理解的是,上述试验过程与存储服务器的配置(例如目标数据库的配置)相关,当存储服务器的配置更改后,则相应的单个存储服务器的令牌数也会发生变化。

可知,在数据湖元数据服务器的限流功能上线之前,还需要先预估每个客户端对应的最大令牌数,可称为预估最大令牌数,以使数据湖元数据服务器的限流功能正常上线。因此,在实际应用中还需获取客户端对应的预估最大令牌数。

作为一种可选示例,根据线上容量最大且最常用的一张数据表格的压测数据来推算客户端对应的预估最大令牌数。例如,压测时,单台存储服务器实例1分钟处理的请求数是445,此时,存储服务器的中央处理器使用率达到40%。进而,取一个典型的实际请求数(即请求返回的结果数)为72(线上请求大部分返回的结果数小于100),算得实际使用令牌数为42(计算方式参见下文)。则,中央处理器使用率为40%时,预估最大令牌数为445*42=18690。若按照中央处理器使用率为10%时,则单个存储服务器对应的预估最大令牌数为18690/4=4672。可以理解的是,若存储服务器数量为多个,则可按照该方式确定每个存储服务器对应的预估最大令牌数。可以理解的是,客户端对应的令牌用于访问存储服务器,即存储服务器对应的预估最大令牌数为客户端对应的预估最大令牌数。

可知,还存在一些元数据服务接口不满足设置的预设条件。此时,本申请实施例提供的元数据服务器的访问限流方法还可包括如下步骤:

当元数据服务接口不满足预设条件时,根据元数据服务接口的限流规则确定是否对元数据访问请求进行限流处理。

以上实施例所述的S303-S305可以理解为是满足预设条件下的元数据服务接口的限流规则。而当元数据服务接口不满足预设条件时,表示元数据服务接口的访问类型不涉及表分区的访问。此时,不满足预设条件的元数据服务接口对应有其自身的限流规则,无需使用S303-S305所述的访问请求限流流程。

不满足预设条件的元数据服务接口的限流规则与该元数据服务接口的元数据获取方式相关。一些元数据服务接口(例如get_table接口)通过索引的方式获取元数据,无需扫描目标数据库来获取满足查询条件的目标数据对应的元数据。例如,客户端记录有索引和目标数据之间的对应关系,当确定要获取目标数据时,便可根据该对应关系确定目标数据的索引,目标数据的索引用于指示该目标数据在HDFS中的存储位置。可知,通过索引确定目标数据的存储位置的方式无需对存储服务器中的目标数据库进行大范围扫描,则对目标数据库的负载压力较小,通常为常数级。此时,便可通过QPS的方式进行限流。这里仅作为示例进行说明,具体的限流规则可根据实际的元数据服务接口进行设置。

例如,另一些元数据服务接口不获取表分区级别的信息,而是获取表级别的信息,此时还需根据该元数据服务接口的自身的限流规则进行限流,这里不再赘述。

参见图4,图4为本申请实施例提供的另一种示例性应用场景的示意图。如图4所示,在正常逻辑处理(即不进行限流处理,执行元数据访问请求)之后,还会获取实际使用令牌数,实际使用令牌数可用postCost进行表示。进一步,进行元数据访问请求所使用的令牌数的修正(即图4所示的postCost修正)。在修正过程前,会先获取元数据访问请求执行后返回的实际表分区数,可用result_num进行表示。再利用part_num、part_level、result_num计算得到postCost。进而,向令牌服务器申请postCost数量的令牌,以完成postCost修正,并返回客户端。

参见图5,图5为本申请实施例提供的另一种元数据服务器的访问限流方法的流程图,该方法描述了如何对元数据访问请求所使用的令牌数进行修正的过程,该方法包括S501-S504:

S501:当申请令牌数小于或等于客户端对应的剩余令牌数时,执行元数据访问请求。

当申请令牌数小于或等于客户端对应的剩余令牌数时,不进行限流处理,执行元数据访问请求,即访问存储服务器以获取描述目标数据的元数据。其中,元数据包括筛选到的分区的所属库名、所属表名、创建时间以及存储信息,存储信息中包括筛选到的目标数据所属的分区的HDFS路径。

可以理解的是,客户端对应的剩余令牌数为对元数据访问请求进行限流逻辑判断时的令牌服务器中存储的客户端对应的剩余令牌数。

S502:获取元数据访问请求执行后返回的实际表分区数。

在执行元数据访问请求后,会返回实际满足查询语句的结果数(也可称为查询返回的记录数),该结果数为查询语句中目标数据所属的分区的分区数,即实际表分区数。例如,以上述示例为例,查询语句中的目标数据为日期大于或等于2的数据,满足该查询语句的表分区为表分区1和表分区2。则实际表分区数为2个,即结果数为2。每个结果中包括一个表分区的元数据,如表分区1的元数据以及表分区2的元数据。由于表分区1和表分区2中的数据即为目标数据,则表分区1和表分区2的元数据即描述目标数据的元数据。

S503:基于请求参数中的表分区数、分区层级数以及实际表分区数,获取元数据访问请求的实际使用令牌数。

在实际应用中,通过压测试验确定元数据访问请求所使用的令牌数与表分区数part_num,分区层级数part_level以及实际表分区数result_num均相关。而实际表分区数需要执行完元数据访问请求之后才能获取到,因此实际表分区数result_num对元数据访问请求所使用的令牌数的影响只能在元数据访问请求执行后才能计算。

可以理解的是,若同一数据表格(即目标数据所属的数据表格,如hive表),若part_num、part_level相同,result_num不相同,意味着元数据访问请求所使用的令牌数可能也不相同。

具体地,基于请求参数中的表分区数、分区层级数以及实际表分区数,获取元数据访问请求的实际使用令牌数。

在一种可能的实现方式中,本申请实施例提供了一种基于请求参数中的表分区数、分区层级数以及实际表分区数,获取元数据访问请求的实际使用令牌数的具体实施方式,包括:

计算表分区数的对数,获取第一值;

计算实际表分区数的对数,获取第二值;

计算第四常量、分区层级数、第一值以及第二值的乘积作为元数据访问请求的实际使用令牌数;第四常量与存储服务器的配置相关。

基于该具体实施方式,当表分区数用part_num进行表示,分区层级数用part_level进行表示,实际表分区数用result_num进行表示,第四常量用a进行表示,实际使用令牌数用post_cost进行表示时,实际使用令牌数的计算公式可表示为:post_cost=a*part_level*log(part_num)*log(result_num)。

其中,计算得到的第一值为log(part_num);第二值为log(result_num),为以10为底的result_num的对数。实际使用令牌数的计算公式与申请令牌数的计算公式的获取方式类似,均为压测拟合得到。第四常量a的获取方式与第一常量、第二常量和第三常量类似,第四常量也属于公式参数。例如:若存储服务器用的20核虚拟机时,实际使用令牌数的计算公式具体为:post_cost=0.8214*part_level*log(part_num)*log(result_num),第四常量a为0.8214。

S504:当实际使用令牌数大于申请令牌数时,计算实际使用令牌数与申请令牌数的差值,向令牌服务器申请与差值同等数量的令牌数。

当实际使用令牌数大于申请令牌数时,表示预计算的申请令牌数偏低,需要进行修正。此时,再次访问令牌服务器,申请(实际使用令牌数-申请令牌数)数量的令牌。此外,令牌服务器还需要对该客户端对应的剩余令牌数进行重新计算,且反映在下一次的请求限流中。

可以理解的是,当申请失败时,直接进入后续处理流程即可。后续处理流程即为下一次的元数据访问请求的限流处理流程。

基于S501-S504的相关内容可知,为了进行元数据访问请求的限流处理,先基于元数据服务接口以及元数据访问请求的请求参数(表分区数以及表分区层级数)计算申请令牌数。当申请令牌数满足要求时,执行元数据访问请求。当元数据访问请求执行后,获取基于元数据访问请求执行后返回的实际表分区数,再基于该实际表分区数对元数据访问请求所使用的令牌数进行修正,使得客户端向令牌服务器申请的令牌总数为该实际使用令牌数。如此,能够使得令牌服务器中存储的该客户端的剩余令牌数更加准确,以便于下一次该客户端的元数据访问请求的限流处理结果更加准确。

本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。

本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。

基于上述方法实施例提供的一种元数据服务器的访问限流方法,本申请实施例还提供了一种元数据服务器的访问限流装置,下面将结合附图对元数据服务器的访问限流装置进行说明。由于本公开实施例中的装置解决问题的原理与本申请实施例上述元数据服务器的访问限流方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。

参见图6所示,该图为本申请实施例提供的一种元数据服务器的访问限流装置的结构示意图。如图6所示,该元数据服务器的访问限流装置包括:

接收单元601,用于接收客户端发送的元数据访问请求,所述元数据访问请求用于获取存储服务器存储的用于描述目标数据的元数据;所述目标数据为目标表格中的数据;

第一确定单元602,用于根据所述元数据访问请求确定所述数据湖元数据服务器使用的元数据服务接口;

第一获取单元603,用于当所述元数据服务接口满足预设条件时,获取所述元数据访问请求的请求参数;所述请求参数包括所述目标表格的表分区数和分区层级数;

第二获取单元604,用于根据所述表分区数和所述分区层级数,获取所述元数据访问请求对应的申请令牌数;

处理单元605,用于当所述申请令牌数大于所述客户端对应的剩余令牌数时,对所述元数据访问请求进行限流处理。

在一种可能的实现方式中,所述第二获取单元604,包括:

第一计算子单元,用于计算所述表分区数的对数,获取第一值;

第二计算子单元,用于计算第一常量、所述分区层级数以及所述第一值的乘积,获取第二值;

第三计算子单元,用于计算所述第二值与第二常量的和,获取第三值;

第四计算子单元,用于计算所述第三值与第三常量的乘积作为所述元数据访问请求的申请令牌数;其中,所述第一常量、所述第二常量、所述第三常量与所述存储服务器的配置相关。

在一种可能的实现方式中,所述装置还包括:

执行单元,用于当所述申请令牌数小于或等于所述客户端对应的剩余令牌数时,执行所述元数据访问请求;

第三获取单元,用于获取所述元数据访问请求执行后返回的实际表分区数;

第四获取单元,用于基于所述请求参数中的表分区数、分区层级数以及所述实际表分区数,获取所述元数据访问请求的实际使用令牌数;

申请单元,用于当所述实际使用令牌数大于所述申请令牌数时,计算所述实际使用令牌数与所述申请令牌数的差值,向令牌服务器申请与所述差值同等数量的令牌数。

在一种可能的实现方式中,所述第四获取单元,包括:

第五计算子单元,用于计算所述表分区数的对数,获取第一值;

第六计算子单元,用于计算所述实际表分区数的对数,获取第二值;

第七计算子单元,用于计算第四常量、所述分区层级数、所述第一值以及所述第二值的乘积作为所述元数据访问请求的实际使用令牌数;所述第四常量与所述存储服务器的配置相关。

在一种可能的实现方式中,所述第一获取单元603,具体用于:

根据所述目标表格的表名称,从所述数据湖元数据服务器的内存中获取所述目标表格的表分区数和分区层级数;

其中,所述目标表格的表分区数存储于所述存储服务器中,当所述数据湖元数据服务器启动后,所述目标表格的表分区数被加载到所述数据湖元数据服务器的内存中;所述目标表格的分区层级数按照预设周期被加载到所述数据湖元数据服务器的内存中。

在一种可能的实现方式中,所述客户端对应有最大令牌数;所述客户端对应的最大令牌数的获取过程,包括:根据所述目标表格所属库的库名确定对应的数据湖元数据服务器的地址,并根据所述数据湖元数据服务器的地址确定所述数据湖元数据服务器对应的存储服务器的数量;根据所述数据湖元数据服务器对应的存储服务器的数量以及单个所述存储服务器的令牌数,计算所述客户端对应的最大令牌数;其中,单个所述存储服务器的令牌数与单位时间内所述存储服务器的线上访问请求消耗的令牌数统计量以及所述存储服务器的硬件使用率相关。

在一种可能的实现方式中,所述装置还包括:

第二确定单元,用于当所述元数据服务接口不满足所述预设条件时,根据所述元数据服务接口的限流规则确定是否对所述元数据访问请求进行限流处理。

需要说明的是,本实施例中各个单元的具体实现可以参见上述方法实施例中的相关描述。本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。本申请实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。例如,上述实施例中,处理单元和发送单元可以是同一个单元,也可以是不同的单元。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

基于上述方法实施例提供的一种元数据服务器的访问限流方法,本申请还提供一种电子设备,包括:一个或多个处理器;存储装置,其上存储有一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一实施例所述的元数据服务器的访问限流方法。

下面参考图7,其示出了适于用来实现本申请实施例的电子设备700的结构示意图。本申请实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(Personal Digital Assistant,个人数字助理)、PAD(portable androiddevice,平板电脑)、PMP(Portable Media Player,便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV(television,电视机)、台式计算机等等的固定终端。图7示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。

如图7所示,电子设备700可以包括处理装置(例如中央处理器、图形处理器等)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储装置708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM703中,还存储有电子设备700操作所需的各种程序和数据。处理装置701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。

通常,以下装置可以连接至I/O接口705:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置706;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置707;包括例如磁带、硬盘等的存储装置708;以及通信装置709。通信装置709可以允许电子设备700与其他设备进行无线或有线通信以交换数据。虽然图7示出了具有各种装置的电子设备700,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。

特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置709从网络上被下载和安装,或者从存储装置708被安装,或者从ROM702被安装。在该计算机程序被处理装置701执行时,执行本申请实施例的方法中限定的上述功能。

本申请实施例提供的电子设备与上述实施例提供的元数据服务器的访问限流方法属于同一发明构思,未在本实施例中详尽描述的技术细节可参见上述实施例,并且本实施例与上述实施例具有相同的有益效果。

基于上述方法实施例提供的一种元数据服务器的访问限流方法,本申请实施例提供一种计算机可读介质,其上存储有计算机程序,其中,所述程序被处理器执行时实现如上述任一实施例所述的元数据服务器的访问限流方法。

需要说明的是,本申请上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。

在一些实施方式中,客户端、服务器可以利用诸如HTTP(Hyper Text TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。

上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。

上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备执行上述元数据服务器的访问限流方法。

可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元/模块的名称在某种情况下并不构成对该单元本身的限定,例如,语音数据采集模块还可以被描述为“数据采集模块”。

本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。

在本申请的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。

需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统或装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

应当理解,在本申请中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:只存在A,只存在B以及同时存在A和B三种情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。

还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

相关技术
  • 基于元数据服务器删除小文件的方法、装置及设备
  • 一种访问权限开放方法、装置、服务器及存储介质
  • 一种业务访问方法、装置、终端、服务器及存储介质
  • 一种块设备访问控制方法、装置及设备
  • 一种基于闪存阵列的关联元数据删除方法、装置及设备
  • 一种WEB服务器的限流方法、限流装置及终端设备
  • 一种设备访问方法、设备访问装置及服务器
技术分类

06120116481534