具体实施方式
出于很多原因,包括SLA和SLO的存在,远程计算服务提供商可能对维持在远离企业的计算机***上为企业托管的计算机应用的高等级的性能有强烈的兴趣。这样,在应用被托管在由服务提供商操作的计算机***上时,服务提供商可能期望准确地识别应用的性能问题的来源。
然而,可能难以确认某些应用性能问题的来源。例如,应用可能依赖于与应用和服务提供商分离的计算机***而操作的外部服务。在此类示例中,应用可以经由由例如与外部服务相关联的应用程序接口(API)等定义的函数调用来从外部服务获取数据。示例外部服务可以包括外部应用,例如数据馈送(如丰富站点摘要(RSS)源等)、电子邮件***、代表性状态传输(REST)网络服务、基于网络的地图应用等。
服务提供商托管的应用中的性能问题可能经常由被托管的应用所依赖的外部服务中发生的故障引起。这种外部服务故障可能级联成被托管的应用的多个不期望行为,使得这种外部服务故障难以识别。此外,由于被托管的应用所依赖的各种外部服务可能由与服务提供商分离的实体(例如,公司)控制,因而服务提供商可能不能在外部服务中引导故障,以在外部服务的故障的条件下***地测试被托管的应用。
为了解决这些问题,本文描述的示例可以在应用的测试期间,指示外部服务虚拟化***将外部服务的故障模拟为外部服务的模拟的一部分。示例可以进一步生成表示应用对外部服务的故障的模拟的响应的测试应用指纹,并且将测试应用指纹与存储测试应用指纹的储存库中的模拟的外部服务和模拟的故障相关联。以这种方式,在应用的测试期间,本文描述的示例可以存储可以被用于将发生故障的外部服务识别为在应用的非测试执行期间检测到的性能问题的来源的信息。
例如,在测试期间生成测试应用指纹并且将测试应用指纹与外部服务和故障相关联之后,本文描述的示例可以在非生产执行期间评估应用的性能。响应于在执行应用的非测试执行期间检测到问题,本文描述的示例可以生成表示应用的状态的生产应用指纹。示例可以进一步比较测试应用指纹和生产应用指纹,并且可以基于比较的结果,将与测试应用指纹相关联的外部服务和故障识别为检测到的问题的来源。例如,响应于在多个指纹中,确定生产应用指纹与测试应用指纹最相似并且生产应用指纹满足与测试应用指纹有关的相似性阈值,与测试应用指纹相关联的外部服务和故障可以被识别为检测到的问题的来源。
此外,通过利用虚拟化***来将外部服务的故障模拟为外部服务总体模拟的一部分,本文所述的示例可以在测试期间,在没有实际外部服务控制的情况下,在外部服务发生故障的条件下,***地测试应用。以这种方式,本文描述的示例可以获得应用在非测试(例如生产)环境下执行时对识别实际的外部服务故障有用的信息。
现在参照附图,图1是用于生成表示应用对外部服务的故障的模拟的响应的测试应用指纹的示例计算设备100的框图。如本文使用的,“计算设备”可以是台式计算机,笔记本电脑,工作站,平板电脑,移动电话,智能设备,服务器,刀片式机箱或任何其它处理装置或设备。在图1的示例中,计算设备100包括处理资源110和编码有指令121-123的机器可读存储介质120。在一些示例中,存储介质120可以包括另外的指令。在一些示例中,指令121-123和本文关于存储介质120描述的任何其它指令可以被存储在远离计算设备100和处理资源110但可由计算设备100和处理资源110访问的机器可读存储介质上。
在本文描述的示例中,处理资源可以包括例如被包括在单个计算设备中或被分布在多个计算设备上的一个处理器或多个处理器。如本文使用的,“处理器”可以是以下至少之一:中央处理单元(CPU)、基于半导体的微处理器、图形处理单元(GPU)、被配置成获取和执行指令的现场可编程门阵列(FPGA)、其它适于获取和执行机器可读存储介质上存储的指令的电路或其组合。处理资源110可以提取、解码和执行存储介质120上存储的指令,以执行下面描述的功能。在其它示例中,存储介质120的任何指令的功能都可以以电路的形式、以编码在机器可读存储介质上的可执行指令的形式、或其组合实现。
在图1的示例中,计算设备100可以与储存库140通信,储存库140可由至少一个机器可读存储介质实现。尽管在图1的示例中,储存库140与计算设备100分离,但是在其它示例中,计算设备100可以包括储存库140。如本文使用的,“机器可读存储介质”可以是任何电子的、磁的、光的、或其它物理存储装置,用来包含或存储诸如可执行指令、数据等的信息。例如,本文描述的机器可读存储介质可以是随机存取存储器(RAM)、易失性存储器、非易失性存储器、闪存、存储驱动器(例如硬盘驱动器)、固态驱动器、任何类型的存储盘(例如光盘、DVD等),或其组合的任何一个。此外,本文描述的任何机器可读存储介质都可以是非瞬态的。
计算设备100还可以与测试***150和外部服务虚拟化***155通信。测试***150可以是任何能够测试计算机应用的***。如本文使用的,“应用”(或“计算机应用”)是可以由至少一个计算设备的至少一个处理资源执行的机器可读指令的集合。在本文描述的示例中,应用可以是由多层计算机***的几个不同层运行的复合应用。在此类示例中,复合应用可以实现Web应用、网络服务等、或其组合。
测试***150可以能够以不同的负载、不同数量的用户、各种用户行为等对应用进行测试。在图1的示例中,测试***150可以测试要被托管在由例如远程计算服务提供商操作的计算机***上的应用105。测试***150可以被实现在至少一个计算设备上,测试***150的功能可以以电路的形式、编码在机器可读存储介质上的可执行指令的形式,或其组合实现。
测试***150可以与外部服务虚拟化***155通信,外部服务虚拟化***155可以是能够模拟正在被测试的应用的外部服务的任何***。在本文描述的示例中,“外部服务”可以是被实现为与给定应用分离的任何服务(例如,web服务、应用、web应用、***等、或其组合),给定应用被配置成在其执行期间依赖(例如,访问、从其请求信息等)该服务。在图1的示例中,应用105可以在应用105的非测试执行期间(例如,在生产中)依赖外部服务(例如,数据馈送、单独的Web应用等)。在此类示例中,外部服务虚拟化***155可以在测试***150对应用105的测试期间,实现应用105可以调用或以其它方式访问的外部服务的模拟156。在其它示例中,***155可以实现另外的模拟、其它模拟、或其组合。
在本文描述的示例中,外部服务的“模拟”可以是任何应用或过程,用来提供对针对外部服务的请求的响应,例如外部服务的API定义的函数调用。在图1的示例中,通过例如响应于外部服务的API定义的函数调用而提供模拟响应(例如,模拟数据),***155可以实现模拟156来模拟外部服务对这种函数调用的响应。外部服务虚拟化***155可以被实现在至少一个计算设备上,并且***155的功能性可以以电路的形式、编码在机器可读存储介质上的可执行指令的形式、或其组合实现。
在图1的示例中,指令121可以指示外部服务虚拟化***155模拟由模拟156模拟的外部服务的故障。例如,指令121可以向***155提供指定外部服务的故障的故障模拟消息182以进行模拟。消息182可以指定可能发生在外部服务中的任何合适的故障。例如,消息182可以指示模拟156模拟慢的响应时间(例如通过延迟对应用105的响应),波动的响应时间(例如通过改变响应时间),非反应性(例如通过不对来自应用105的请求提供响应)等。在其它示例中,消息182可以指定任何其他合适的外部服务故障,例如提供不一致的响应、不正确的响应、误差等。在***155模拟多个外部服务的示例中,消息182还可以识别模拟156(或由其模拟的外部服务)。根据消息182中指定的故障,由外部服务模拟156执行的故障模拟183可以包括任何这样的响应(或缺少这样的响应)。
如本文使用的,外部服务的“故障”(或“外部服务故障”)可以是使得外部服务表现异常的外部服务的任何情况或情况的集合。在本文描述的示例中,如图1中故障模拟183图示的,外部服务的故障可以通过模拟依赖外部服务的应用可能经历的故障的影响而模拟。本文描述的示例可以通过指示外部服务虚拟化***模拟依赖外部服务的应用可能经历的故障的影响,来指示该***模拟外部服务故障。
在图1的示例中,测试***150可以在测试期间监测应用105的性能。在这些示例中,在应用105的测试期间,测试***150可以监测应用105对外部服务故障模拟183的响应,并且将应用105对故障模拟183的响应的指示184提供给计算设备100。例如,测试***150可以收集指标。在本文描述的示例中,“指标”可以是量化或以其它方式表示应用的性能的信息。在这些示例中,应用的性能可以包括应用的操作的功能正确性、执行应用的计算资源的可测量方面等中的至少之一。如本文使用的,计算资源可以是计算***(例如计算机网络,计算设备等)的硬件部件或软件(即,可执行指令的处理器)部件、或其组合。
示例的指标可以包括表示应用的响应时间、应用的可用性、应用的操作的功能正确性等的指标。其它示例的指标可以包括表示应用的处理器(即,CPU)利用率、应用的存储器利用率、应用的存储的利用率(例如,磁盘I/O)、应用的网络利用率、应用的网络活动等的指标。测试***150可以包括在测试期间用来测量或以其它方式收集表示应用105的性能的各种指标的监视器。测试***150还可以在各种日志中存储与应用105的性能有关的信息。在此类示例中,测试***150(例如,监视器)还可以分析这些日志以获得应用105的指标。在一些示例中,指标可以包括指标的值和指标表示的是什么(例如响应时间等)的描述两者。
在一些示例中,测试***150可以收集表示应用105对故障模拟183的响应的指标。例如,测试***150可以在故障模拟183期间、在故障模拟183之后、或在故障模拟183期间和在故障模拟183之后,收集应用105的指标。在此类示例中,测试***105可以将所收集的、表示应用105对故障模拟183的响应的指标,作为故障响应指示184提供给计算设备100(这可以包括测试***150和计算设备100之间的一个或多个通信)。在一些示例中,如下面更详细地描述的,通过测试***150收集的指标可以被概括,以方便与在应用105的非测试执行期间收集的指标进行比较。
在图1的示例中,在应用的测试期间,指令122可以生成表示应用对由模拟156模拟的外部服务的故障的模拟183响应的测试应用指纹141。例如,指令122可以基于从测试***150接收到的故障响应指示184来生成测试应用指纹141。如本文使用的,“指纹”是表示给定时间的计算机应用的状态的信息的集合。
如上面描述的,在一些示例中,故障响应指示184可以包括在故障模拟183期间、在故障模拟183之后、或在故障模拟183期间和在故障模拟183之后,为应用105收集的指标。在此类示例中,指令122可以响应于故障模拟183,在从测试***150接收到的指标中,生成指示指标变得异常的指标的测试应用指纹141。在此类示例中,如果指标(例如,其值)违反了为指标定义的相应异常阈值,那么指令122可以认为指标是异常的。指令122可以针对每个指标确定该指标是否违反了其相应的异常阈值(例如,低于定义的下限的阈值或超过定义的上限的阈值)。在一些示例中,给定指标的异常阈值可以基于指标的平均值、被定义为指标的可接受的值(例如,基于SLA、SLO等或与SLA、SLO一致等)等。在一些示例中,作为指示184的一部分接收(或从其获得)的指标可以与之前从测试***150接收到的指标进行比较,以确定指标是否响应于故障模拟183而变得异常。
在一些示例中,指令122可以将测试应用指纹141生成为二进制值的向量(矩阵等),每个二进制值表示指标中的相应的一个指标是否变得异常。在其它示例中,指令122可以以任何其它合适格式的生成测试应用指纹141。在一些示例中,指令121可以指示***155在多个不同的时间,模拟同一故障,并且指令122可以以任何合适的方式,基于在每次故障的模拟后接收到的指标生成测试应用指纹141。在一些示例中,指令122可以生成指示除了那些响应于故障模拟183而变得异常的指标之外的、异常的指标的每一个的测试应用指纹141。
在图1的示例中,指令123可以在储存库140中存储测试应用指纹141。指令123还可以在储存库140中将测试应用指纹141与由模拟156模拟的外部服务和为外部服务模拟的故障关联。例如,指令123可以将测试应用指纹141与故障的描述142和故障为其模拟的外部服务关联。如在下面更详细地描述的,以这种方式,储存库140中的信息可以通过本文描述的示例使用,以基于指纹141将外部服务和描述142的外部服务故障识别为在应用105的非测试执行期间检测到的问题的来源。
在一些示例中,指令122还可以确定基于接收到的指标获得的复合指标是否异常。示例的复合指标可以是由多个接收到的指标形成的模式或配置文件,例如基于分别描述处理器利用率、存储器利用率和存储利用率的指标的利用率模式。在这些示例中,指令122可以根据预定的模式、阈值等确定复合指标的这种模式是否异常。在这些示例中,指令122可以生成测试应用指纹141来指示作为故障响应指示184的一部分接收到的指标中和基于接收到的指标获得的任何复合指标中变得异常的指标。
在一些示例中,指令121-123可以是安装包的一部分,在被安装时,可被处理资源110执行来实现本文关于指令121-123描述的功能。在此类示例中,存储介质120可以是便携式介质,例如CD,DVD或闪存驱动器,或者是从其可以下载和安装该安装包的服务器所维护的存储器。在其它示例中,指令121-123可以是已经安装在包括处理资源110的计算设备100上的应用、多个应用、或组件的一部分。在此类示例中,存储介质120可以包括存储器,例如硬盘,固态硬盘等。在一些示例中,本文关于图1描述的功能可以结合本文关于图2-图4中的任何图描述的功能提供。
图2是用于比较测试应用指纹和生产应用指纹的示例计算设备200的框图。如上面关于图1描述的,在图2的示例中,计算设备200包括处理资源110、机器可读存储介质120和储存库140。如上面关于图1描述的,存储介质120可以包括指令121-123,以及指令124-128。在一些示例中,存储介质120可以包括另外的指令。在一些示例中,本文关于存储介质120描述的指令121-128和任何其它的指令可以被存储在远离计算设备200和处理资源110、但是计算设备200和处理资源110可以访问的机器可读存储介质上。
在图2的示例中,计算设备200也可以与生产***270通信,生产***270可以是能够在非测试(例如,“生产”)环境下执行应用105的计算机***。在一些示例中,生产***270可以执行应用105,使得实际用户、其它***等可以经由通过其可以访问生产***270的计算机网络,与应用105交互。生产***270还可以包括多个监视器272,用来在非测试执行期间收集应用105的指标。在图2的示例中,生产***270可以基于监视器272收集的指标,将生产指标286提供给计算设备200。生产***270可以由至少一个计算设备实现,监视器272可以以电路的形式、编码在机器可读存储介质上的可执行指令的形式、或其组合实现。
在生产***270上的非测试执行期间,应用105可以依赖(例如,访问或以其它方式从其获取信息)与应用105和生产***270分离操作的外部服务276-1-276-N(其中,“N”是大于1的整数)。在此类示例中,外部服务276-1-276-N可以被实现在与生产***270分离、但是生产***270可以访问的计算机***上。
在其中应用105是复合应用的示例中,生产***270可以包括逻辑上被分成多个层来执行应用程序105的计算设备。例如,生产***270可以包括前端层,其包括与后端层通信的网关服务器。此后端层可以包括例如包括web服务器的第一层、包括数据库服务器的第二层等。
如上面关于图1描述的,在图2的示例中,计算设备200还可以与测试***150和外部服务虚拟化***155通信。如上面描述的,测试***150可以测试应用105,并且外部服务虚拟化***155可以分别实现外部服务276-1-276-N的模拟256-1-256-N。如上面关于图1描述的,在此类示例中,应用105可以在测试***150对应用105的测试期间,调用或以其它方式访问模拟256-1-256-N中的每个模拟。
如上面所描述的,指令121可以指示***155模拟由模拟256-1模拟的外部服务276-1的故障。例如,指令121可以将指定外部服务276-1(或模拟256-1)和模拟的外部服务276-1的故障的故障模拟消息182提供给***155。如上面所描述的,消息182可以指定可能发生在外部服务276-1中的任何合适的故障。如上面关于图1描述的,作为响应,模拟256-1可以执行故障模拟283。
在测试期间,测试***150可以监视应用105的性能。如上面关于图1描述的,例如,测试***150可以收集表示应用105的性能的指标。在图2的示例中,测试***150可以包括多个监视器252,用来收集应用105的指标。监视器252可以以电路的形式、编码在机器可读存储介质上的可执行指令的形式、或其组合实现。如上面关于图1描述的,在图2的示例中,监视器252可以收集表示应用105对故障模拟283响应的指标。在此类示例中,测试***150可以将基于监视器252收集的指标以及表示应用105对故障模拟283响应的多个测试指标284提供给计算设备200。
在一些示例中,测试指标284可以提供给计算设备200摘要的或以其它方式概括的描述,以方便与在应用105的非测试执行期间收集的指标的比较。如上面描述的,例如,应用105可以是生产***270可以在逻辑上分成多层的多个计算资源(例如,服务器)上运行的复合应用。在此类示例中,给定的层可以包括多个同一类型的计算资源(例如,多个服务器),每个计算资源都有助于复合应用的执行。然而,在一些示例中,测试***150可以在代表生产***270拓扑的较小的拓扑上测试应用105。例如,针对每一层,代表拓扑可以包括由该层使用的每个类型的一个计算资源(例如,每层一个服务器,而不是多个)。
在此类示例中,在测试***150和生产***270处收集的指标可以被摘要或以其它方式概括,来适应在测试***150和生产***270处使用的各个拓扑的差异。在一些示例中,指标可以被摘要到层-等级,或被以任何其它合适的方式摘要。在示例中,例如,测试***150可以将层2的服务器的处理器利用率指标的描述摘要为例如“层2的处理器利用率”。在此类示例中,生产***270可以收集层2的服务器1的处理器利用率、层2的服务器2的处理器利用率和层2的服务器3的处理器利用率的各个指标,并且例如可将这些指标中的每个指标的描述类似地摘要为例如“层2的处理器利用率”。在其它示例中,给定层的同一类型的多个资源的指标可以被组合(例如,平均等),以获得全面的、层-等级的指标。在图2的示例中,被提供给计算设备200的测试指标284和生产指标288可以被以这种方式或任何其它合适的方式摘要,以方便比较。
如上面关于图1描述的,在图2的示例中,在应用105的测试期间,指令122可以生成表示应用105对故障模拟283响应的测试应用指纹241-1。如上面描述的,指令122可以基于由测试***150收集的指标来生成指纹241-1。例如,在应用105的测试期间,指令124可以(主动地或被动地)获取表示应用105对外部服务276-1的故障的模拟283响应的测试指标284。在此类示例中,指纹241-1可以为测试指标284的每一个(以及任何获得的复合指标)指示该测试指标是否响应于故障的模拟283而变得异常。如上面关于图1描述的,指标是否是异常的或变得异常,可以由指令122确定。在其它示例中,如上面描述的,指令122可以生成指示所有异常指标的测试应用指纹。
在图2的示例中,指令122可以将测试应用指纹241-1生成为二进制值的向量(矩阵等),每个二进制值表示指标中的相应的一个指标是否变得异常。例如,表示给定指标的向量位置中的“1”可以指示该给定向量响应于故障的模拟283而变得异常,而向量位置中的“0”可以指示该给定的指标没有变得异常(或反之亦然)。在其它示例中,指令122可以以任何其它合适格式生成测试应用指纹241-1。
如上面关于图1描述的,指令123可以在储存库140中存储测试应用指纹241-1,并且可以将测试应用指纹241-1与储存库140中的模拟的故障和外部服务关联。例如,指令123可以将测试应用指纹241-1与模拟的故障的描述242-1和故障是为其模拟的外部服务278-1关联。在一些示例中,指令121-124可以使得***155(利用各个模拟256-1-256-N)模拟外部服务276-1-276N中的每个外部服务中的至少一个故障,并且生成测试应用指纹241-1-241-M(其中,“M”是大于1的整数)。指令123可以在储存库140中存储测试应用指纹241-1-241-M,并且将指纹241-1-241-M与各个外部服务和故障描述242-1-242-M关联,故障描述242-1-242-M描述由各个指纹表示的模拟的故障并且其中故障对应于测试应用指纹的外部服务被模拟。
如上面描述的,生产***270可以实施应用105的非测试执行,使得实际用户、其它***等可以访问应用105,并且监视器272可以在***270的非测试执行期间,收集应用105的指标。收集的指标可以是上面描述的任何类型的指标。在一些示例中,计算设备200的指令124可以通过生产***270在应用105的非测试执行期间(主动地或被动地)从生产***270获取表示应用105的性能的多个生产指标286。如上面描述的,生产指标286可以基于监视器272收集的指标,并且可以是收集的指标的被摘要的或以其它方式概括的版本。在图2的示例中,应用105在生产***270的非测试执行期间,使用外部服务276-1-276-N中的每个外部服务。
指令125可以基于生产指标286,检测在应用105的非测试执行期间的问题。在本文描述的示例中,在应用执行期间的“问题”可以是应用的执行中涉及的计算资源的性能不足、在应用的执行期间发生故障、或任何其它类型的应用在执行期间不能令人满意的性能。在一些示例中,这种性能标准可以被体现为针对各种类型的生产指标286定义的问题阈值。在本文描述的示例中,问题阈值可以是对应于应用的至少一个指标的阈值,其中对应指标违反阈值指示应用的执行期间问题的出现。问题阈值可以基于例如应用的SLA或SLO,或应用的性能的任何其它标准来定义。
在图2的示例中,指令125可以将生产指标286中的至少一个生产指标与相应的问题阈值进行比较。例如,某些生产指标286可以被认为是潜在地指示问题(例如,表示响应时间或应用105的可用性的生产指标286),并且因此可以具有定义的问题阈值。其它生产指标286(例如,CPU利用率)可以不被认为是潜在地指示应用105的问题,并且因此可以不具有定义的问题阈值。在图2的示例中,指令125可以将定义了相应的问题阈值的生产指标286与其相应的问题阈值进行比较。在一些示例中,指令125可以将从生产指标286获得的复合指标与为这些复合指标定义的问题阈值进行比较。
在图2的示例中,指令126可以响应于指令125的比较的至少一个结果,检测在应用105的非测试执行期间的问题。例如,指令126可以响应于指示至少一个生产指标286或复合指标违反(例如,超过、低于等)对应的问题阈值的至少一个比较结果,来检测问题。响应于检测到问题,指令122可以生成表示在(或接近)检测到的问题的时间的应用105的状态的生产应用指纹245。如上面描述的,指令122可以以任何方式,基于生产指标286来生成生产应用指纹245。
指令122可以生成格式与测试应用指纹241-1-241-M中的每个测试应用指纹的格式都相同的生产应用指纹245,以方便随后的指纹的比较。例如,指令122可以将测试应用指纹245生成为二进制值的向量(矩阵等),指纹245中的每个向量位置都与指纹241-1-241-M中的每个指纹中对应的向量位置表示相同类型的指标。在其它示例中,指令122可以生成其它合适格式的指纹241-1-241-M和245(使得指纹彼此对应以进行比较)。
在图2的示例中,指令127可以比较测试应用指纹241-1和生产应用指纹245。基于比较的结果,指令128可以将与测试应用指纹241-1相关联(即,由相关联的描述242-1进行描述的)的外部服务276-1和故障识别为检测到的问题的来源。
例如,指令127可以将生产应用指纹245与测试应用指纹241-1-241-M中的每个测试应用指纹进行比较。在一些示例中,指令127可以确定生产应用指纹245与储存库140中存储的多个应用指纹241-1-241-M中的测试应用指纹241-1最相似,并且可以确定生产应用指纹245满足与测试应用指纹241-1有关的相似性阈值。响应于这些确定,指令128可以将与测试应用指纹241-1相关联的外部服务(即,外部服务276-1)和描述242-1的故障识别为检测到的问题的来源。
指令127可以以任何合适的方式比较应用指纹。例如,由指令127执行的比较可以包括确定指纹之间的相似性分数。在一些示例中,指令127可以分别确定生产应用指纹245和测试应用指纹241-1-241-M中的每个指纹之间的相似性分数。指令127可以以任何合适的方式确定一对指纹的相似性分数。例如,指令127可以基于任何合适的距离指标(例如一对指纹之间的汉明(Hamming)距离)来计算一对指纹之间的相似性分数。可以被用来确定指纹之间的相似性分数的其它示例的距离指标可以包括L1和L2范数。
在一些示例中,指令127还可以确定为一对指纹确定的相似性分数是否满足相似性阈值。在此类示例中,在测试应用指纹241-1-241-M中最相似的指纹具有不满足相似性阈值的相似性分数(相对于指纹245)时,指令128可以确定储存库140中没有指纹是生产应用指纹245的匹配。以这种方式,本文描述的示例可以减少在搜索与生产应用指纹245最相似的存储的指纹时生成的误报的数目。
在一些示例中,指令127可以使用预定义的全局相似性阈值。在其它示例中,可以为测试应用指纹241-1-241-M中的每个指纹获得相应的相似性阈值。在此类示例中,相似性阈值可以被统计地获得。例如,针对每个外部服务的要被模拟的每个故障,指令121可以使***155对该故障进行多次(例如,20次等)模拟。在此类示例中,指令124可以为故障的每个模拟获取测试指标284,并且指令122可以生成表示应用105对每个模拟的响应的指纹。在此类示例中,指令127可以将生成的指纹中的每个指纹与彼此比较,确定指纹之间的平均相似性分数,并且确定对应于模拟的故障的测试应用指纹241-i的相似性阈值(其中,“i”为1和M之间的整数,包括两个端点)。例如,相似性阈值可以由确定的平均相似性加上定义数目的标准差,或从平均相似性分数(例如,距离)中减去定义数目的标准差来定义。在此类示例中,相似性阈值可以被定义为一个范围。
在其它示例中,例如,指纹可以采取概率值的向量的形式,每个概率值都在0-1之间(包含两个端点),每个概率值都表示相应的指标(由值的向量位置表示)将响应于外部服务的关联的故障而变得异常的概率。在此类示例中,概率可以通过以下方式确定:如上面描述的,模拟每个故障多次,并且通过确定每个给定指标响应于故障模拟变得异常的次数的百分比来确定给定指标的概率。在一些示例中,如上面描述的,生产应用指纹245可以是二进制向量。在此类示例中,指令127可以通过对对应于如指纹245所指示(例如,由指纹245中的“1”表示的指标)的、生产中变得异常的指标的测试应用指纹的概率值求和,来确定概率值的测试应用指纹和生产应用指纹245的相似性分数。在此类示例中,可以以任何合适的方式确定相似性阈值。
在一些示例中,指令121-128可以是安装包的一部分,,在被安装时,能够被处理资源110执行来实现本文关于指令121-128描述的功能。在此类示例中,存储介质120可以是便携式介质,例如CD,DVD或闪存驱动器,或者是从其可以下载和安装该安装包的服务器所维护的存储器。在其它示例中,指令121-128可以是已经安装在包括处理资源110的计算设备100上的应用、多个应用、或组件的一部分。在此类示例中,存储介质120可以包括存储器,例如硬盘、固态硬盘等。在一些示例中,本文关于图2描述的功能可以结合本文关于图1或图3-图4中的任何图描述的功能提供。
图3是用于在具有关联的外部服务和关联的外部服务的故障的描述的储存库中存储测试应用指纹的示例***300的框图。在图3的示例中,***300包括引擎321-327。在一些示例中,***300可以包括另外的引擎。
***300的引擎中的每个引擎都可以是硬件和程序的任何组合,用来实现各个引擎的功能。硬件和程序的这种组合可以以多个不同的方式实现。例如,引擎的程序可以是存储在非瞬态机器可读存储介质上的处理器可执行的指令,并且引擎的硬件可以包括用来执行这些指令的处理资源。在此类示例中,机器可读存储介质可以存储在处理资源执行时实现***300的指令。存储指令的机器可读存储介质可以被集成在包括处理资源的计算设备中,用于执行指令,或者机器可读存储介质可以与计算设备和处理资源分离,但是计算设备和处理资源可以访问机器可读存储介质。处理资源可以包括被包括在单个计算设备中或被分布在多个计算设备上的一个处理器或多个处理器。在其它示例中,任何引擎的功能都可以以电路的形式实现。
在一些示例中,指令可以是安装包的一部分,在被安装时,可以由处理资源执行来实现***300。在此类示例中,机器可读存储介质可以是便携式介质,例如CD、DVD或闪存驱动器,或者是从其可以下载和安装该安装包的服务器所维护的存储器。在其它示例中,指令可以是已经安装在包括处理资源的计算设备上的应用、多个应用、或组件的一部分。在此类示例中,机器可读存储介质可以包括存储器,例如硬盘、固态硬盘等。
在图3的示例中,***300与储存库340通信,储存库340可由至少一个机器可读存储介质实现。如上面关于图1-2描述的,***300还与测试***150和外部服务虚拟化***155通信,***300还与测试生成器360通信。如上面关于图2描述的,***300还与生产***270通信,生产***270通信与外部服务276-1-276-N通信。如上面关于图2描述的,***155的模拟256-1-256-N分别模拟外部服务276-1-276-N。
在图3的示例中,测试引擎322可以使测试***150发起对应用105的测试。引擎322也可以指示测试生成器360开始将测试负载381施加给正在被测试***150测试的应用105。测试负载381可以包括在测试应用105的过程中,在不同时间可以被施加给应用105的多个负载。测试生成器360可以被实现在至少一个计算设备上,并且测试产生器360的功能可以以电路的形式、编码在机器可读存储介质上的可执行指令的形式、或其组合实现。
***300的故障引擎321可以指示(例如,经由消息382)外部服务虚拟化***155在模拟256-1中模拟外部服务276-1的目标故障。作为响应,模拟256-1可以执行目标故障的模拟381-1。在此类示例中,测试引擎322可以指示测试生成器360以使应用105访问外部服务模拟256-1,使得在应用105的测试期间,应用105被暴露给目标故障的模拟383-1。例如,测试引擎322可以将测试指令380提供给测试生成器360以使测试生成器360施加将使应用105访问模拟256-1的测试负载381,使得在测试期间,应用105被暴露给目标故障的模拟383-1。在此类示例中,测试引擎322可以指示测试生成器360施加测试负载381(例如,模拟的用户请求等),当应用执行故障模拟383-1时,测试负载381将使应用调用外部服务模拟256-1,使得在测试期间,应用105被暴露给故障模拟383-1。以这种方式,***300可以协调测试和故障模拟,使得在测试***150测试下的应用105被暴露给由***155执行的故障模拟,使得可以观察应用105对模拟的故障的响应并且可以创建响应的对应指纹。
在图3的示例中,在应用105的测试期间,获取引擎323可以获取表示应用105对外部服务276-1的目标故障的模拟383-1响应的多个测试指标384。如上面描述的,测试指标384可以基于监视器252收集的指标,并且可以被摘要或以其它方式概括。在应用105的测试期间,指纹引擎324可以生成表示应用105对外部服务276-1的目标故障的模拟383-1响应的测试应用指纹341-1。例如,如上面关于图1-图2描述的,引擎324可以基于获取的指标384生成测试应用指纹341-1。存储引擎325可以将测试应用指纹341-1存储到具有目标故障和目标故障是为其模拟的外部服务276-1的描述342-1的储存库340中。在其它示例中,外部服务和目标故障的各自的描述可以被在储存库340中与测试应用指纹341-1相关联。
在一些示例中,如上面描述的,***300可以基于故障模拟383-1的一个或多个试验生成测试应用指纹341-1。在一些示例中,故障引擎321可以指示外部服务虚拟化***155(例如,经由消息382)来多次模拟外部服务的目标故障,并且使得测试应用105期间目标故障的每个模拟与不同测试条件(例如,负载)一致。例如,引擎321可以指示***155在不同的测试负载381要被测试***150施加给应用105的不同的时间,执行目标故障的各个故障模拟383-1。在其它示例中,测试引擎322可以使测试生成器360每次提供不同的测试负载381,故障引擎321使***155执行对故障模拟383-1的多个试验中相应的一个试验。
在一些示例中,针对目标故障的每个模拟383-1,获取引擎323可以在应用105的测试期间获取表示应用对目标故障的各个模拟383-1响应的相应的多个测试指标384。在此类示例中,指纹引擎324可以针对目标故障的每个模拟383-1合并多个测试指标384,以生成测试应用指纹341-1。例如,如上面关于图2描述的,引擎324可以基于各个试验的指标384,生成响应于模拟383-1而变得异常的每个指标的概率。
如上所述,***155可以分别为外部服务276-1-276-N中的每个外部服务实现模拟256-1-256-N。在一些示例中,针对模拟256-1-256-N中的每个模拟,故障引擎321可以指示***155模拟被共同地示为故障模拟383-1-383-M的、多个不同的外部服务故障中的每个故障。针对模拟256-1-256-N的每个模拟中模拟的每个故障,指纹引擎324可以在应用105的测试期间生成表示应用105对模拟的故障的响应的相关联的测试应用指纹。在此类示例中,指纹引擎324可以分别生成表示应用105对故障模拟383-1-383-M响应的测试应用指纹341-1-341-M。在此类示例中,指纹引擎324可以在测试期间基于测试指标384生成表示应用105对故障模拟383-1-383-M中的每个故障模拟的响应的测试应用指纹341-1-341-M。在一些示例中,如上面描述的,测试引擎322可以协调用于测试的测试负载381,使得应用105被暴露给故障模拟383-1-383-M中的每个故障模拟。在一些示例中,故障引擎321可以使***155多次执行故障模拟383-1-383-M中的每个故障模拟,并且指纹引擎324可以基于来自每个故障模拟的每个试验的测试指标384,生成测试应用指纹341-1-341-M。在图3的示例中,针对由指纹引擎324生成的测试应用指纹341-1-341-M中的每个测试应用指纹341-i,存储引擎325可以将测试应用指纹341-i存储到具有与测试应用指纹341-i相关联的故障和外部服务的描述342-i的储存库340中。如图3中图示的,在储存库340中,测试应用指纹341-1-341-M与描述342-1-342-M关联。
在图3的示例中,监视器272可以在应用105的非测试执行期间,在生产***270上收集应用105的指标,在应用105的非测试执行期间,应用105要使用外部服务276-1-276-N中的每个外部服务。在此类示例中,引擎323可以从生产***270获取生产指标386。如上面描述的,生产指标386可以是基于监视器272收集的指标,并且可以被摘要或以其它方式概括。
在一些示例中,如上面关于图2描述的,引擎323可以基于生产指标386检测应用105的非测试执行期间的问题。在此类示例中,响应于检测到问题,指纹引擎324可以生成表示在(或接近)检测到的问题的时间的应用105的状态的生产应用指纹245。可以以上面关于图2描述的任何方式,生成生产应用指纹245。
在图3的示例中,确定引擎326可以在储存库340中存储的测试应用指纹341-1-341-M中确定选中的测试应用指纹341-y(其中,“y”为1和M之间的整数,包含两个端点)。在一些示例中,引擎326可以确定与生产应用指纹245最相似且满足关于生产应用指纹245的相似性阈值的选中的测试应用指纹341-y。如上面关于图2描述的,引擎326可以确定相似性。在一些示例中,识别引擎327将与选中的测试应用指纹341-y相关联的外部服务和故障识别为检测到的问题的来源。例如,识别引擎327将与选中的测试应用指纹341-y相关联的外部服务和描述342-y的故障识别为检测到的问题的来源。在一些示例中,引擎327可以进一步输出包括描述342-y的外部服务的指示392并且包括描述342-y的外部服务故障的指示394的报告390。可以以任何合适的方式输出报告390。例如,报告390可以被显示(例如,在屏幕或计算设备的其它显示器上),作为给***300的用户的警报而被提供,被存储到数据库或日志中等。在一些示例中,本文关于图3描述的功能可以结合本文关于图1-图2和图4-图5中的任何图描述的功能提供。
图4是用于基于获取的测试指标生成测试应用指纹的示例方法400的流程图。尽管下面参照图1的计算设备100描述方法400的执行,但是可以使用其它用于执行方法400的合适的***(例如,计算设备200,***300)。此外,方法400的实现不限于此类示例。
在方法400的405处,指令121可以在应用105的测试期间使应用105使用的外部服务模拟156对外部服务的故障进行模拟。例如,如上面关于图1描述的,指令121可以指示外部服务虚拟化***155在外部服务的模拟156中对外部服务的故障进行模拟。在410处,计算设备100可以在应用105的测试期间,获取表示应用105对外部服务的故障的模拟的响应的多个测试指标。如上面描述的,测试指标可以被包括在故障响应指示184中。
在415处,指令122可以基于获取的测试指标生成测试应用指纹141。指令122可以以上面描述的任何合适的方式生成指纹141。在420处,指令122可以将测试应用指纹141存储到具有外部服务和被模拟的外部服务的故障的关联描述142的储存库140中。
尽管图4的流程图示出某些功能的执行的具体顺序,但是方法400不限于该顺序。例如,流程图中连续示出的功能可以被以不同的顺序执行,可以被同时或部分同时地执行,或以其组合执行。在一些示例中,本文关于图4描述的功能可以结合本文关于图1-图3和图5中的任何图描述的功能提供。
图5是用于将与测试应用指纹相关联的外部服务和故障识别为检测到的问题的来源的示例方法500的流程图。尽管下面参照图2的计算设备200描述方法500的执行,但是可以使用用于执行方法500的其它合适的***(例如,计算设备100,***300)。此外,方法500的实现不限于此类示例。
在方法500的505处,指令121可以使外部服务276-1的模拟156-1对外部服务的故障进行模拟。例如,指令121可以在应用105的测试期间指示外部服务虚拟化***155在应用105使用的模拟156-1中模拟外部服务276-1的故障。在510处,指令124可以在应用105的测试期间获取表示应用105对外部服务的故障的模拟283响应的多个测试指标284。
在515处,指令122可以基于获取的测试指标284生成测试应用指纹241-1。指令122可以以上面描述的任何合适的方式生成指纹241-1。在520处,指令123可以将测试应用指纹241-1存储到具有外部服务和被模拟的外部服务的故障的关联描述242-1的储存库140中。
在525处,响应于在应用105的非测试执行期间检测到的问题,指令122可以生成表示在(或接近)检测到的问题的时间的应用105的状态的生产应用指纹245,在应用105的非测试执行期间,应用105要使用外部服务276-1。在530处,指令127可以比较测试应用指纹241-1和生产应用指纹245。例如,指令127可以确定生产应用指纹245与储存库140的多个应用指纹241-1-241-N中的测试应用指纹241-1最相似。指令127还可以确定测试应用指纹241-1满足与生产应用指纹245有关的相似性阈值(例如,测试应用指纹241-1和生产应用指纹245之间的相似性分数满足相似性阈值)。
在535处,基于比较的结果,指令128可以将与测试应用指纹241-1相关联的外部服务276-1和故障识别为检测到的问题的来源。例如,响应于上述确定生产应用指纹245与测试应用指纹241-1最相似并且满足相似性阈值,指令128可以将与测试应用指纹241-1相关联的外部服务和描述242-1中描述的故障识别为检测到的问题的来源。
尽管图5的流程图示出某些功能的执行的具体顺序,但是方法500不限于该顺序。例如,流程图中连续示出的功能可以被以不同的顺序执行,可以被同时或部分同时地执行,或以其组合执行。在一些示例中,本文关于图5描述的功能可以结合本文关于图1-图4中的任何图描述的功能提供。