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

分布式应用的接口性能监测方法、装置、设备及存储介质

文献发布时间:2023-06-19 10:24:22


分布式应用的接口性能监测方法、装置、设备及存储介质

技术领域

本公开涉及计算机技术领域,尤其涉及云平台等技术领域。

背景技术

随着计算机技术的不断发展,接口已经成为各个服务之间通信的桥梁。监测接口性能对业务系统提供稳定地服务具有重要意义。

传统的接口性能监测主要使用JMeter,LoadRunner等压测工具,在压测过程中记录接口响应时间,并使用接口响应时间平均值作为参考,或者,使用Prometheus等监控工具实现接口性能监控。

但是,压测工具一般仅限于压测阶段,不能满足线上系统的持续监控。Prometheus等监控工具一般只能实现单实例的接口响应时间监控,对于单体架构,或主备架构等相对简单的系统架构比较合适,但难以适用于分布式应用集群。

发明内容

本公开提供了一种分布式应用的接口性能监测方法、装置、电子设备以及存储介质。

根据本公开的一方面,提供了一种分布式应用的接口性能监测方法,包括:在监测到调用方请求调用分布式应用的接口的情况下,监测获得上述接口响应上述调用方的请求的性能数据;根据上述接口响应上述调用方的请求的性能数据,更新上述接口的性能数据分布特征,得到更新后的上述接口的性能数据分布特征;以及根据上述更新后的上述接口的性能数据分布特征,对上述分布式应用的接口性能进行监测。

根据本公开的另一方面,提供了一种分布式应用的接口性能监测装置,包括:获得模块、更新模块和监测模块。

获得模块,用于在监测到调用方请求调用分布式应用的接口的情况下,监测获得上述接口响应上述调用方的请求的性能数据;

更新模块,用于根据上述接口响应上述调用方的请求的性能数据,更新上述接口的性能数据分布特征,得到更新后的上述接口的性能数据分布特征;以及

监测模块,用于根据上述更新后的上述接口的性能数据分布特征,对上述分布式应用的接口性能进行监测。

根据本公开的另一方面,提供了一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如上所述的方法。

根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行如上所述的方法。

根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现如上所述的方法。

应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。

附图说明

附图用于更好地理解本方案,不构成对本公开的限定。其中:

图1示意性示出了根据本公开实施例的可以应用分布式应用的接口性能监测方法及装置的示例性系统架构;

图2示意性示出了根据本公开实施例的分布式应用的接口性能监测方法的流程图;

图3示意性示出了根据本公开实施例的监测获得接口响应调用方的请求的性能数据的示意图;

图4示意性示出了根据本公开实施例的直方图的逻辑数据结构的示意图;

图5示意性示出了根据本公开实施例的监测获得接口响应调用方的请求的性能数据的示意图;

图6示意性示出了根据本公开实施例的在聚合项存储数据结构中更新性能数据分布特征的流程图;

图7示意性示出了根据本公开实施例的将聚合项存储数据结构发送至数据仓库的流程图;

图8示意性示出了根据本公开实施例的将每个分布式应用发送的属于同一个接口的响应时间数据分布特征进行聚合处理并确定分位值的流程图;

图9示意性示出了根据本公开实施例的基于数据仓库查询分位值的流程图;

图10示意性示出了根据本公开实施例的使用UDAF函数查询分位值的流程图;

图11示意性示出了根据本公开另一实施例的用于分布式应用的接口性能监测方法的示意图;

图12示意性示出了根据本公开实施例的分布式应用的接口性能监测装置的框图;以及

图13示意性示出了可以用来实施本公开的实施例的示例电子设备的示意性框图。

具体实施方式

以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

分布式架构是一种信息系统的主流架构,目前广泛应用于移动互联网、云计算、大数据、物联网等各类技术体系中,是信息化时代的基础技术。在分布式架构中,接口是应用对外提供服务的基本单元。建立在分布式系统之上的信息系统,每天可能发生几万至上亿次的各类接口调用,产生TB级的监控数据,对监控系统的设计也提出了巨大的挑战。

