具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本公开中提及的“第一”、“第二”等概念仅用于对装置、模块或单元进行区分,并非用于限定这些装置、模块或单元一定为不同的装置、模块或单元,也并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
下面以具体地实施例对本公开的技术方案以及本公开的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本公开的实施例进行描述。
本公开实施例提供了一种线上链路压力测试方法,可以由测试设备集群执行,其中,该测试设备集群可以包括至少一个终端设备、或者包括至少一个服务器、或者包括至少一个服务器与至少一个终端设备。
如图1所示,该方法包括步骤S101-步骤S104。
步骤S101,对于当前执行的每一目标测试任务,按照为该目标测试任务设置的发送频率,向该目标测试任务对应的目标链路发送业务请求。
本公开实施例中,当前可能有一个或多个测试任务在同时执行,为便于描述,可以将当前正在执行的每一测试任务均定义为目标测试任务。
其中,在按照为该目标测试任务设置的发送频率,向该目标测试任务对应的目标链路发送业务请求时,测试设备集群向目标链路持续发送业务请求,持续发送的业务请求可以为相同类型的业务请求,也可以为不同类型的业务请求,在此不做限定。
本公开实施例中,可以同时执行至少一个目标测试任务,各个目标测试任务的开始执行时间可以相同、也可以不同,各个目标测试任务的执行时长可以相同、也可以不同。例如,若目标测试任务1在8:00开始执行,执行时长为2个小时,目标测试任务2在9:00开始执行,执行时长为1个小时,则在8:00-9:00期间仅有目标测试任务1正在执行,在9:00-10:00期间有目标测试任务1和目标测试任务2同时执行。
本公开实施例中,对于当前执行的每一目标测试任务,分别对应一个目标链路。目标链路可以处理其对应的目标测试任务,一个目标测试任务对应至少一个服务,各个服务各自对应的服务器集群所组成的链路,就是目标链路,也就是说,目标链路是由目标链路调用的服务所对应的服务器集群组成。
一种情况下,目标链路只调用一个服务,此时,目标链路仅包含该服务对应的服务器集群,目标链路在处理目标测试任务时,目标测试任务会由该服务对应的服务器集群来处理;另外一种情况下,目标链路调用至少两个服务,此时,目标链路包含每个服务各自对应的服务器集群,目标链路在处理目标测试任务时,目标测试任务会由每个服务对应的服务器集群来处理。
当目标链路调用至少两个服务时,目标链路的结构如图2所示,目标链路可以由一个入口服务器集群与至少一个下游服务器集群组成,如图2中,目标链路由入口服务器集群与下游服务器集群1、下游服务器集群2以及下游服务器集群3组成。其中,服务器集群(包括入口服务器集群、下游服务器集群以及后续实施例所涉及的其他服务器集群)包括至少一个服务器。
目标链路在处理目标测试任务时,对于当前执行的每一目标测试任务,可以按照为该目标测试任务设置的发送频率,向该目标测试任务对应的目标链路发送业务请求。具体地,测试设备集群向目标链路中的入口服务器集群发送业务请求,业务请求的处理可以由入口服务器集群以及至少一个下游服务器集群共同完成,例如,如图2所示,测试设备集群向目标链路中的入口服务器集群发送业务请求,业务请求的处理可以依次经入口服务器集群、下游服务器集群1、下游服务器集群2以及下游服务器集群3进行处理。
入口服务器集群或者任一个下游服务器集群可以在其对应的数据库中读写信息,如图2中,入口服务器集群可以在其对应的数据库1中读写信息、下游服务器集群2可以在其对应的数据库2中读写信息、下游服务器集群3可以在其对应的数据库3中读写信息。其中,任一数据库可以为关系型数据库,如MySQL、DB2等,也可以为基于远程字典服务(RemoteDictionary Server,Redis)的数据库。
入口服务器集群可以将业务请求的反馈信息反馈至测试设备集群,如图2中,业务请求的反馈信息可以依次经下游服务器集群3、下游服务器集群2、下游服务器集群1传输至入口服务器集群,由入口服务器集群将反馈信息反馈至测试设备集群。
步骤S102,获取从各个服务器集群中收集到的报警信息,各个服务器集群包括每一目标链路中的服务器集群。
本申请实施例中,报警信息也叫报警事件信息,也就是说,每一目标测试任务对应一个目标链路,可以从这些目标链路中的各个服务器集群中收集报警事件信息。需要说明的是,不同目标链路各自可以包括不同的服务器集群,或者,不同目标链路可以包括一个或多个相同的服务器集群。
本公开实施例中,测试设备集群可以从预定的服务器集群中获取报警信息,预定的服务器集群由至少一个服务器组成。
通常情况下,当某一个服务器集群发生如处理超时等异常时,该服务器集群会产生至少一个报警事件信息,预定的服务器集群可以从该服务器集群中收集该至少一个报警事件信息。在实际中,预定的服务器集群可以从各个链路的服务器集群中收集报警事件信息。
例如,预定的服务器集群可以从图2所示的入口服务器集群、下游服务器集群1、下游服务器集群2以及下游服务器集群3中收集报警事件信息。
需要说明的是,预定的服务器集群可以从各个链路的服务器集群中收集报警事件信息,而不限于仅从目标链路的服务器集群中收集报警事件信息。当测试设备集群从预定的服务器集群中获取到报警信息时,该报警信息为从各个链路的服务器集群中收集到的报警事件信息,其包括从每一目标链路的服务器集群中收集到的报警事件信息。
步骤S103,通过将报警信息与预先构建的异常事项集进行匹配,确定处于异常状态的目标测试任务,异常事项集包括至少一个异常事项,任一个异常事项用于确定异常事项对应的目标测试任务是否处于异常状态。
本公开实施例中,预先构建的异常事项集包括至少一类异常事项子集,每一类异常事项子集包括至少一个异常事项。
例如,预先构建的异常事项集可以包括错误日志统计类异常事项子集、服务运行类异常事项子集、接口调用类异常事项子集、远程调用类异常事项子集、服务资源类异常事项子集以及用户自定义脚本类异常事项子集,等等。
其中,服务运行类异常事项子集可以包括协程环比增长异常事项,如Go(全称:Golang)服务协程环比增长异常事项;接口调用类异常事项子集可以包括接口请求波动异常事项和接口失败异常事项;服务资源类异常事项子集可以包括中央处理器(CentralProcessing Unit,CPU)达到阈值异常事项以及内存显示程序(简称MEM)达到阈值异常事项。
本公开实施例中,可以通过将报警信息与预先构建的异常事项集进行匹配,从当前执行的目标测试任务中确定处于异常状态的目标测试任务。例如,当前执行的目标测试任务包括目标测试任务1和目标测试任务2,则可以通过将报警信息与预先构建的异常事项集进行匹配,从目标测试任务1和目标测试任务2中确定处于异常状态的目标测试任务。其中,处于异常状态的目标测试任务可以为目标测试任务1、或者目标测试任务2、或者目标测试任务1和目标测试任务2。
需要说明的是,在实际应用的过程中,通过将报警信息与预先构建的异常事项集进行匹配后,可能存在当前执行的目标测试任务均为非异常状态的目标测试任务,即不存在处于异常状态的目标测试任务。
步骤S104,减小处于异常状态的目标测试任务对应的发送频率,并基于减小后的发送频率,向处于异常状态的目标测试任务对应的目标链路发送业务请求。
本公开实施例中,对于每一个处于异常状态的目标测试任务,可以对该处于异常状态的目标测试任务对应的发送频率进行调整,并按照调整后的发送频率,向该处于异常状态的目标测试任务对应的目标链路发送业务请求。
例如,若目标测试任务1和目标测试任务2均为异常状态的目标测试任务,则可以对目标测试任务1的发送频率进行调整,得到发送频率1,并按照发送频率1向目标测试任务1对应的目标链路发送业务请求;对目标测试任务2的发送频率进行调整,得到发送频率2,并按照发送频率2向目标测试任务2对应的目标链路发送业务请求。
通常情况下,对处于异常状态的目标测试任务对应的发送频率进行调整时,可以降低处于异常状态的目标测试任务对应的发送频率,或者将处于异常状态的目标测试任务对应的发送频率调整为0,即停止处于异常状态的目标测试任务的执行。
本公开实施例提供了一种线上链路压力测试方法,与现有技术相比,本公开实施例首先对于当前执行的每一目标测试任务,按照为该目标测试任务设置的发送频率,向该目标测试任务对应的目标链路发送业务请求,然后获取从每一目标链路中的各个服务器集群中收集到的报警信息,由于当服务器集群发生处理超时等异常事件时会产生报警事件信息,因此,通过将报警信息与预先构建的异常事项集进行匹配,确定处于异常状态的目标测试任务,减小处于异常状态的目标测试任务对应的发送频率,并基于减小后的发送频率,向处于异常状态的目标测试任务对应的目标链路发送业务请求,其中,异常事项集包括至少一个异常事项,任一个异常事项用于确定异常事项对应的目标测试任务是否处于异常状态,这样可以防止因频繁发送业务请求而影响目标链路的服务器集群的处理性能,从而防止了目标链路的服务器集群发生处理超时甚至崩溃的情况,进而降低了对用户终端的业务请求的处理造成影响。
本公开实施例的另一种可能实现方式,发送频率可以为目标服务器集群的每秒查询率(Queries Per Second,QPS),目标服务器集群为该目标测试任务对应的目标链路中用于接收业务请求的服务器集群。
例如,如图2所示,目标链路中用于接收业务请求的服务器集群为入口服务器集群,因此,目标服务器集群可以为入口服务器集群。
本公开实施例中,目标测试任务的发送频率为可以衡量测试设备集群向该目标测试任务对应的目标链路发送业务请求的数量的任一参数。即,发送频率可以衡量测试设备集群每秒发送业务请求的数量。其中,目标服务器集群的QPS为目标服务器集群在规定时间内所处理流量多少的衡量标准,可以用于衡量测试设备集群每秒发送业务请求的数量。
本公开实施例的另一种可能实现方式,步骤S102,即获取从各个服务器集群中收集到的报警信息,具体可以包括方式A1-方式A2中的至少一项。
方式A1,按照预设时长周期性地获取从各个服务器集群中收集到的报警信息。
方式A2,响应于用户触发的获取请求,获取从各个服务器集群中收集到的报警信息。
方式A3,当监控到已发送预设数量的业务请求时,获取从各个服务器集群中收集到的报警信息。
上述步骤相当于步骤S102,即获取从各个服务器集群中收集到的报警信息,具体可以包括步骤S1021。
步骤S1021,采用预设方式获取从各个服务器集群中收集到的报警信息,预设方式包括第一获取方式、第二获取方式和第三获取方式中的至少一个。
其中,第一获取方式为每隔预设时长进行信息获取的方式;第二获取方式为在检测到用户触发的获取请求后进行信息获取的方式;第三获取方式为每发送预设数量的业务请求后进行信息获取的方式。
针对第一获取方式,测试设备集群可以每隔预设时长,从预定的服务器集群中获取报警信息。具体地,测试设备集群可以按照每隔预设时长的方式,轮询预定的服务器集群,预定的服务器集群向测试设备集群发送报警信息,以使测试设备集群获取报警信息。
针对第二获取方式,测试设备集群可以在检测到用户触发的获取请求后,从预定的服务器集群中获取报警信息。
针对第三获取方式,测试设备集群可以在每发送预设数量的业务请求后,从预定的服务器集群中获取报警信息。具体地,对于当前执行的每一目标测试任务,测试设备集群可以在每向该目标测试任务对应的目标链路发送预设数量的业务请求后,从预定的服务器集群中获取报警信息。
例如,对于当前执行的目标测试任务1和目标测试任务2,测试设备集群可以在每向目标测试任务1对应的目标链路发送十万个业务请求后,从预定的服务器集群中获取报警信息;测试设备集群可以在每向目标测试任务2对应的目标链路发送十万个业务请求后,从预定的服务器集群中获取报警信息。
或者,针对第三获取方式,对于当前执行的目标测试任务,电子设备可以在每发送预设数量的业务请求后,从预定的服务器集群中获取报警信息,此时,预设数量为当前执行的每一目标测试任务所对应的发送的业务请求的数量之和。
例如,对于当前执行的目标测试任务1和目标测试任务2,测试设备集群向目标测试任务1对应的目标链路发送的业务请求的数量记为数量1,测试设备集群向目标测试任务2对应的目标链路发送的业务请求的数量记为数量2。每当数量1和数量2之和达到十万个后,测试设备集群从预定的服务器集群中获取报警信息。
本公开实施例的另一种可能实现方式,步骤S103,即通过将报警信息与预先构建的异常事项集进行匹配,确定处于异常状态的目标测试任务,具体可以包括步骤S1031和步骤S1032。
步骤S1031,对于报警信息中的每一个报警条目,将该报警条目与预先构建的异常事项集中的每一异常事项进行匹配。
本公开实施例中,报警信息包括至少一个报警条目,预先构建的异常事项集中包括至少一个异常事项,可以将每一个报警条目与每一个异常事项进行匹配。
本公开实施例中,报警条目可以为错误日志类报警条目、服务运行类报警条目(包括协程环比增长报警条目)、接口调用类报警条目(包括接口请求波动报警条目和接口失败报警条目)、远程调用异常类报警条目、服务资源类报警条目(包括CPU达到阈值报警条目以及MEM达到阈值报警条目)以及用户自定义脚本类报警条目等。
需要说明的是,事项子集中的任一个异常事项可以为错误日志统计类异常事项、服务运行类异常事项(包括协程环比增长异常事项)、接口调用类异常事项(包括接口请求波动异常事项和接口失败异常事项)、远程调用类异常事项、服务资源类异常事项(包括CPU达到阈值异常事项以及MEM达到阈值异常事项)以及用户自定义脚本类异常事项等。
本公开实施例中,可以将报警条目与事项子集中的每一个异常事项进行匹配,确定出与该报警条目的内容相匹配的异常事项。
例如,若报警条目为错误日志类报警条目,事项子集中包括两个异常事项,分别为错误日志统计类异常事项和CPU达到阈值异常事项,则将报警条目与两个异常事项分别进行匹配,可以确定错误日志统计类异常事项与该报警条目相匹配。
具体地,步骤S1031,即将该报警条目与预先构建的异常事项集中的每一异常事项进行匹配,具体可以包括步骤S10311以及步骤S10312。
步骤S10311,确定该报警条目所携带的第一事项标识,第一事项标识为产生该报警条目的服务器集群所满足的异常事项对应的事项标识。
本公开实施例中,异常事项集可以包括各个目标链路中的每一服务器集群对应的事项子集,且事项子集中的每一异常事项存在事项标识,每一服务器集群对应的事项子集为从该服务器集群对应的预设事项集选取的全部或者部分异常事项。其中,事项标识可以由数字、字母、符号以及文字中的至少一项构成。
例如,目标链路A包括服务器集群A1、A2,服务器集群A1对应预设事项集a1,假设预设事项集a1中包括100条异常事项,从预设事项集a1中抽取20条异常事项作为服务器集群A1对应的事项子集a1’,则事项子集a1’中包括20条异常事项;服务器集群A2对应预设事项集a2,假设预设事项集a2中包括10条异常事项,将预设事项集a2作为服务器集群A2对应的事项子集a2’,则事项子集a2’中包括10条异常事项。可以由事项子集a1’和事项子集a2’构成异常事项集。
需要说明的是,预定的服务器集群可以从各个链路的服务器集群中收集报警事件信息,其中,各个链路包括但不限于目标链路,即每一个服务器集群可以为目标链路上的服务器集群,也可以为非目标链路上的服务器集群。对于每一个服务器集群,该服务器集群对应一个预设事项集,当该服务器集群满足对应预设事项集中的任一个异常事项时,该第一服务器集群产生报警条目,报警条目中携带该任一个异常事项的事项标识,该任一个异常事项的事项标识作为第一事项标识。
例如,链路A中的服务器集群A1对应预设事项集a1,预设事项集a1中包括异常事项a1-1和异常事项a1-2,当服务器集群A1满足异常事项a1-1时,服务器集群A1产生报警条目,若异常事项a1-1的事项标识为476838578,则服务器集群A1产生的报警条目中携带476838578。
需要说明的是,每一个报警条目可能非目标链路的服务器集群产生的,也可能是目标链路的服务器集群产生的,当报警条目是目标链路的服务器集群产生的时,该报警条目携带的事项标识可能为异常事项集中的一个异常事项的事项标识,也可能非异常事项集中的任一个异常事项的事项标识,因此,需要将每一个报警条目与预先构建的异常事项集中的每一异常事项进行匹配。
步骤S10312,将第一事项标识与预先构建的异常事项集中的每一个异常事项的事项标识进行匹配。
本公开实施例中,异常事项集中的每一异常事项存在事项标识,可以将第一事项标识与每一异常事项的事项标识进行匹配,若第一事项标识与某一个异常事项的事项标识一致,则该报警条目与某一个异常事项匹配成功,若第一事项标识与各个异常事项的事项标识均不一致,则该报警条目未与异常事项集匹配成功。
例如,异常事项集包括异常事项a1-1和a1-3,将第一事项标识与异常事项a1-1的事项标识进行匹配,以及第一事项标识与异常事项a1-3的事项标识进行匹配。若第一事项标识与异常事项a1-3的事项标识一致,则报警条目与异常事项a1-3匹配成功;若第一事项标识与异常事项a1-1的事项标识、异常事项a1-3的事项标识均不一致,则报警条目未与异常事项集匹配成功。
步骤S1032,根据匹配到的至少一个异常事项,确定处于异常状态的至少一个目标测试任务。
本公开实施例中,将每一个报警条目与每一个异常事项进行匹配,当匹配到的异常事项存在至少一个时,可以根据匹配到的该至少一个异常事项,确定处于异常状态的至少一个目标测试任务。
具体地,步骤S1032,即根据匹配到的至少一个异常事项,确定处于异常状态的至少一个目标测试任务,可以包括步骤S10321、步骤S10322、步骤S10323以及步骤S10324。
步骤S10321,将匹配到的每一个异常事项作为第一异常事项。
本公开实施例中,将报警条目与对应事项子集中的每一个异常事项进行匹配,确定与该报警条目的内容相匹配的异常事项,作为匹配到的异常事项。
需要说明的是,报警条目存在至少一条,每一条报警条目按照步骤S1031(或者步骤S10311以及步骤S10312)的方式进行匹配,匹配到的异常事项可能存在至少一条。对于本公开实施例,可以将匹配到的每一个异常事项作为第一异常事项。
步骤S10322,对于每一第一异常事项,确定该第一异常事项对应的服务器集群所属的至少一个目标链路,并将确定的每一目标链路对应的目标测试任务作为第一测试任务。
本公开实施例中,当前执行的目标链路存在至少一个,每一个目标链路包括至少两个服务器集群,每一个服务器集群对应的事项子集中包括至少一个异常事项。同时,任两个目标链路可能包括同一个服务器集群,因此,每一个异常事项对应的服务器集群存在其所属的至少一个目标链路,由于目标链路与目标测试任务存在一一对应关系,因此,每一个异常事项对应至少一个目标测试任务。
为了快速定位每一个异常事项与其对应的至少一个目标测试任务之间的关系,对于每一个异常事项,可以在第一存储空间中存储该异常事项与其对应服务器集群所属的目标链路所对应的目标测试任务之间的对应关系,即存储该异常事项及其对应的每一目标测试任务之间的对应关系。
具体地,第一存储空间可以为基于Redis的存储空间,可以采用有序集合(SortSet)存储。其中,将每一个异常事项的事项标识作为键(Key)进行存储,对于每一个异常事项,将其对应的每一目标测试任务的任务标识作为值(Value)进行存储。利用异常事项的事项标识与其对应的目标测试任务的任务标识所组成的键值对,可以根据一个异常事项的事项标识,快速确定该异常事项对应的目标测试任务,节省时间资源。
本公开实施例中,对于每一第一异常事项,可以根据该第一异常事项的事项标识,在第一存储空间中快速确定该第一异常事项对应的各个目标测试任务的任务标识,根据每一个目标测试任务的任务标识确定各自对应的目标链路,即通过第一存储空间,可以快速的确定该第一异常事项对应的服务器集群所属的至少一个目标链路。
例如,若第一异常事项的事项标识为RuleID3,在第一存储空间已存储有RuleID3与任务标识ID1、IDn之间的对应关系,则可以通过第一存储空间,快速确定第一异常事项对应的目标链路有两个,分别为任务标识ID1的目标测试任务所对应的目标链路,以及任务标识IDn的目标测试任务所对应的目标链路。
步骤S10323,确定第一测试任务对第一异常事项的命中次数。
本公开实施例中,当前执行的目标测试任务为至少一个,每一个目标测试任务对应一个目标链路,每一个目标链路包括至少两个服务器集群,每一个服务器集群包括至少一个服务器,每一个服务器集群对应的事项子集中包括至少一个异常事项,因此,每一个目标测试任务存在其对应的至少两个异常事项。
为了快速定位每一个目标测试任务与其对应的至少一个异常事项之间的关系,对于每一个目标测试任务,可以在第二存储空间中存储该目标测试任务与其对应的目标链路中的每一服务器集群对应的事项子集中每一异常事项之间的对应关系,即存储该目标测试任务及其对应的每一异常事项之间的对应关系。其中,在存储该目标测试任务及其对应的每一异常事项之间的对应关系时,可以存储每一异常事项对应的命中次数。
具体地,第二存储空间可以为基于Redis的存储空间,可以采用有序集合(SortSet)存储。如图3所示,将每一个目标测试任务的任务标识作为键(Key)进行存储,将该目标测试任务对应的异常事项的、事项标识(图3中用RuleID表示)及命中次数(图3中用Score表示)作为值(Value)进行存储,每一个目标测试任务开始时,该目标测试任务对应的异常事项的命中次数初始化为0,利用目标测试任务的任务标识与其对应的异常事项的、事项标识和命中次数组成键值对。
如图3中,“任务标识:ID1”分别与“RuleID:RuleID1,Score:0”、“RuleID:RuleID2,Score:0”、“RuleID:RuleID3,Score:0”至“RuleID:RuleIDN,Score:0”组成键值对;“任务标识:IDn”分别与“RuleID:RuleID5,Score:0”、“RuleID:RuleID6,Score:0”、“RuleID:RuleID3,Score:0”至“RuleID:RuleIDM,Score:0”组成键值对,其中,RuleID表征事项标识,Score表征命中次数。
本公开实施例中,基于目标测试任务的任务标识与其对应的异常事项的、事项标识和命中次数所组成的键值对,可以根据一个目标测试任务的任务标识,快速确定该目标测试任务对应的每一个异常事项和每一个异常事项的命中次数,节省时间资源。即,可以根据第一测试任务的任务标识,通过第二存储空间,快速确定第一测试任务对第一异常事项的命中次数。
需要说明的是,步骤S10321,即将匹配到的每一个异常事项作为第一异常事项之后,在第二存储空间中更新每一个第一测试任务中该第一异常事项的命中次数,将更新后的命中次数作为该第一测试任务对该第一异常事项的命中次数。其中,每一个第一测试任务的开始执行时间可能不同,因此,每一个第一测试任务对该第一异常事项的命中次数也可能不同。
例如,若匹配到的异常事项为图3中事项标识为RuleID3的第一异常事项,则在第二存储空间中更新第一测试任务的任务标识为ID1中、事项标识为RuleID3的第一异常事项的Score,例如由104更新为105,则任务标识为ID1的第一测试任务对事项标识为RuleID3的命中次数为105;在第二存储空间中更新第一测试任务的任务标识为IDn中、事项标识为RuleID3的第一异常事项的Score,例如由50更新为51,则任务标识为IDn的第一测试任务对事项标识为RuleID3的命中次数为51。
步骤S10324,若命中次数大于预设次数阈值,则确定第一测试任务处于异常状态。
本公开实施例中,每一个目标测试任务中的各个异常事项均存在其对应的预设次数阈值。对于每一个第一测试任务,若该第一测试任务对某一个第一异常事项的命中次数大于该第一测试任务中的该第一异常事项对应的预设次数阈值,则确定该第一测试任务处于异常状态。
例如,第一测试任务的任务标识为ID1中、事项标识为RuleID3的第一异常事项对应的预设次数阈值为100,而任务标识为ID1的第一测试任务对事项标识为RuleID3的命中次数为105,则任务标识为ID1的第一测试任务处于异常状态;第一测试任务的任务标识为IDn中、事项标识为RuleID3的第一异常事项对应的预设次数阈值为80,任务标识为IDn的第一测试任务对事项标识为RuleID3的命中次数为51,则任务标识为IDn的第一测试任务处于非异常状态。
本公开实施例的另一种可能实现方式,步骤S104,即减小处于异常状态的目标测试任务对应的发送频率,具体可以包括步骤S1041以及步骤S1042。
步骤S1041,根据报警信息与预先构建的异常事项集的匹配结果,确定处于异常状态的目标测试任务对应的发送频率的减小量。
本公开实施例中,对于每一个目标测试任务,可以在第三存储空间中存储该目标测试任务与其对应的目标链路中每一服务器集群对应的事项子集中每一异常事项的调整方式之间的对应关系。即存储目标测试任务及其对应的每一异常事项的调整方式之间的对应关系。
具体地,第三存储空间可以为基于Redis的存储空间,可以采用哈希集(Hash Set)存储。将每一个目标测试任务的任务标识作为键(Key)进行存储,将该目标测试任务对应的异常事项的、事项标识以及调整方式作为值(Value)进行存储,利用目标测试任务的任务标识与其对应的异常事项的、事项标识以及调整方式组成键值对。
在根据报警信息与预先构建的异常事项集的匹配结果,确定处于异常状态的目标测试任务对应的发送频率的调整方式时,对于每一个第一测试任务,若该第一测试任务对某一个第一异常事项的命中次数大于该第一测试任务中的该第一异常事项对应的预设次数阈值,则根据目标测试任务的任务标识与其对应的异常事项的、事项标识以及调整方式组成键值对,在第三存储空间中确定该第一测试任务中的该第一异常事项的调整方式。
例如,若第一测试任务的任务标识为ID1中、事项标识为RuleID3的第一异常事项对应的预设次数阈值为100,而任务标识为ID1的第一测试任务对事项标识为RuleID3的命中次数为105,则根据任务标识ID1与事项标识RuleID3、调整方式组成的键值对,在第三存储空间中可以快速确定调整方式,节约时间资源。
步骤S1042,根据减小量,减小处于异常状态的目标测试任务对应的发送频率。
需要说明的是,在步骤S1041中,对于每一个第一测试任务,可能满足条件的第一异常事项存在至少一个,该条件为:该第一测试任务对某一个第一异常事项的命中次数大于该第一测试任务中的该第一异常事项对应的预设次数阈值。因此,在步骤S1041中,对于每一个处于异常状态的目标测试任务,其对应的调整方式可能有至少一个。
本公开实施例中,可以按照每一个调整方式,对处于异常状态的目标测试任务对应的发送频率分别进行调整;也可以从至少一个调整方式中选择目标调整方式,按照目标调整方式,对处于异常状态的目标测试任务对应的发送频率进行调整。
上述从方法步骤的角度具体阐述了线上链路压力测试方法,下面从虚拟模块的角度介绍线上链路压力测试装置,具体如下所示:
本公开实施例提供了一种线上链路压力测试装置,如图4所示,该线上链路压力测试装置40可以包括:发送模块401、获取模块402、匹配模块403以及减小发送模块404,其中,
发送模块401,用于对于当前执行的每一目标测试任务,按照为该目标测试任务设置的发送频率,向该目标测试任务对应的目标链路发送业务请求。
获取模块402,用于获取从各个服务器集群中收集到的报警信息,各个服务器集群包括每一目标链路中的服务器集群。
匹配模块403,用于通过将报警信息与预先构建的异常事项集进行匹配,确定处于异常状态的目标测试任务,异常事项集包括至少一个异常事项,任一个异常事项用于确定异常事项对应的目标测试任务是否处于异常状态。
减小发送模块404,用于减小处于异常状态的目标测试任务对应的发送频率,并基于减小后的发送频率,向处于异常状态的目标测试任务对应的目标链路发送业务请求。
本公开实施例的另一种可能实现方式,获取模块402具体用于以下至少一项:
按照预设时长周期性地获取从各个服务器集群中收集到的报警信息;
响应于用户触发的获取请求,获取从各个服务器集群中收集到的报警信息;
当监控到已发送预设数量的业务请求时,获取从各个服务器集群中收集到的报警信息。
本公开实施例的另一种可能实现方式,匹配模块403具体用于:
对于报警信息中的每一个报警条目,将该报警条目与预先构建的异常事项集中的每一异常事项进行匹配;并根据匹配到的至少一个异常事项,确定处于异常状态的至少一个目标测试任务。
本公开实施例的另一种可能实现方式,匹配模块403在将该报警条目与预先构建的异常事项集中的每一异常事项进行匹配时,具体用于:
确定该报警条目所携带的第一事项标识,第一事项标识为产生该报警条目的服务器集群所满足的异常事项对应的事项标识;
将第一事项标识与预先构建的异常事项集中的每一个异常事项的事项标识进行匹配。
本公开实施例的另一种可能实现方式,匹配模块403在根据匹配到的至少一个异常事项,确定处于异常状态的至少一个目标测试任务时,具体用于:
将匹配到的每一个异常事项作为第一异常事项;对于每一第一异常事项,确定该第一异常事项对应的服务器集群所属的至少一个目标链路,并将确定的每一目标链路对应的目标测试任务作为第一测试任务;确定第一测试任务对第一异常事项的命中次数;若命中次数大于预设次数阈值,则确定第一测试任务处于异常状态。
本公开实施例的另一种可能实现方式,减小发送模块404在减小处于异常状态的目标测试任务对应的发送频率时,具体用于:
根据报警信息与预先构建的异常事项集的匹配结果,确定处于异常状态的目标测试任务对应的发送频率的减小量;根据减小量,减小处于异常状态的目标测试任务对应的发送频率。
本公开实施例的另一种可能实现方式,发送频率为目标服务器集群的每秒查询率QPS,目标服务器集群为该目标测试任务对应的目标链路中用于接收业务请求的服务器集群。
本实施例的线上链路压力测试装置40可执行本公开方法实施例提供的一种线上链路压力测试方法,其实现原理相类似,此处不再赘述。
本公开实施例提供了一种线上链路压力测试装置,与现有技术相比,本公开实施例首先对于当前执行的每一目标测试任务,按照为该目标测试任务设置的发送频率,向该目标测试任务对应的目标链路发送业务请求,然后获取从每一目标链路中的各个服务器集群中收集到的报警信息,由于当服务器集群发生处理超时等异常事件时会产生报警事件信息,因此,通过将报警信息与预先构建的异常事项集进行匹配,确定处于异常状态的目标测试任务,减小处于异常状态的目标测试任务对应的发送频率,并基于减小后的发送频率,向处于异常状态的目标测试任务对应的目标链路发送业务请求,其中,异常事项集包括至少一个异常事项,任一个异常事项用于确定异常事项对应的目标测试任务是否处于异常状态,这样可以防止因频繁发送业务请求而影响目标链路的服务器集群的处理性能,从而防止了目标链路的服务器集群发生处理超时甚至崩溃的情况,进而降低了对用户终端的业务请求的处理造成影响。
上述从虚拟模块的角度介绍本公开的线上链路压力测试装置,下面从实体装置的角度介绍本公开的电子设备。
本公开实施例提供了一种电子设备,其包括:
一个或多个处理器;
存储器;
一个或多个应用程序,其中一个或多个应用程序被存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序配置用于:执行根据方法实施例所示的线上链路压力测试方法。
下面参考图5,其示出了适于用来实现本公开实施例的电子设备500的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图5示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
电子设备包括:存储器以及处理器,其中,这里的处理器可以称为下文所述的处理装置501,存储器可以包括下文中的只读存储器(ROM)502、随机访问存储器(RAM)503以及存储装置508中的至少一项,具体如下所示:
如图5所示,电子设备500可以包括处理装置(例如中央处理器、图形处理器等)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储装置508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有电子设备500操作所需的各种程序和数据。处理装置501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
通常,以下装置可以连接至I/O接口505:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置506;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置507;包括例如磁带、硬盘等的存储装置508;以及通信装置509。通信装置509可以允许电子设备500与其他设备进行无线或有线通信以交换数据。虽然图5示出了具有各种装置的电子设备500,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置509从网络上被下载和安装,或者从存储装置508被安装,或者从ROM 502被安装。在该计算机程序被处理装置501执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:对于当前执行的每一目标测试任务,按照为该目标测试任务设置的发送频率,向该目标测试任务对应的目标链路发送业务请求;获取从每一目标链路中的各个服务器集群中收集到的报警信息;通过将报警信息与预先构建的异常事项集进行匹配,确定处于异常状态的目标测试任务,异常事项集包括至少一个异常事项,任一个异常事项用于确定异常事项对应的目标测试任务是否处于异常状态;减小处于异常状态的目标测试任务对应的发送频率,并基于减小后的发送频率,向处于异常状态的目标测试任务对应的目标链路发送业务请求。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的模块或单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块或单元的名称在某种情况下并不构成对该单元本身的限定,例如,获取模块还可以被描述为“获取从每一目标链路中的各个服务器集群中收集到的报警信息的模块”。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
本公开实施例提供了一种电子设备,本公开实施例中的电子设备包括:存储器和处理器;至少一个程序,存储于所述存储器中,用于被所述处理器执行时,与现有技术相比可实现:首先对于当前执行的每一目标测试任务,按照为该目标测试任务设置的发送频率,向该目标测试任务对应的目标链路发送业务请求,然后获取从每一目标链路中的各个服务器集群中收集到的报警信息,由于当服务器集群发生处理超时等异常事件时会产生报警事件信息,因此,通过将报警信息与预先构建的异常事项集进行匹配,确定处于异常状态的目标测试任务,减小处于异常状态的目标测试任务对应的发送频率,并基于减小后的发送频率,向处于异常状态的目标测试任务对应的目标链路发送业务请求,其中,异常事项集包括至少一个异常事项,任一个异常事项用于确定异常事项对应的目标测试任务是否处于异常状态,这样可以防止因频繁发送业务请求而影响目标链路的服务器集群的处理性能,从而防止了目标链路的服务器集群发生处理超时甚至崩溃的情况,进而降低了对用户终端的业务请求的处理造成影响。
上述从实体装置的角度介绍本公开的电子设备,下面从介质的角度介绍本公开的计算机可读介质。
本公开实施例提供了一种计算机可读介质,该计算机可读介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。与现有技术相比,首先对于当前执行的每一目标测试任务,按照为该目标测试任务设置的发送频率,向该目标测试任务对应的目标链路发送业务请求,然后获取从每一目标链路中的各个服务器集群中收集到的报警信息,由于当服务器集群发生处理超时等异常事件时会产生报警事件信息,因此,通过将报警信息与预先构建的异常事项集进行匹配,确定处于异常状态的目标测试任务,减小处于异常状态的目标测试任务对应的发送频率,并基于减小后的发送频率,向处于异常状态的目标测试任务对应的目标链路发送业务请求,其中,异常事项集包括至少一个异常事项,任一个异常事项用于确定异常事项对应的目标测试任务是否处于异常状态,这样可以防止因频繁发送业务请求而影响目标链路的服务器集群的处理性能,从而防止了目标链路的服务器集群发生处理超时甚至崩溃的情况,进而降低了对用户终端的业务请求的处理造成影响。
根据本公开的一个或多个实施例,提供了一种线上链路压力测试方法,包括:
对于当前执行的每一目标测试任务,按照为该目标测试任务设置的发送频率,向该目标测试任务对应的目标链路发送业务请求;
获取从各个服务器集群中收集到的报警信息,所述各个服务器集群包括每一目标链路中的服务器集群;
通过将所述报警信息与预先构建的异常事项集进行匹配,确定处于异常状态的目标测试任务,所述异常事项集包括至少一个异常事项,任一个异常事项用于确定所述异常事项对应的目标测试任务是否处于异常状态;
减小所述处于异常状态的目标测试任务对应的发送频率,并基于减小后的发送频率,向所述处于异常状态的目标测试任务对应的目标链路发送业务请求。
根据本公开的一个或多个实施例,所述获取从各个服务器集群中收集到的报警信息,包括以下至少一项:
按照预设时长周期性地获取从各个服务器集群中收集到的报警信息;
响应于用户触发的获取请求,获取从各个服务器集群中收集到的报警信息;
当监控到已发送预设数量的业务请求时,获取从各个服务器集群中收集到的报警信息。
根据本公开的一个或多个实施例,所述通过将所述报警信息与预先构建的异常事项集进行匹配,确定处于异常状态的目标测试任务,包括:
对于所述报警信息中的每一个报警条目,将该报警条目与预先构建的异常事项集中的每一异常事项进行匹配;
根据匹配到的至少一个异常事项,确定处于异常状态的至少一个目标测试任务。
根据本公开的一个或多个实施例,所述将该报警条目与预先构建的异常事项集中的每一异常事项进行匹配,包括:
确定该报警条目所携带的第一事项标识,所述第一事项标识为产生该报警条目的服务器集群所满足的异常事项对应的事项标识;
将所述第一事项标识与预先构建的异常事项集中的每一个异常事项的事项标识进行匹配。
根据本公开的一个或多个实施例,所述根据匹配到的至少一个异常事项,确定处于异常状态的至少一个目标测试任务,包括:
将匹配到的每一个异常事项作为第一异常事项;
对于每一第一异常事项,确定该第一异常事项对应的服务器集群所属的至少一个目标链路,并将确定的每一目标链路对应的目标测试任务作为第一测试任务;
确定所述第一测试任务对所述第一异常事项的命中次数;
若所述命中次数大于预设次数阈值,则确定所述第一测试任务处于异常状态。
根据本公开的一个或多个实施例,所述减小所述处于异常状态的目标测试任务对应的发送频率,包括:
根据所述报警信息与预先构建的异常事项集的匹配结果,确定所述处于异常状态的目标测试任务对应的发送频率的减小量;
根据所述减小量,减小所述处于异常状态的目标测试任务对应的发送频率。
根据本公开的一个或多个实施例,提供了一种线上链路压力测试装置,包括:
发送模块,用于对于当前执行的每一目标测试任务,按照为该目标测试任务设置的发送频率,向该目标测试任务对应的目标链路发送业务请求;
获取模块,用于获取从各个服务器集群中收集到的报警信息,所述各个服务器集群包括每一目标链路中的服务器集群;
匹配模块,用于通过将所述报警信息与预先构建的异常事项集进行匹配,确定处于异常状态的目标测试任务,所述异常事项集包括至少一个异常事项,任一个异常事项用于确定所述异常事项对应的目标测试任务是否处于异常状态;
减小发送模块,用于减小所述处于异常状态的目标测试任务对应的发送频率,并基于减小后的发送频率,向所述处于异常状态的目标测试任务对应的目标链路发送业务请求。
根据本公开的一个或多个实施例,所述获取模块具体用于以下至少一项:
按照预设时长周期性地获取从各个服务器集群中收集到的报警信息;
响应于用户触发的获取请求,获取从各个服务器集群中收集到的报警信息;
当监控到已发送预设数量的业务请求时,获取从各个服务器集群中收集到的报警信息。
根据本公开的一个或多个实施例,所述匹配模块具体用于:
对于所述报警信息中的每一个报警条目,将该报警条目与预先构建的异常事项集中的每一异常事项进行匹配;
根据匹配到的至少一个异常事项,确定处于异常状态的至少一个目标测试任务。
根据本公开的一个或多个实施例,所述匹配模块在将该报警条目与预先构建的异常事项集中的每一异常事项进行匹配时,具体用于:
确定该报警条目所携带的第一事项标识,所述第一事项标识为产生该报警条目的服务器集群所满足的异常事项对应的事项标识;
将所述第一事项标识与预先构建的异常事项集中的每一个异常事项的事项标识进行匹配。
根据本公开的一个或多个实施例,所述匹配模块在根据匹配到的至少一个异常事项,确定处于异常状态的至少一个目标测试任务时,具体用于:
将匹配到的每一个异常事项作为第一异常事项;
对于每一第一异常事项,确定该第一异常事项对应的服务器集群所属的至少一个目标链路,并将确定的每一目标链路对应的目标测试任务作为第一测试任务;
确定所述第一测试任务对所述第一异常事项的命中次数;
若所述命中次数大于预设次数阈值,则确定所述第一测试任务处于异常状态。
根据本公开的一个或多个实施例,所述减小发送模块在减小所述处于异常状态的目标测试任务对应的发送频率时,具体用于:
根据所述报警信息与预先构建的异常事项集的匹配结果,确定所述处于异常状态的目标测试任务对应的发送频率的减小量;
根据所述减小量,减小所述处于异常状态的目标测试任务对应的发送频率。
根据本公开的一个或多个实施例,提供了一种电子设备,其包括:
一个或多个处理器;存储器;
一个或多个应用程序,其中所述一个或多个应用程序被存储在所述存储器中并被配置为由所述一个或多个处理器执行,所述一个或多个程序配置用于:执行根据方法实施例所示的线上链路压力测试方法。
根据本公开的一个或多个实施例,提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现方法实施例所示的线上链路压力测试方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。