云平台实验系统 背景技术 [0001] 许多开发人员正在构建在提供基础架构作为服务的云平台上运行的云应用。通常,由于他们无法控制云平台基础架构,因此这些开发人员不能在部署到生产之前评估其云应用对云平台的基础架构故障的恢复能力。结果,开发人员可能无法确保其云应用对于给定的基础架构故障是可恢复的,直到该故障在生产期间发生。 发明内容 [0002] 提供了一种计算机系统,其包括具有多个节点的云平台。每个节点可包括被配置以运行虚拟机的处理器。该云平台可包括被配置以在该多个节点中的所选节点上生成故障条件的故障条件注入引擎。该计算机系统可进一步包括用户界面系统,该用户界面系统被配置以从用户接收故障条件实验参数的用户输入以用于与该用户相关联的目标虚拟机。该云平台可将该多个节点中的一组节点分配给受控沙箱环境,所述受控沙箱环境被配置以运行所述用户的所述目标虚拟机。该故障条件注入引擎可基于所述故障条件实验参数在所分配的所述一组节点上生成故障条件。 [0003] 提供本发明内容以简化形式介绍一些概念,这些概念将在下面具体实施方式中进一步描述。本发明内容既不旨在确定所要求保护的主题的关键特征或必要特征,也不旨在用于限定所要求保护的主题的范围。此外,所要求保护的主题不限于解决在本公开任意部分中提出的任意或全部缺陷的实施方式。 附图说明 [0004] 图1是示出了本说明书中一种示例云平台的示意图。 [0005] 图2是示出了图1中的示例云平台的节点集群(node cluster)的示意图。 [0006] 图3是示出了使用图1中的云平台的用于故障条件实验的示例计算机系统的示意图。 [0007] 图4示出了用于为图3中的计算机系统指定故障条件实验参数的示例用户界面。 [0008] 图5示出了用于图1中的云平台的故障条件实验的方法的流程图。 [0009] 图6示出了其中可设定图1中的云平台的节点的示例计算环境的示意图。 具体实施方式 [0010] 图1示出了计算机系统10,该计算机系统包括硬件平面14、虚拟机平面16、管理程序平面18、以及网络基础架构20,它们共同被配置以操作云平台22。该硬件平面14包括许多节点24(每个节点在图1中用符号“N”表示),该节点可以包括处理器、图形处理器(GPU)、易失性存储器、以及其他被配置以运行主机服务器实例的计算机组件。由硬件平面14的节点 24执行的主机服务器实例被配置以与管理程序平面18的一个或多个管理程序通信。管理程序平面18的一个或多个管理程序可以创建、处理以及监控虚拟机平面16的多个虚拟机26(每个虚拟机在图1中用符号“VM”表示)。通过该管理程序平面18,虚拟机平面16的每个虚拟机26可由硬件平面14的一个或多个节点24的硬件组件托管并运行。以这种方式,虚拟机平面16的多个虚拟机26可共享由管理程序平面18管理的虚拟化硬件资源。每个虚拟机26提供模拟计算机环境,在该模拟计算机环境中可执行客户软件,例如云应用。 [0011] 在一个示例中,计算机系统10对应于被配置以操作云平台22的数据中心环境,该云平台22经由标准网络基础架构通信地耦合多个节点24。参见图2,多个节点24可被组织成多个节点集群28。每个节点集群28可包括架顶式(TOR)网络交换机30、多个节点24中的两个或更多个节点、以及通信地耦合架顶式网络交换机30与节点24的背板32。例如,每个节点集群28可以对应于服务器机架,该服务器机架为物理上彼此接近的位于同一服务器机架内的TOR交换机30和多个节点24提供物理结构、通风等等。在服务器机架内通信地耦合每个节点的背板32可促进同一服务器机架内节点之间网络数据包的低延迟和高带宽交换。 [0012] 如图2所示,节点集群28中的每个节点24包括通过内部数据总线36通信地耦合到其他硬件组件的至少一个处理器34。该至少一个处理器34可执行主机服务器实例38。如图所示,每个服务器可包括一个以上的处理器24,每个处理器可以单独执行主机服务器实例 38,或者可以共同执行一个主机服务器实例。在一个示例中,内部数据总线216例如可采取外围组件互联高速(PCIe)链路的形式。可以替代地使用其他格式的数据总线。应当理解的是,术语“内部数据总线”中使用的“内部”是指数据总线的至少一部分通常与节点24的处理器34容纳在同一个外壳(用作法拉第笼)中,并且应被理解为包含将外壳内的节点的处理器与内部安装的硬件组件连接的和/或将该处理器连接至插入到例如节点外壳的外表面上的端口中的外部耦合的硬件组件的数据总线。如图所示,每个节点24可以包括其他适当的硬件组件,例如GPU40、网络接口控制器(NIC)42、易失性和非易失性存储器44等。应当理解的是,节点24不限于所示出的硬件组件,而是可以包括被配置以用于操作云平台22的硬件组件的任何适合的配置。此外,应该理解的是,尽管将节点24图示为集群在服务器机架配置中,但是可利用其他类型的网络基础架构及外壳配置来耦合多个节点24并操作云平台22。 [0013] 返回到图1,网络基础架构20可以包括典型的网络基础架构以将节点集群中的节点24耦合在一起,例如包括TOR网络交换机的服务器机架。计算机系统10可包括多个节点集群,每个节点集群具有相关联的TOR网络交换机,还可以具有图2中所描述的架构。网络基础架构可进一步包括将TOR网络交换机连接在一起的高级别交换基础架构46(L1)和(L2)。高级别交换基础架构46可以采取任何适当的网络架构的形式,并且可由任何适当的路由协议驱动。在所图示的示例中,高级别交换基础架构46包括许多聚合交换机L1和核心交换机L2。 然而,应该理解的是,高级别交换基础架构可以包括任何适当数量的交换级别。 [0014] 经由节点24的处理器34执行的每个主机服务器实例38可通过网络基础架构20与其他主机服务器实例38通信。全部主机服务器实例38管理硬件平面14的集体硬件资源(collective hardware resources),该集体硬件资源可被用于通过管理程序平面18运行虚拟机平面16的虚拟机26。在一个示例中,由管理程序平面18来控制硬件平面14的主机节点的硬件资源对虚拟机26的利用,并且虚拟机26可能不会直接访问节点24本身。虚拟机平面16的虚拟机26提供虚拟计算环境,在该虚拟计算环境中云平台22的用户可执行云应用。 在执行云应用期间,管理程序平面18可以分配硬件平面14的一个或多个节点24的硬件资源以运行云应用。管理程序平面18可以通过可变且可扩展的方式分配节点24的硬件资源,从而可以将额外的节点24分配给特定虚拟机26,并且在云应用运行时,可以为该特定虚拟机 26减少、转移或以其他方式更改所分配的节点24。 [0015] 应当理解的是,硬件平面14的节点24可具有各种各样不同的硬件组件。也就是说,与硬件平面14的第二节点相比,硬件平面14的第一节点可具有不同类型/版本的处理器、GPU、易失性/非易失性存储器等。此外,计算机系统10的不同节点集群28可以位于不同位置,例如,不同国家及大洲。然而,使用网络基础架构20,这些不同的节点集群28可以进行通信,并且它们的集体硬件资源可以被管理程序平面18用于运行虚拟机平面16的虚拟机26。 应当理解的是,上文所描述的以及图1和图2中示出的云平台22基础架构仅仅是示例性的,也可以使用本文未具体描述的其它网络基础架构及组织方法。 [0016] 应当理解的是,图1中的计算机系统10的硬件环境和图2中的节点集群28的节点24在正常运行期间可能会经历各种硬件及软件故障条件。如下文所述,这些故障可能会对部署到其上的软件应用带来负面影响。 [0017] 图3示出了计算机系统10,其包括被配置以与用户计算机设备48通信的云平台22。 该云平台22包括云平台核心基础架构50,其可包括多个节点24,每个节点包括被配置以运行虚拟机26的处理器34。在一个示例中,如图1和图2中所示的以及上文所描述的来配置云平台核心基础架构50。应当理解的是,云平台核心基础架构50可以包括其他设备和服务。例如,云平台核心基础架构50可以包括结构控制器86,其被配置以监控和管理多个节点24的健康状态并协调用于多个虚拟机26的资源。再如,云平台核心基础架构50可以包括网络控制器88,其被配置以部署、监控及管理各种网络元件,例如,软件负载平衡器、虚拟网络策略、数据中心防火墙策略等。 [0018] 再如,云平台核心基础架构50可以包括存储服务90,其被配置以管理与多个虚拟机26相关联的存储设备。存储设备,比如盘驱动器、固态驱动器等,可位于远端地点,并且存储服务90可以被配置以管理各个虚拟机26与其位于远端地点的相关联的存储设备之间的网络连接。再如,云平台核心基础架构50可以包括网络交换机92,例如,TOR网络交换机30、以及将TOR网络交换机连接在一起的高级别交换基础架构46(L1)和(L2)。除了可监控、管理或以其他方式影响多个节点24运行的云平台核心基础架构50以外,云平台22还可以包括其他云平台设备94和服务。应当理解的是,上文所描述的云平台基础架构的示例仅仅是示例性的,并且云平台22及云平台核心基础架构50可以包括图3中未示出的其他软件及硬件元件。 [0019] 云平台22进一步包括用户界面系统52,其为用户界面提供后端,该用户界面可经由用户计算机设备48呈现给用户。在一个示例中,用户界面系统52可以采取Web门户形式,该Web门户包括经由在用户计算机设备48上执行的浏览器向用户显示的用户界面。再如,用户界面可以包含在用户计算机设备48上执行的应用中,并被配置以与用户界面系统52发送和接收数据。用户可以将用户输入54输入到用户界面,该用户界面被配置以将用户输入54发送到用户界面系统52。 [0020] 用户界面系统52可以存储与用户计算机设备48的每个用户相关联的用户账户。通过用户账户,用户可以与在云平台核心基础架构50的节点上运行的特定虚拟机26相关联。 用户可以将云应用56上传到云平台22上以在其相关联的虚拟机26中运行。应当理解的是,此处使用的术语“用户”可以指的是与单一用户账户相关联的一组用户,例如,正在合作开发云应用56的一组开发人员。再如,术语“用户”可以是被授权对相关联的虚拟机和云应用进行行政管理的授权用户或用户账户。 [0021] 云应用56可以采用任何适当的形式,例如,Web应用、游戏等。云应用56可以在使用云平台核心基础架构50的多个节点24的硬件资源的用户的关联虚拟机26中运行。在一个示例中,除了多个节点24以外,虚拟机26可以额外利用其它硬件资源。例如,用户的虚拟机26可以具有相关联的存储盘,该存储盘存储用于云应用56的视觉数据和其它类型的应用数据。运行该用户的虚拟机26的一个或多个节点24可以被配置以通过网络与相关联的存储盘通信,并为云应用56发送和接收数据。存储盘可以采取固态硬盘驱动器、盘驱动器,或另一种类型的存储盘的形式。在一个示例中,云平台核心基础架构50的存储服务90可以被配置以调解用户的虚拟机与相关联的存储盘之间的通信。 [0022] 如图3所示,云平台22进一步被配置以向用户提供故障条件实验服务以设计故障实验来测试其云应用56对通常在生产期间发生的各种类型的故障条件的恢复能力。使用用户界面系统52提供的用户界面,用户可通过在多个不同的故障条件实验参数58之中选择来设计适当的故障实验。用户界面系统52被配置以经由用户界面从用户计算机设备48接收来自于用户的故障条件实验参数58的用户输入,以用于与该用户相关联的目标虚拟机26。故障条件实验参数58指定故障实验62的各种特征以及云平台22应为云应用56模拟以测试其恢复能力的故障条件。这些故障条件实验参数58可以作为可扩展文件存储和传输,例如可由下游解释器-比如故障条件控制器64-解释,该下游解释器是在具有处理器的服务器计算设备上执行的程序。以这种方式,故障条件实验参数58允许这样的实现,在该实现中,用于故障测试的软件基础架构被表达为能够解释的编码。 [0023] 图4示出了经由用户计算机设备48的显示器向用户展示的示例用户界面60。用户界面60可以包括故障实验图形用户界面(GUI)元件62。使用故障实验GUI元件62,用户可以输入用于各种故障条件实验参数58的输入。用户界面60可以包括各种用于用户选择故障条件实验参数58的GUI元件,例如,下拉式选择器。然而,应当理解的是,任何适当的GUI输入方法可用于输入用于故障条件实验参数58的用户输入。 [0024] 在图示的示例中,故障条件实验参数58包括故障条件的类型58A。故障条件的类型 58A可从网络中断故障条件、盘中断故障条件、存储器中断故障条件等之中选择。作为一些附加的非限制性示例,该故障条件的类型58A可包括盘断开故障、丢包故障、高延迟故障、数据包重排序故障、数据包定向障碍故障、慢启动故障、会话中止故障、盘写入和/或盘读取故障、数据丢失故障等等。该故障条件的类型58A还可包括其他网络和计算机行为,该网络和计算机行为可潜在引起针对云应用56的问题,例如,响应于请求,以云应用不期望的形式发送云应用数据。再如,当修改主机节点24的系统组件时发生的暂停正在运行云应用56的虚拟机26。再例如,主机节点24的主机服务器实例38的内核故障。应当理解的是,该故障条件的类型58A不限于以上所述的示例,并且可包括任何适当类型的可影响虚拟机26性能及其在这些虚拟机上运行的云应用56的网络或计算机故障。 [0025] 在一个示例中,故障条件实验参数58还包括针对用户选择的该故障条件的类型 58A的故障条件强度58B和/或故障条件频率。可为故障实验62从整体上选择故障条件强度/频率58B,或可为用户所选的每个故障条件类型58A单独选择故障条件强度/频率58B。在所示的示例中,故障条件强度58B可从低强度值、中强度值或高强度值中选择。例如,针对盘断开类型的故障条件的故障条件强度可导致盘断开较长或较短一段时间,其取决于所选择的强度。再如,针对数据损坏类型的故障条件的故障条件强度可导致较大量或较小量的数据损坏。故障条件频率可指定故障实验62期间该故障条件类型58A多久发生一次,例如,每5秒、每2分钟、每小时、每天等等。应当理解的是,以上所述的示例故障条件强度58B和频率仅仅是示例性的,并且可利用其他改变故障条件的强度和频率的方法。 [0026] 在另一个示例中,故障条件实验参数58还包括用于会运行云应用56的节点24的硬件资源的目标硬件配置58C。如图1和图2中所述,遍布硬件平面14的多个节点24的硬件组件可能有所不同。例如,随着时间的过去,可以将其他节点集群添加到云平台22,可除去现有节点集群,可升级现有节点集群,现有节点集群可位于不同位置,等等。跨云平台22的节点 24的不同的硬件组件和地理位置可潜在影响在虚拟机26中运行的云应用56的性能。因此,用户可为其云应用56选择目标硬件配置58C以在故障实验62期间运行。在一个示例中,目标硬件配置58C可以包括位置,例如一个区域或者特定的目标节点集群。作为一些非限制性示例,目标硬件配置58C可包括硬件设备年龄、目标处理器规格、目标GPU规格、共同运行虚拟机26和云应用56的节点的总数、运行云应用56的虚拟机26的总数、虚拟机26类型/规格、存储盘规格等等。应当理解的是,以上所述的目标硬件配置58C仅仅是示例性的,并且可以其他适当的节点特征为目标。 [0027] 如图4中所示,用户界面60可以包括其他用于控制故障实验62的GUI元件。例如,用户界面60可以包括用于启动和停止/暂停故障实验62的启动按钮和停止按钮GUI元件。再如,用户界面60还可以包括日程安排GUI元件,该日程安排GUI元件用于选择要运行故障实验62的日期、星期、月份、当日时间、或其他类型的时间段。 [0028] 返回到图3,用户界面系统52被配置以接收故障条件实验参数58的用户输入。可以将该接收的故障条件实验参数58发送至故障条件控制器64。在一个示例中,用户界面系统 52可以由与云平台核心基础架构50分离的云平台22的计算机系统实现。相似地,故障条件控制器64也可以由与云平台核心基础架构50分离的云平台22的另一计算机系统实现。再如,故障条件控制器64可以实现为部分云平台核心基础架构50。应当理解的是,可以利用任何适当的计算机系统组织和基础架构来执行本文所描述的用户界面系统52和故障条件控制器64的功能。 [0029] 如图3所示,云平台22包括被配置以在云平台22的多个节点中所选节点上生成故障条件的故障条件注入引擎66。故障条件注入引擎66可以包括云平台22的硬件平面14的多个节点24中的每一个上的代理66A,该云平台被配置以在该节点上执行故障条件注入引擎 66的功能。例如,故障条件注入引擎66被配置以生成一个或多个如上文参照图4所述的故障条件。故障条件控制器64被配置以与故障条件注入引擎66的代理66A通信以按照用户输入的故障条件实验参数58执行故障实验62。 [0030] 在一个示例中,在执行故障实验62之前,云平台22将多个节点中的一组节点24A分配给受控沙箱环境,该受控沙箱环境被配置以运行该用户的目标虚拟机26A。为了分配一组节点24A,云平台可以被配置以确定当前未分配给虚拟机平面16的其它虚拟机26的硬件平面14的一个或多个节点24。然后,云平台22可将确定的一个或多个节点24分配给与用户或用户账户相关联的目标虚拟机26A,该用户或用户账户试图在他们的云应用上执行故障实验62。在确定的一个或多个节点24已经被分配给目标虚拟机26A之后,云平台22可以将这些节点配置为受控沙箱环境,该受控沙箱环境被配置以防止与其他用户相关联的其他虚拟机 26在多个节点24中的所分配的一组节点24A上运行。通过防止其他虚拟机26在所分配的一组节点24A上运行,云平台22可以防止由故障条件注入引擎66在所分配的一组节点24A上生成的故障条件无意中影响其他用户的虚拟机26和云应用56。 [0031] 在一个示例中,在为故障实验62分配节点24时,云平台22可以被进一步配置以基于用户在故障条件实验参数58中输入的目标硬件配置58C来分配多个节点24中的一组节点。也就是说,云平台22可以选择硬件平面14的包括硬件配置的一个或多个节点,该硬件配置与目标硬件配置58C匹配或满足阈值匹配程度,该目标硬件配置58C例如可以包括地点,比如区域或特定目标节点集群,硬件设备年龄、目标处理器规格、目标GPU规格,存储盘规格等等。应当理解的是,在分配一组节点期间,云平台22可以被配置以为虚拟机平面16重新分配硬件平面14的多个节点24以释放适当的节点用于分配给目标虚拟机26A。 [0032] 在将一组节点分配给目标虚拟机26A并防止其他虚拟机在所分配的一组节点24A上运行之后,故障条件控制器64可以被配置以基于故障条件实验参数58对故障条件注入引擎66的与所分配的一组节点24A相关联的代理66A进行控制以在所分配的一组节点24A上生成故障条件。故障条件注入引擎66可以被配置以按照经由给用户界面60的用户输入由用户指定的故障条件强度58B和/或故障条件频率执行该故障条件类型58A。应当理解的是,故障条件注入引擎66的代理66A直接在所分配的一组节点24A及其他云平台基础架构上运行,而不仅仅是在目标虚拟机26A中模拟故障条件。 [0033] 例如,为了生成网络中断故障条件,比如丢包故障,故障条件注入引擎66可以被配置以拦截通过管理程序平面18向/从目标虚拟机26A发送的数据包。由于网络数据包在所分配的一组节点24A这一级别被拦截,目标虚拟机26A就像在生产期间会发生的一样经历丢包故障条件。同样地,故障条件注入引擎66可被配置以延迟数据包以引起高延迟故障条件,重排序传入的数据包以引起数据包重排序故障条件,等等。 [0034] 再如,为了生成盘中断故障条件,比如盘断开故障,故障条件注入引擎66可以被配置以防止目标虚拟机26A连接至与目标虚拟机26A相关联的盘存储设备。为了生成数据中断故障条件,故障条件注入引擎66可以被配置以拦截从相关联的盘存储设备发送的网络数据包并向包括损坏格式数据的目标虚拟机26A发送替代网络数据包。 [0035] 应当理解的是,以上所述的生成故障条件的方法仅仅是示例性的,并且故障条件注入引擎66可以在所分配的一组节点24A上执行上文没有特别描述的其他适当的处理,以模拟可在生产期间发生的全范围(full spectrum)故障条件。由于这些故障条件直接在所分配的一组节点24A上生成,因此,从运行于所分配的一组节点24A上的目标虚拟机26A的角度来看,这些故障条件就像生产期间发生的一样。以这种方式,在目标虚拟机26A上运行的云应用56可以用户指定的故障条件强度58B和/或故障条件频率经历各种类型的故障条件 58A。 [0036] 在一个示例中,故障条件注入引擎66进一步包括云平台22的其他基础架构元件上的代理66A。例如,结构控制器86、网络控制器88、存储服务90、网络交换机92和其他云平台设备94可分别包括被配置以在这些基础架构元件上生成故障条件的故障条件的注入引擎代理66A。 [0037] 如图3所示,云平台22可以进一步包括度量收集引擎68,该度量收集引擎68被配置以在故障条件注入引擎66在所分配的一组节点24A上生成故障条件的同时测量针对目标虚拟机26A的一个或多个目标度量70。云平台核心基础架构50的硬件平面14的每个节点24可以包括度量收集引擎68的代理68A,该代理被配置以检测该节点24上的一个或多个目标度量70。在一个示例中,云平台的其他基础架构元件还可以包括度量收集引擎代理68A。例如,结构控制器86、网络控制器88、存储服务90、网络交换机92和其他云平台设备94中的每个可包括度量收集引擎代理68A,该度量收集引擎代理68A被配置以测量故障条件数据76以及一个或多个目标度量70。 [0038] 虚拟机平面16的每个虚拟机26还可以包括度量收集软件开发工具包(SDK)72。使用度量收集SDK72,用户可以将其云应用56配置以在云应用56处检测一个或多个目标度量 70并通过目标虚拟机26A将检测到的一个或多个目标度量70发送给云平台22的数据分析系统74。 [0039] 在图示的示例中,数据分析系统74可以被配置以从故障条件注入引擎66接收故障条件数据76及从度量收集引擎68和目标虚拟机26A接收测量到的目标度量数据78。故障条件数据76可以包括用户输入的故障条件实验参数58及总结由故障条件注入引擎66生成的故障条件的数据。所测量的目标度量数据78可以包括由度量收集引擎68和/或由在目标虚拟机26A内运行的云应用56本身检测的一个或多个目标度量的测量值。例如,云应用56可以被配置以连续测量一个或多个目标度量并将测量到的一个或多个目标度量以度量收集SDK72指定的格式发送至度量收集引擎68。数据分析系统74可以被配置来为目标虚拟机26A收集故障条件数据76和测量到的目标度量数据78,并执行数据分析以生成可经由用户界面系统52呈现给用户的数据分析80。 [0040] 转向图4,来自于用户界面系统52的用户界面60可以被配置以接收所述一个或多个目标度量70的用户输入54。在一个示例中,用户界面60可以为用户提供GUI元件以从目标度量清单中选择一个或多个目标度量70,度量收集引擎68被配置来检测和测量目标度量。 例如,目标度量70可以包括在目标虚拟机26A中运行的云应用56的工作时间(uptime)。再如,目标度量70可以包括在云应用56处发生的数据丢失实例的总数。应当理解的是,上面没有描述的其他适当的目标度量70也可由度量收集引擎68测量并检测。 [0041] 如上所述,用户选择的一个或多个目标度量70可以在故障条件注入引擎66生成所分配的一组节点24A的故障条件时被跟踪并测量。数据分析系统74可以收集测量到的目标度量数据78,并将测量到的目标度量数据78发送给用户界面系统52。如图4所示,用户界面系统52可以被配置以经由在用户计算机设备48的显示器上显示的用户界面60将测量到的一个或多个目标度量78呈现给用户。在一个示例中,测量到的一个或多个目标度量78的原始数据可以被用户经由用户界面60访问。在另一示例中,测量到的一个或多个目标度量78可以被数据分析系统74处理以生成代表测量到的一个或多个目标度量的一个或多个数据可视化82。在此示例中,数据分析系统74可以被配置以确定故障条件数据76和所测量的目标度量78之间的关系,并生成一个或多个数据可视化82以展示所确定的关系。例如,该一个或多个数据可视化82可以展示该一个或多个目标度量是如何被故障条件注入引擎66生成的故障条件所影响的。 [0042] 在一个示例中,用户可经由用户界面系统52的用户界面60选择A/B测试配置。用户可输入要比较的两个变量A和B的用户输入54。用户界面系统62可以被配置以接收A/B测试参数84的用户输入54,该用户输入可以包括用户输入的变量A和变量B。例如,变量A可以包括生成故障条件时的目标虚拟机,并且变量B可以包括未生成故障条件时的目标虚拟机。再如,变量A可以包括生成故障条件时的云应用的第一版本,并且,变量B可以包括生成相同故障条件时的云应用的第二版本。再如,变量A可以包括生成故障条件时的使用云应用的第一组人员,并且,变量B可以包括生成故障条件时的使用云应用的第二组人员。应当理解的是,上文所描述的示例A/B测试参数84仅仅是示例性的,且其他变形配置也可以用于A/B测试。 [0043] 在此示例中,故障条件注入引擎66可以被配置以基于至少用户输入的A/B测试参数70在所分配的一组节点24A上生成故障条件。例如,故障条件控制器64可以被配置以基于A/B测试参数70分配一组节点,并基于A/B测试参数70和故障条件实验参数58指导分配一组节点24A上对应的故障条件注入引擎66代理生成故障条件。度量收集引擎68可以被配置以在执行A/B测试的同时跟踪并测量该一个或多个目标度量70。然后,数据分析系统74可以被配置以产生用于A/B测试的数据分析80并将数据分析80发送给用户界面系统52。 [0044] 在一个示例中,用户界面系统52可以被配置来呈现用于A/B测试的数据分析80。例如,数据分析80可以包括以下项之间的比较:在故障条件注入引擎66在所分配的一组节点 24A上生成故障条件的同时针对目标虚拟机26A而测量的一个或多个目标度量70与在故障条件注入引擎66未生成故障条件的同时针对目标虚拟机26A而测量的一个或多个目标度量 70。例如,度量收集引擎68可以被配置以在所分配的一组节点24A上生成故障条件的同时及在所分配的一组节点24A上未生成故障条件的同时测量一个或多个目标度量70。数据分析系统74可以比较两种情境下测量到的一个或多个目标度量70,并生成代表两种情境下所测量的目标度量78之间的关系的数据可视化82。用户界面系统52可被配置来经由用户界面60向用户显示数据可视化82。 [0045] 使用图3所示的云平台22,用户可以设计故障实验62以测试其云应用56对于生产期间可能发生的全范围故障条件的恢复能力。应当理解的是,这里所描述的故障实验系统及方法在云平台22的节点24和诸如结构控制器86、网络控制器88、存储服务90、网络交换机 92和其他云平台设备94这样的其他云平台基础架构上生成故障条件。以这种方式,所描述的故障实验系统提供准确模拟如同生产期间将发生的故障条件的潜在优势,例如,经由网络控制器88和网络交换机92上的故障条件注入引擎代理66A生成真实的网络故障条件。另外,所描述的故障实验系统不需要在虚拟机26中运行额外的测试二进制文件或其他软件来执行故障实验62,从而最小化由在同一虚拟机中运行的额外软件引入的潜在混杂因素。 [0046] 图5为由计算机系统实施的方法500的流程图。可使用上面所描述的系统或利用其他适当的硬件和软件元件执行方法500。 [0047] 在步骤502中,该方法500可以包括提供包括多个节点的云平台。每个节点可以包括被配置来运行虚拟机的处理器。云平台可以包括被配置来用于在多个节点中的所选节点上生成故障条件的故障条件注入引擎。示例云平台和网络基础架构如图1所示,并形成图3中计算机系统10的云平台核心基础架构50。 [0048] 在步骤504中,该方法500可包括从用户接收故障条件实验参数的用户输入以用于与该用户相关联的目标虚拟机。云平台22的用户界面系统52可为多个不同用户存储用户配置文件。用户配置文件可与在云平台核心基础架构50上运行的虚拟机相关联。通过登入其用户配置文件,用户可定制故障实验以测试其运行于相关联的虚拟机内的云应用的恢复能力,该故障实验可在其相关联的虚拟机中运行。 [0049] 在一个示例中,故障条件实验参数包括故障条件类型。故障条件类型58A可从网络中断故障条件、盘中断故障条件、存储器中断故障条件等之中选择。作为一些额外的非限制性示例,该故障条件类型58A可包括盘断开故障、丢包故障、高延迟故障、数据包重排序故障、数据包定向障碍故障、慢启动故障、会话中止故障、盘写入和/或盘读取故障、数据丢失故障等等。其他类型的故障条件58A如上文参照图4所述。 [0050] 在另一示例中,故障条件实验参数包括故障条件强度。在图4所示的示例中,故障条件强度58B可从低、中或高强度值中选择。例如,针对盘断开类型故障条件的故障条件强度可导致盘断开较长或较短一段时间,其取决于所选择的强度。再如,针对数据损坏类型故障条件的故障条件强度可导致较大量或较小量的数据损坏。故障条件强度的故障条件频率参数可指定故障实验62期间该故障条件类型58A多久发生一次,例如,每5秒、每2分钟、每小时、每天等等。 [0051] 在另一示例中,故障条件实验参数包括目标硬件配置。参考图1和图2所描述的遍布云平台22的节点24不同的硬件组件和地理位置可潜在影响在虚拟机26中运行的云应用 56的性能。在一个示例中,目标硬件配置58C可包括位置,比如区域或特定目标节点集群。作为一些非限制示例,目标硬件配置58C可包括硬件设备年龄、目标处理器规格、目标GPU规格、共同运行虚拟机26和云应用56的节点的总数、运行云应用56的虚拟机26的总数、虚拟机 26类型/规格、存储盘规格等等。 [0052] 在步骤506中,该方法500可以包括接收A/B测试参数的用户输入。A/B测试参数可以包括将要被测试和比较的变量A和变量B。例如,变量A可以包括在生成故障条件的同时的目标虚拟机,并且变量B可以包括在未生成故障条件的同时的目标虚拟机。 [0053] 在步骤508中,该方法500可以包括接收一个或多个目标度量的用户输入。例如,目标度量70可以包括在目标虚拟机26A中运行的云应用56的工作时间。再如,目标度量70可以包括在云应用56处发生的数据丢失实例的总数。 [0054] 在步骤510中,该方法500可以包括将该多个节点中的一组节点分配给受控沙箱环境,该受控沙箱环境被配置以用于运行该用户的目标虚拟机。为了分配一组节点,方法可以包括确定图1所示的当前未分配给虚拟机平面的其它虚拟机的硬件平面的一个或多个节点。云平台可以将确定的一个或多个节点分配给目标虚拟机。在一个示例中,步骤510可以进一步包括基于目标硬件配置分配多个节点中的一组节点。也就是说,该方法可以包括确定图1所示硬件平面的一个或多个节点,该一个或多个节点包括与用户指定的目标硬件配置匹配或具有阈值匹配程度的硬件规格。所确定的一个或多个节点可以作为一组节点进行分配以在用户的目标虚拟机上运行。 [0055] 在步骤512中,该方法500可以包括防止与其他用户相关联的其他虚拟机在多个节点中的所分配的一组节点上运行。通过防止其他虚拟机在所分配的一组节点上运行,该方法500可以防止由故障条件注入引擎在所分配的一组节点上生成的故障条件无意中影响其他用户的虚拟机和云应用。 [0056] 在步骤514中,该方法500可以包括基于故障条件实验参数在所分配的一组节点上生成故障条件。在一个示例中,参见图1和图3,为了生成网络中断故障条件,比如丢包故障,故障条件注入引擎66可以被配置以拦截通过管理程序平面18向/从目标虚拟机26A发送的数据包。由于网络数据包在所分配的一组节点24A这一级别被拦截,目标虚拟机26A就像在生产期间会发生的一样经历丢包故障条件。类似地,故障条件注入引擎66可以被配置以延迟数据包以引起高延迟故障条件,重排序传入的数据包以引起数据包重排序故障条件,等等。在一个示例中,步骤514可以进一步包括基于至少该A/B测试参数在所分配的一组节点上生成故障条件。 [0057] 在步骤516中,该方法500可以包括在所分配的一组节点上生成故障条件的同时测量针对目标虚拟机的一个或多个目标度量。在图3所示的示例中,云平台核心基础架构50的硬件平面14的每个节点24可以包括度量收集引擎68的代理,该代理被配置以检测该节点24上的一个或多个目标度量70。虚拟机平面16的每个虚拟机26还可以包括度量收集软件开发工具包(SDK)72。使用度量收集SDK72,用户可以将其云应用56配置以在云应用56处检测一个或多个目标度量70。度量收集引擎68可以与生成故障条件的故障条件注入引擎66同时测量一个或多个目标度量。 [0058] 在步骤518中,该方法500可以包括向用户呈现测量到的一个或多个目标度量。在A/B测试示例中,步骤518还可以包括呈现以下项之间的比较:在所分配的一组节点上生成故障条件的同时针对目标虚拟机而测量的一个或多个目标度量与在未生成故障条件的同时针对目标虚拟机而测量的一个或多个目标度量。所测量的一个或多个目标度量可以经由用户的计算机设备的显示器上显示的用户界面呈现给用户。在一个示例中,可将测量到的一个或多个目标度量的原始数据呈现给用户。在另一示例中,该方法500可以进一步包括生成所测量到的一个或多个目标度量的数据可视化,并经由显示器将数据可视化呈现给用户。 [0059] 在一些实施例中,本文所描述的方法和过程可以与一个或多个计算设备的计算系统紧密相关。特别是,这样的方法和过程可被实现为计算机应用程序或服务、应用程序设计接口(API)、程序库、和/或其他计算机程序产品。 [0060] 图6示意性地示出了计算系统700的非限制性实施例,该计算系统700能制定上述方法和过程中的一个或多个。以简化形式展示计算系统700。计算系统700可以包括以上所述的计算机系统10及云平台22的每个节点。计算系统700可以采取一个或多个个人计算机、服务器计算机、平板电脑、家庭娱乐计算机、网络计算设备、游戏设备、移动计算设备、移动通信设备(例如,智能电话)、和/或其他计算设备,以及诸如智能腕表和头戴式增强现实设备这样的可穿戴计算设备的形式。 [0061] 计算系统700包括逻辑处理器702、易失性存储器704及非易失性存储设备706。可选地,计算系统700可以包括显示子系统708、输入子系统710、通信子系统712、和/或图6中未显示的其他组件。 [0062] 逻辑处理器702包括一个或多个被配置以执行指令的物理设备。例如,逻辑处理器可以被配置以执行指令,该指令为一个或多个应用程序、程序、例行程序、程序库、对象、组件、数据结构、或其他逻辑构造的一部分。可实施这样的指令以执行任务、实现数据类型、变换一个或多个组件的状态、实现技术效果、或以其他方式达到预期的效果。 [0063] 逻辑处理器可以包括被配置以执行软件指令的一个或多个物理处理器(硬件)。附加地或可替代地,逻辑处理器可以包括一个或多个被配置以执行硬件实现的逻辑或固件指令的硬件逻辑电路或固件设备。逻辑处理器702的处理器可以为单核处理器或多核处理器,并且在其上执行的指令可以被配置以用于顺序、平行和/或分布式处理。可选地,逻辑处理器的单个组件可以分布在两个或更多单独设备之中,这些设备可以被远程定位和/或被配置以用于协同处理。逻辑处理器的要素(aspect)可以被虚拟化并被配置由云计算配置中的远程可访问网络化计算设备执行。在这种情况下,将被理解的是这些虚拟化的要素在各种不同的机器的不同物理逻辑处理器上运行。 [0064] 非易失性存储设备706包括一个或多个物理设备,该物理设备被配置以保存可被逻辑处理器执行以实现本文所述的方法和过程的指令。当实施这样的方法和过程时,可变换非易失性存储设备704的状态,例如,以保存不同数据。 [0065] 非易失性存储设备706可以包括可移除和/或内置的物理设备。非易失性存储设备 704可以包括光学存储器(例如,CD、DVD、HD-DVD、Blu-Ray Disc等)、半导体存储器(例如,ROM、EPROM、EEPROM、FLASH存储器等)和/或磁存储器(例如,硬盘驱动器、软盘驱动器、磁带驱动器、MRAM等),或其他大容量存储设备技术。非易失性存储设备706可以包括非易失性的、动态的、静态的、读/写、只读、顺序存取、位置可寻址的、文件可寻址的和/或内容可寻址的设备。将被意识到,非易失性存储设备706被配置以即使在非易失性存储设备706断电时也保存指令。 [0066] 易失性存储器704可以包括包含随机访问存储器的物理设备。易失性存储器704通常被逻辑处理器702用于软件指令处理期间暂存信息。将被意识到,当易失性存储器704断电时,易失性存储器704通常不继续存储指令。 [0067] 逻辑处理器702,易失性存储器704和非易失性存储设备706的要素可被一起整合成一个或多个硬件逻辑组件。这样的硬件逻辑组件可以包括例如现场可编程门阵列(FPGAs)、特定程序和应用集成电路(PASIC/ASICs)、特定程序和应用标准产品(PSSP/ASSPs)、片上系统(SOC)、以及复杂可编程逻辑器件(CPLDs)。 [0068] 术语“模块”、“程序”和“引擎”可用于描述计算系统700的要素,该要素通常由处理器在软件中实施以使用部分易失性存储器执行特定功能,该功能包含将处理器专门配置以执行该功能的转换处理。因此,可使用部分易失性存储器704,经由执行被非易失性存储设备706保存的指令的逻辑处理器702来实例化模块、程序或引擎。可以理解的是,可从同一个应用程序、服务、代码块、对象、程序库、例行程序、API、功能等实例化不同的模块、程序和/或引擎。同样地,可由不同的应用程序、服务、代码块、对象、例行程序、APIs、功能等实例化同一个模块、程序和/或引擎。术语“模块”、“程序”和“引擎”可包含个别的或成组的可执行文件、数据文件、程序库、驱动器、脚本、数据库记录等。 [0069] 当被包含时,显示子系统708可用于呈现由非易失性存储设备706保存的数据的视觉表示。该视觉表示可采取图形用户界面(GUI)的形式。当本文所描述的方法和过程改变了由非易失性存储设备保存的数据,并因此变换了非易失性存储设备的状态时,显示子系统 708的状态也同样被变换以视觉上呈现底层数据中的变化。显示子系统708可包括一个或多个实际上利用任何类型技术的显示设备。这样的显示设备可在共享外壳中与逻辑处理器 702和/或非易失性存储设备706结合,或这样的显示设备可以是外围显示设备。 [0070] 当被包含时,输入子系统710可以包括一个或多个用户输入设备,例如键盘、鼠标、触摸屏或游戏控制器,或与这样的一个或多个用户输入设备交互。在一些实施例中,输入子系统可包括选定的自然用户输入(NUI)元件部分,或与这样的自然用户输入元件部分交互。 这样的元件部分可以是集成的或外围的,且输入动作的转导和/处理可板上或离板处理。示例NUI元件部分可以包括:用于说话和/或语音识别的麦克风;用于机器视觉和/或手势识别的红外、彩色、立体和/或深度相机;用于运动检测和/或意图识别的头部跟踪器、眼部跟踪器、加速度计和/或陀螺仪;以及用于评估脑部活动的电场传感元件部分;和/或任何其他适当的传感器。 [0071] 当被包含时,通信子系统712可以被配置以将本文描述的各种计算设备彼此及与其他设备交流式耦合。通信子系统712可以包括与一个或多个不同通信协议兼容的有线和/或无线通信设备。作为非限制性示例,通信子系统可以被配置以用于经由诸如越过Wi-Fi连接的HDMI的无线电话网络或有线或无线局域或广域网络进行通信。在一些实施例中,通信子系统可允许计算系统700经由诸如因特网这样的网络将消息发送给其他设备和/或从其他设备接收消息。 [0072] 以下段落为本主题申请的权利要求提供额外支持。一方面提供了一种计算机系统,其包括具有多个节点的云平台。每个节点包括被配置以运行虚拟机的处理器。该云平台包括被配置以在多个节点中的所选节点上生成故障条件的故障条件注入引擎。该计算机系统进一步包括用户界面系统,该用户界面系统被配置以从用户接收故障条件实验参数的用户输入用于与该用户相关联的目标虚拟机。该云平台将该多个节点中的一组节点分配给受控沙箱环境,该受控沙箱环境被配置以运行该用户的目标虚拟机。该故障条件注入引擎基于故障条件实验参数在所分配的一组节点上生成故障条件。在这方面,附加地或可替代地,云平台可被配置以防止与其他用户相关联的其他虚拟机在多个节点中的所分配的一组节点上运行。在这方面,附加地或可替代地,该故障条件实验参数可包括故障条件的类型。在这方面,附加地或可替代地,该故障条件类型可选自由网络中断故障条件、盘中断故障条件及存储器中断故障条件所组成的组。在这方面,附加地或可替代地,该故障条件实验参数可包括目标硬件配置,且该云平台可被配置以基于该目标硬件配置分配多个节点中的一组节点。在这方面,附加地或可替代地,故障条件实验参数可包括故障条件强度。在这方面,附加地或可替代地,该用户界面系统可进一步被配置以接收一个或多个目标度量的用户输入。 该云平台可包括度量收集引擎,该度量收集引擎被配置以在故障条件注入引擎在所分配的一组节点上生成故障条件的同时测量针对目标虚拟机的一个或多个目标度量。该用户界面系统可被配置以向用户呈现所测量的一个或多个目标度量。在这方面,附加地或可替代地,该用户界面系统可进一步被配置以接收A/B测试参数的用户输入。该故障条件注入引擎被配置以基于至少该A/B测试参数在所分配的一组节点上生成故障条件。在这方面,附加地或可替代地,该用户界面系统可被配置以呈现以下项之间的比较:在故障条件注入引擎在所分配的一组节点上生成故障条件的同时针对目标虚拟机而测量的一个或多个目标度量与在故障条件注入引擎未生成故障条件的同时针对目标虚拟机而测量的一个或多个目标度量。 [0073] 另一方面提供了包括提供云平台的方法,该云平台包括多个节点。每个节点包括被配置用于运行虚拟机的处理器。该云平台包括被配置用于在该多个节点中所选节点上生成故障条件的故障条件注入引擎。该方法进一步包括:从用户接收故障条件实验参数的用户输入用于与该用户相关联的目标虚拟机;将该多个节点中的一组节点分配给受控沙箱环境,该受控沙箱环境被配置以用于运行该用户的目标虚拟机;及基于故障条件实验参数在所分配的一组节点上生成故障条件。在这方面,附加地或可替代地,该方法可进一步包括防止与其他用户相关联的其他虚拟机在该多个节点中的所分配的一组节点上运行。在这方面,附加地或可替代地,该故障条件实验参数可包括故障条件类型。在这方面,附加地或可替代地,该故障条件类型可选自由网络中断故障条件、盘中断故障条件及存储器中断故障条件所组成的组。在这方面,附加地或可替代地,该故障条件实验参数可包括目标硬件配置,且该方法可进一步包括基于该目标硬件配置分配该多个节点中的一组节点。在这方面,附加地或可替代地,该故障条件实验参数可包括故障条件强度。在这方面,附加地或可替代地,该方法可进一步包括:接收一个或多个目标度量的用户输入,在分配的一组节点上生成故障条件的同时,测量针对目标虚拟机的一个或多个目标度量,及向用户呈现所测量的一个或多个目标度量。在这方面,附加地或可替代地,该方法可进一步包括接收A/B测试参数的用户输入,并基于至少该A/B测试参数在所分配的一组节点上生成故障条件。在这方面,附加地或可替代地,该方法可进一步包括呈现以下项之间的比较:在所分配的一组节点上生成故障条件的同时针对目标虚拟机而测量的一个或多个目标度量与在未生成故障条件的同时针对目标虚拟机而测量的一个或多个目标度量。 [0074] 另一方面提供了包括处理器的计算机系统,该处理器被配置以呈现用户界面,该用户界面用于与运行于云平台的节点上的目标虚拟机相关联的用户账户,该云平台包括多个节点。云平台包括被配置以在多个节点中所选节点上生成故障条件的故障条件注入引擎。处理器被进一步配置以从用户账户的用户处接收故障条件实验参数的用户输入用于目标虚拟机,并将故障条件实验参数发送给云平台,使得云平台为受控沙箱环境分配多个节点中的一组节点,该受控沙箱环境被配置以运行用户的目标虚拟机并基于故障条件实验参数在所分配的一组节点上生成故障条件。在这方面,附加地或可替代地,处理器可被进一步配置以:从用户账户的用户处接收一个或多个目标度量,将该一个或多个目标度量发送给云平台,以使得在故障条件注入引擎在所分配的一组节点上生成故障条件的同时云平台测量针对目标虚拟机的一个或多个目标度量,从云平台接收所测量的一个或多个度量,及将所测量的一个或多个目标度量呈现给用户。 [0075] 应该理解的是,本文所描述的配置和/或方法实际上是示例性的,并且这些具体实施例或示例不应被视为是限制性的,因为可能有许多变化。本文描述的具体例行程序或方法可代表任何数量的处理策略中的一个或多个。可按照所展示和/或描述的顺序、其他顺序、并行地或省略地执行所展示和/或描述的各种动作。同样地,可改变以上所述过程的顺序。 [0076] 本公开的主题包括本文所公开的各种过程、系统和配置的所有新颖和非显而易见的组合和子组合及其他特征、功能、动作和/或性能,以及其任何和所有等同形式。