在实现本公开的过程中发现,对分布式应用的接口性能的监测目前没有较好的监测方案,进一步地,对接口响应时间分位值的监测,是接口性能分析中的难点。

根据本公开的实施例,提供了一种分布式应用的接口性能监测方法、装置、电子设备以及存储介质。

该分布式应用的接口性能监测方法包括:在监测到调用方请求调用分布式应用的接口的情况下,监测获得上述接口响应上述调用方的请求的性能数据;根据上述接口响应上述调用方的请求的性能数据,更新上述接口的性能数据分布特征,得到更新后的上述接口的性能数据分布特征;以及根据上述更新后的上述接口的性能数据分布特征,对上述分布式应用的接口性能进行监测。

图1示意性示出了根据本公开实施例的可以应用分布式应用的接口性能监测方法及装置的示例性系统架构。

需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。

如图1所示,根据该实施例的系统架构100可以包括分布式的服务器110、服务器120和服务器130,终端设备121、122、123,终端设备131、132、133。服务器110可以与服务器120和服务器130通信连接,终端设备121、122、123可以与服务器120通信连接,终端设备131、132、133可以与服务器130通信连接。

根据本公开的实施例,上述通信连接方式可以包括各种连接类型,例如有线和/或无线通信链路等等。

终端设备121、122、123,终端设备131、132、133上可以安装有各种通讯客户端应用,例如知识阅读类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端和/或社交平台软件等(仅为示例)。

终端设备121、122、123,终端设备131、132、133可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

服务器110、服务器120和服务器130可以是提供各种服务的服务器,例如对用户利用终端设备所浏览的内容提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。

应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

图2示意性示出了根据本公开实施例的分布式应用的接口性能监测方法的流程图。

如图2所示,该方法包括操作S210~S230。

在操作S210,在监测到调用方请求调用分布式应用的接口的情况下,监测获得接口响应调用方的请求的性能数据。

在操作S220,根据接口响应调用方的请求的性能数据,更新接口的性能数据分布特征,得到更新后的接口的性能数据分布特征。

在操作S230,根据更新后的接口的性能数据分布特征,对分布式应用的接口性能进行监测。

根据本公开的实施例,对性能数据的类型不做限定。例如,性能数据包括但不限于响应时间间隔数据,请求数据量数据,并发度数据,SQL执行数,缓存命中数,下游服务调用数,日志打印数等等。

根据本公开的实施例,性能数据分布特征是对接口的性能数据的摘要,可以用于近似估算分位值、平均值等等。数据分布特征可以是满足如下一种或多种特征的数据结构:描述原数据样本的分布结构;可接收新的数据样本调整数据分布(即进行聚合);符合结合律,即多个数据分布可以合并成一个总的数据分布;可以用数据分布估算出原数据样本的近似分位值;使用常数大小内存空间,且精度可控。

根据本公开的实施例,每次拦截到接口调用后,获取到本次调用的接口性能数据,然后更新本接口的性能数据分布特征。

通过本公开的实施例,更易于整合其它监控,相比于分布式监控大多实施在应用层面,本公开的实施例在应用层实施接口拦截,易于与其它性能监控工具,链路监控工具等进行整合。

图3示意性示出了根据本公开实施例的监测获得接口响应调用方的请求的性能数据的示意图。

如图3所示,获取到新的接口性能数据之后,将新的接口性能数据与接口之前的性能数据分布特征进行聚合,使用合并算法得到更新后的接口的性能数据分布特征。

根据本公开的实施例,数据分布的具体实现有很多种,例如包括但不限于直方图,T-Digest算法,Q-Digest算法,DK算法等,对具体的实现选择不做限定。

根据本公开的实施例,根据更新后的接口的性能数据分布特征,对分布式应用的接口性能进行监测时,可以根据更新后的接口的性能数据分布特征确定接口的分位值,基于分位值对分布式应用的接口性能进行监测。分位值的精度取决于数据分布算法选型,通过合适的选型和设计,在实践中可以达到0.1%左右的精确程度。

通过本公开的实施例,可以面向大规模分布式应用的接口性能监测,尤其是接口响应时间分位值的监测,统计信息可以精确到每个接口,本公开的实施例可以解决分布式系统本身特点带来的监控复杂度,对分布式系统接口性能实施有效的监控,适用线上系统,不局限于测试阶段。

图4示意性示出了根据本公开实施例的直方图的逻辑数据结构的示意图。

如图4所示,以数据分布为直方图为例,直方图包含若干个分桶,每个分桶包含一个下边界和上边界。分桶的上下边界确定了原数据样本在该区间内的个数。

以样本数据为接口响应时间为例,由于接口响应时间具有强偏向性(即绝大多数接口调用都在短时间内返回,少数调用消耗长时间返回),所以越靠近0的分桶间隔越小,精确度越高,越高的响应时间区间,设置分桶越稀疏,精确度越低,根据本公开的实施例,可以采用以3%为分桶步长增长。

根据本公开的实施例,性能数据分布特征的数据存储结构可以采用数组int[]结构,在内存中存储。例如:

int histogram[N];N=分桶数

数组每一项代表一个分桶,数组每一项的值代表分桶内包含数据样本的个数。例如:

histogram[83]=108代表有108个数据样本的值在第83个分桶(99-101)的区间内。

根据本公开的实施例,一个分布式应用的所有实例内的直方图具有相同的结构,以便进行多个直方图的聚合。每当获取到新的数据样本(例如,接口响应时间),在直方图中找到上下边界包含数据样本值的分桶,将分桶的数值+1,即完成了性能数据分布特征的更新。

根据本公开的实施例,通过直方图推算分位值P%的算法如下:

首先计算出直方图各分桶中数字的总和,即总共有多少数据样本total=sum(histogram[i]);i=0...N;

然后计算出有多少数字比第P%大的数字小count=total*P%;

然后,从左到右依次累加histogram中每个分桶中的数字,和记为s,直到累加第k个分桶后,总和>=count。伪代码如下:

s=0,i=0

while(s<count)

s+=histogram[i]

i++

end

k=i

于是可以得出P%分位值为histogram[k]分桶所对应的分桶区间,取分桶下边界为分位值估算值。(假如是535-551,则P%分位值为535)。

根据本公开的实施例,对于每个接口,可以单独存储一个直方图记录接口的性能数据。本地直方图聚合的过程可以包括接收数据样本,找到对应接口信息,更新接口性能数据直方图,定时上传和清空本地直方图。

根据本公开的实施例,以性能数据为响应时间间隔数据为例,在监测到调用方请求调用分布式应用的接口的情况下,监测获得接口响应调用方的请求的性能数据包括:在监测到调用方请求调用分布式应用的接口的情况下,记录接口的调用开始时间;记录接口的调用完成时间;以及根据调用开始时间和调用完成时间确定接口响应调用方的请求的性能数据。

根据本公开的实施例,可以将调用完成时间减去调用开始时间,得到响应时间间隔数据。该响应时间间隔数据作为接口响应调用方的请求的性能数据。

下面参考图5,结合具体实施例对图2所示的方法做进一步说明。

图5示意性示出了根据本公开实施例的监测获得接口响应调用方的请求的性能数据的示意图。

如图5所示,调用方501发起接口调用,请求调用分布式应用的接口503。

根据本公开的实施例,在接口拦截阶段,使用拦截代码502拦截应用的各个接口,在接口执行前后执行监测逻辑,记录接口的调用开始时间和调用完成时间,从而计算出接口的响应时间差,然后将响应时间差发送到聚合逻辑504,以便聚合逻辑504根据原有的数据分布特征和新得到的响应时间差进行聚合更新。

根据本公开的实施例,拦截代码502的具体技术可以通过手工埋点、Java字节码增强等方式来实现。

根据本公开的实施例,根据接口响应调用方的请求的性能数据,更新接口的性能数据分布特征包括:根据接口的接口标识,从聚合项存储数据结构中确定与接口的接口标识对应的性能数据分布特征,其中,聚合项存储数据结构中包括多个接口标识以及每个接口标识对应的性能数据分布特征;以及根据接口响应调用方的请求的性能数据,在聚合项存储数据结构中更新接口的性能数据分布特征。

根据本公开的实施例,使用聚合项存储数据结构,可以将集群的所有实例监测数据汇聚成应用级别进行观测,进而屏蔽分布式系统底层的离散性,可以整体直观地监测到分布式应用的接口性能指标。

根据本公开的实施例,聚合项存储数据结构的表现形式不做限定,只要能满足接口标识到相应性能数据分布特征的映射关系的数据结构即可。聚合项存储数据结构例如包括但不限于表格(table),哈希表(map),二分查找表(list)等。具体地,聚合项存储数据结构例如可以采用java的HashMap数据结构。

由于分布式系统中的每个应用实例(即分布式应用)上会包含若干个接口。对于每个接口需要分别记录性能的数据分布。根据本公开的实施例,可以利用表格数据结构来存储各个接口的数据分布,如表1所示。

表1

在表1中记录了若干个接口的性能的数据分布。此外,表1中还可以包括应用名,记录每个接口的数据分布的聚合开始时间,聚合周期等等。

当采集到新的性能数据时,先根据接口标识,在上述表格中找到接口对应的行,然后将新的性能数据(例如本次调用响应时间)合并进接口标识对应的数据分布中。

根据本公开的实施例,在聚合项存储数据结构中不包括接口的接口标识的情况下,在聚合项存储数据结构中新建关于接口的接口标识的聚合项,以便基于新建的聚合项在聚合项存储数据结构中更新接口的性能数据分布特征。

图6示意性示出了根据本公开实施例的在聚合项存储数据结构中更新性能数据分布特征的流程图。

如图6所示,该方法包括操作S610~S660。

在操作S610,获取携带有接口标识的性能数据。

在操作S620,根据接口标识遍历聚合项存储数据结构,寻找与该接口标识对应的行(也可以称之为聚合项)。

在操作S630,判断聚合项存储数据结构中是否存在该聚合项。

在操作S640,若不存在,根据该新的接口标识新建一个聚合项,数据分布为空。

在操作S650,若存在,获取该聚合项的数据分布。

在操作S660,将本次获取的性能数据与该聚合项的数据分布进行聚合,更新该聚合项的数据分布。

根据本公开的实施例,分布式应用可以在本地分别记录各个接口和其性能数据的数据分布。每到达预设监测时长(例如,表1中的聚合周期)后,将聚合项存储数据结构中的全部内容发送到数据仓库,并清空本地聚合项存储数据结构。

根据本公开的实施例,根据更新后的接口的性能数据分布特征,对分布式应用的接口性能进行监测包括:在达到预设监测时长的情况下,将聚合项存储数据结构发送至数据仓库;以及删除分布式应用本端存储的聚合项存储数据结构。

根据本公开的实施例,通过在分布式应用的本地聚合,在端上分担压力,可承载高并发场景,节省本地存储资源。

根据本公开的实施例,预设监测时长可以根据实际需求进行设定,例如,预设监测时长可以是10分钟,1小时,2小时等等。

根据本公开的实施例,在将聚合项存储数据结构发送至数据仓库的情况下,还可以将聚合项存储数据结构中的数据进行序列化。

图7示意性示出了根据本公开实施例的将聚合项存储数据结构发送至数据仓库的流程图。

如图7所示,该方法包括操作S710~S750。

在操作S710,到达预设监测时长。

在操作S720,取聚合项存储数据结构中的一行数据。

在操作S730,序列化成可传输格式。

在操作S740,是否是聚合项存储数据结构中的最后一行。

在操作S750,若是,打包所有数据,发送至数据仓库。若否,返回执行操作S720。

根据本公开的实施例,在操作S730中,可以采用小端格式对数据进行处理。如果选择C/C++实现的数据仓库,则可以采用小端格式序列化。由于x86架构小端格式,序列化数据可以保持一致格式,可以方便C/C++解析。如果采用Java实现或其它大端格式的数仓,则无需采用小端格式。

根据本公开的实施例,如果性能数据分布特征为接口响应时间的分布特征,由于接口响应时间数据一般具有强偏向性,聚合项存储数据结构中内部会存在大量零值,启用压缩可以显著压缩数据体积,减小网络传输和存储资源占用。具体压缩算法可以采用GZIP,BZIP2等。

根据本公开的实施例,由于聚合项存储数据结构中数据本身可以是二进制格式,通过例如BASE64等算法编码成文本格式,更加易于传输、存储和调试。

根据本公开的实施例,分布式应用可以包括多个接口,根据更新后的接口的性能数据分布特征,对分布式应用的接口性能进行监测包括:在达到预设监测时长的情况下,将每个接口当前的性能数据分布特征发送至数据仓库;删除分布式应用本端存储的所有性能数据分布特征。

根据本公开的实施例,通过在分布式应用的本地聚合,在端上分担压力,可承载高并发场景。同时,多级聚合的方法可以有效控制数据量,承载大规模分布式系统海量数据。

根据本公开的实施例,以性能数据为响应时间为例,将拦截到的响应时间聚合进数据分布中之后,每到达聚合时间区间(即预设监测时长)后,将本地的数据分布上传到数据仓库,然后清空本地的数据分布。

根据本公开的实施例,可以实现应用级别监控,不局限于单个应用实例,可以直观感知分布式应用的性能波动。

根据本公开的实施例,在数据仓库端,可以对各个应用实例上传的数据分布按接口标识进行二次聚合,对一个接口合并成一个总数据分布,从而计算接口总分位值。

根据本公开的实施例,数据仓库中存储了分布式系统中所有接口的性能数据分布特征表,例如,性能数据分布特征表的结构可以如表2所示。

根据本公开的实施例,数据仓库中存储有由分布式系统中的一个或多个分布式应用发送的性能数据分布特征,可以将每个分布式应用发送的属于同一个接口的性能数据分布特征进行聚合处理,得到聚合后的属于同一个接口的性能数据分布聚合特征。

根据本公开的实施例,通过多级聚合,压缩数据量,面向大规模分布式系统的监测承载能力进行设计,实现了高性能的效果。

表2

在实现本公开的过程中发现,如果采用相关技术进行接口分位值监控具有比较大的局限性,不能满足集群化部署的分布式应用监测,而且,监测时对计算资源要求比较高,难以适应大型系统监控下性能与收益的平衡。

由于分位值实现的难度,目前难以找到满足分布式应用监控需求的分位值监控系统、功能或服务。同时,由于分位值本身对接口性能的敏感度高,使得分位值数据在性能分析中具有很大价值,亟待研发一种满足分布式系统需求的分位值监测技术。

根据本公开的实施例,在获得接口的性能数据分布特征之后,可以根据属于同一个接口的性能数据分布聚合特征,可以确定每个接口的分位值。

根据本公开的实施例,分位值指标相比平均值等指标,对响应时间的波动更加敏感,更容易感知系统不稳定性的存在。

图8示意性示出了根据本公开实施例的将每个分布式应用发送的属于同一个接口的响应时间数据分布特征进行聚合处理并确定分位值的流程图。

如图8所示,该方法包括操作S810~S850。

在操作S810,计算接口a在时间t1~t2范围内的第p响应时间分位值。

在操作S820,筛选数据仓库中来自各个应用实例上传的响应时间数据分布特征。

在操作S830,将筛选出的所有响应时间数据分布特征通过合并算法二次聚合为一个数据分布。

在操作S840,以P分位为计算目标,用二次聚合后的数据分布通过算法推算P分位值。

在操作S850,得到接口a的P分位值。

根据本公开的实施例,本公开实施例提供的接口性能监测方法可以面向应用级别的接口性能进行监测。

根据本公开的实施例,根据属于同一个接口的性能数据分布聚合特征,确定每个接口的分位值包括:获取用户查询时输入的关于目标接口的目标值;以及根据属于同一个接口的性能数据分布聚合特征,确定与目标值对应的分位值。

根据本公开的实施例,可以支持任意分位值查询(即支持用户查询时输入的关于目标接口的目标值),相比于分位值计算技术只能查询预先计算好的固定分位值,本公开的实施例支持在线查询任意分位的分位值,便于对比不同分位值的优化效果。在不增加额外成本的情况下,允许用户查询任意分位值,在性能监控中对比不同分位值带来的效果收益。监控数据可达到0.1%左右的误差,保障监测数据可靠性。

根据本公开的实施例,无需引入额外计算集群即可完成分位值计算,节约计算资源,且实现相对容易,降低开发和维护成本。根据本公开的实施例,可以根据用户查询时指定的分位值,实现任意分位值的查询。

根据本公开的实施例,为了计算一个接口的分位值,可以以应用名app,数据分布所属的方法method(即接口)为key进行GROUP BY操作,将同一组的性能数据分布特征进行聚合。

为了实现自定义GROUP BY函数,需要选择支持UDAF(User Defined AggregateFunction,用户自定义聚合函数)的分布式数据仓库,以便可以在数据仓库中实现二次聚合算法,充分利用数据仓库的计算资源。例如Apache Doris中支持C++编写UDAF函数,Hive中支持Java编写的UDAF函数。

根据本公开的实施例,数据仓库可以包含以下部分:

前端节点:管理集群元数据,接收、解析、规划查询。

查询节点:存储具体数据,实施具体查询。

主查询节点:在查询过程中汇总各个查询节点得到的查询结果,返回最终结果。

图9示意性示出了根据本公开实施例的基于数据仓库查询分位值的流程图。

根据本公开的实施例,按照数据仓库的上述结构,根据数据仓库的具体接口,直接编写UDAF函数来计算某一个应用接口的响应时间分位值。UDAF函数通常工作在SQL语言的GROUP BY子句中,或其它聚合场景中。常见的有SUM(),COUNT()等。本公开实施例的算法实现的UDAF函数以应用的接口作为key进行分组,将组内所有耗时直方图数据进行解析,合并,估算分位值。

如图9所示,该方法包括操作S910~S940。

在操作S910,查询接口分位值。

在操作S920,按应用、接口将性能数据分布特征进行分组。

在操作S930,基于查询节点和主查询节点等,在分组内使用UDAF函数进行分位值推算。

在操作S940,得到接口的分位值。

根据本公开的实施例,以性能数据分布特征为直方图为例,使用UDAF函数实现直方图推算分位值,一般需要实现五个过程:init,update,serialize,merge,finalize。具体流程如下:

init:初始化,运行于分布式数据仓库的每个查询节点上,用来初始化查询节点本地上的聚合目标数据结构。在初始化过程中,我们在各个查询节点上创建一个空的直方图。

update:在查询节点本地依次遍历每一行,将这一行的数据聚合到目标中。本公开实施例的算法中首先通过BASE64解码直方图数据,然后进行GZIP解压,得到直方图对象,然后使用直方图的合并操作,合并到目标直方图中。

serialize:各个查询节点本地聚合完毕后,要将各自的聚合结果发送到主查询节点进行合并结果,所以需要自行实现序列化过程,保证二进制直方图数据准确无误传输到主查询节点,并能被准确解析。实践中,本算法选择了不包含指针的直方图数据结构实现,故可直接传输。若选择Java实现的UDAF函数,或包含指针的C/C++数据结构,则需要自行设计序列化格式。

merge:主查询节点接收各个查询节点发送来的聚合结果,进一步聚合成一个结果。本公开实施例的算法中各查询节点发来本地聚合后的直方图,主节点在merge操作中,将所有直方图聚合成一个直方图。

finalize:主查询节点使用最终的聚合结果,得到最终结果。

使用merge步骤聚合成的一个直方图,推算得到接口的总分位值。

图10示意性示出了根据本公开实施例的使用UDAF函数查询分位值的流程图。

如图10所示,该方法包括操作S1001~S1010。

在操作S1001,Init:获取用户指定的查询分位值P。

在操作S1002,创建空的直方图对象作为聚合目标

在操作S1003,根据查询时间范围选择符合要求的所有行数据

在操作S1004,取下一行数据

在操作S1005,update:解析当前行数据成直方图对象,合并到聚合目标。

在操作S1006,是否是最后一行。若是,执行操作S1007,若否,返回执行操作S1004。

在操作S1007,得到查询节点上的聚合结果。

在操作S1008,serialize:将聚合结果序列化成二进制格式传输到主查询节点。

在操作S1009,merge:主查询节点根据所有查询节点上传的聚合结果合并成一个直方图。

在操作S1010,finalize:将直方图进行推算,根据指定的查询分位值p,计算得到P分位值。

通过上述UDAF函数的过程,最终得到每个接口的响应时间分位值。每次进行查询时,可以指定不同的分位值,可实现每次查询任意分位值。需要说明的是,获得响应时间分位值仅仅是示意性实施例,利用本公开实施例的方法还可以获得除响应时间分位值之外的其他类型分位值,例如,数据量分位值、并发度分位值,SQL执行数分位值,缓存命中数分位值,下游服务调用数分位值,日志打印数分位值。

图11示意性示出了根据本公开另一实施例的用于分布式应用的接口性能监测方法的示意图。

如图11所示,在调用方请求调用应用实例的接口时,对接口调用进行拦截,获取接口性能数据,例如接口的响应时间间隔,响应数据量,缓存命中数等等,将拦截到的性能数据聚合进原始的性能数据分布特征中。

根据本公开的实施例,每次到达聚合时间区间后,所有的应用实例都可以将本地的性能数据分布特征上传到数据仓库,然后清空本地的性能数据分布特征。

根据本公开的实施例,可以在数据仓库端进行二次聚合,通过自行编写可以识别性能数据分布特征的数据结构的函数进行二次聚合,得到聚合后的属于同一个接口的性能数据分布聚合特征。

根据本公开的实施例,从业务应用中拦截接口调用,统计出每次接口调用的响应时间间隔。然后在业务应用实例本地进行数据分布聚合,可以将数据量大幅压缩。再由各应用实例分别上传本地聚合后的数据到数据仓库,在数据仓库端进行二次聚合,得到属于同一个接口的性能数据分布聚合特征。

图12示意性示出了根据本公开实施例的分布式应用的接口性能监测装置的框图。

如图12所示,分布式应用的接口性能监测装置1200包括:获得模块1210、更新模块1220和监测模块1230。

获得模块1210,用于在监测到调用方请求调用分布式应用的接口的情况下,监测获得接口响应调用方的请求的性能数据。

更新模块1220,用于根据接口响应调用方的请求的性能数据,更新接口的性能数据分布特征,得到更新后的接口的性能数据分布特征。

监测模块1230,用于根据更新后的接口的性能数据分布特征,对分布式应用的接口性能进行监测。

通过本公开的实施例,可以面向大规模分布式应用的接口性能监测,尤其是接口响应时间分位值的监测,统计信息可以精确到每个接口,本公开的实施例可以解决分布式系统本身特点带来的监控复杂度,对分布式系统接口性能实施有效的监控,适用线上系统,不局限于测试阶段。

根据本公开的实施例,更新模块包括:第一确定单元和更新单元。

第一确定单元,用于根据接口的接口标识,从聚合项存储数据结构中确定与接口的接口标识对应的性能数据分布特征,其中,聚合项存储数据结构中包括多个接口标识以及每个接口标识对应的性能数据分布特征。

更新单元,用于根据接口响应调用方的请求的性能数据,在聚合项存储数据结构中更新接口的性能数据分布特征。

根据本公开的实施例,使用聚合项存储数据结构,可以将集群的所有实例监测数据汇聚成应用级别进行观测,进而屏蔽分布式系统底层的离散性,可以整体直观地监测到分布式应用的接口性能指标。

根据本公开的实施例,更新模块还包括:新建单元,用于在聚合项存储数据结构中不包括接口的接口标识的情况下,在聚合项存储数据结构中新建关于接口的接口标识的聚合项,以便基于新建的聚合项在聚合项存储数据结构中更新接口的性能数据分布特征。

根据本公开的实施例,监测模块包括:第一发送单元和第一删除单元。

第一发送单元,用于在达到预设监测时长的情况下,将聚合项存储数据结构发送至数据仓库。

第一删除单元,用于删除分布式应用本端存储的聚合项存储数据结构。

根据本公开的实施例,分布式应用包括多个接口,监测模块包括:第二发送单元和第二删除单元。

第二发送单元,用于在达到预设监测时长的情况下,将每个接口当前的性能数据分布特征发送至数据仓库;以及

第二删除单元,用于删除分布式应用本端存储的所有性能数据分布特征。

根据本公开的实施例,数据仓库中存储有由分布式系统中的一个或多个分布式应用发送的性能数据分布特征,分布式应用的接口性能监测装置1200还包括:聚合模块和确定模块。

聚合模块,用于将每个分布式应用发送的属于同一个接口的性能数据分布特征进行聚合处理,得到聚合后的属于同一个接口的性能数据分布聚合特征;

确定模块,用于根据属于同一个接口的性能数据分布聚合特征,确定每个接口的分位值。

根据本公开的实施例,确定模块包括:获取单元和第二确定单元。

获取单元,用于获取用户查询时输入的关于目标接口的目标值;以及

第二确定单元,用于根据属于同一个接口的性能数据分布聚合特征,确定与目标值对应的分位值。

根据本公开的实施例,其中,获得模块包括:第一记录单元、第二记录单元和第三确定单元。

第一记录单元,用于在监测到调用方请求调用分布式应用的接口的情况下,记录接口的调用开始时间。

第二记录单元,用于记录接口的调用完成时间。

第三确定单元,用于根据调用开始时间和调用完成时间确定接口响应调用方的请求的性能数据。

根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。

根据本公开的实施例,一种电子设备,包括:至少一个处理器;以及与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够执行如上所述的分布式应用的接口性能监测方法。

根据本公开的实施例,一种存储有计算机指令的非瞬时计算机可读存储介质,其中,计算机指令用于使计算机执行如上所述的分布式应用的接口性能监测方法。

根据本公开的实施例,一种计算机程序产品,包括计算机程序,计算机程序在被处理器执行时实现如上所述的分布式应用的接口性能监测方法。

通过本公开的实施例,可以面向大规模分布式应用的接口性能监测,尤其是接口响应时间分位值的监测,统计信息可以精确到每个接口,本公开的实施例可以解决分布式系统本身特点带来的监控复杂度,对分布式系统接口性能实施有效的监控,适用线上系统,不局限于测试阶段。

图13示出了可以用来实施本公开的实施例的示例电子设备1300的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。

如图13所示,设备1300包括计算单元1301,其可以根据存储在只读存储器(ROM)1302中的计算机程序或者从存储单元1308加载到随机访问存储器(RAM)1303中的计算机程序,来执行各种适当的动作和处理。在RAM 1303中,还可存储设备1300操作所需的各种程序和数据。计算单元1301、ROM 1302以及RAM 1303通过总线1304彼此相连。输入/输出(I/O)接口1305也连接至总线1304。

设备1300中的多个部件连接至I/O接口1305,包括:输入单元1306,例如键盘、鼠标等;输出单元1307,例如各种类型的显示器、扬声器等;存储单元1308,例如磁盘、光盘等;以及通信单元1309,例如网卡、调制解调器、无线通信收发机等。通信单元1309允许设备1300通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。

计算单元1301可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1301的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元1301执行上文所描述的各个方法和处理,例如分布式应用的接口性能监测方法。例如,在一些实施例中,分布式应用的接口性能监测方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1308。在一些实施例中,计算机程序的部分或者全部可以经由ROM 1302和/或通信单元1309而被载入和/或安装到设备1300上。当计算机程序加载到RAM 1303并由计算单元1301执行时,可以执行上文描述的分布式应用的接口性能监测方法的一个或多个步骤。备选地,在其他实施例中,计算单元1301可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行分布式应用的接口性能监测方法。

本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。

用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。

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

为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。

可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。

计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。

应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。

上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

相关技术
  • 分布式应用的接口性能监测方法、装置、设备及存储介质
  • 分布式应用系统性能的监控方法、装置、存储介质及设备
技术分类

06120112533554