自动化实验平台的制作方法

文档序号:10475891阅读:441来源:国知局
自动化实验平台的制作方法
【专利摘要】本文档针对提供允许用户构建和执行各种类型数据驱动工作流的可视集成开发环境(“IDE”)的自动化实验平台。自动化实验平台包括后端组件,其包括API服务器、目录、集群管理组件以及执行集群节点。工作流可视地表示为有向无环图并被以文本方式编码。工作流被变换成为了执行而被分发到执行集群节点的作业。
【专利说明】自动化实验平台
[0001]对相关申请的交叉引用
[0002]本申请要求于2013年12月17日提交的临时申请N0.61/916,888的权益。
技术领域
[0003]本文档涉及计算机化的系统并且,更具体而言,涉及提供允许用户构建和执行数据驱动的工作流的可视集成开发环境的自动化实验平台。
【背景技术】
[0004]在过去的60年里,数据处理已经从很大程度上依靠使用基本操作系统功能和手工编码的数据处理例程的特设程序演变到庞大的各种不同类型的更高级自动化数据处理环境,包括与数据库管理系统关联的各种通用数据处理应用和实用程序及工具。但是,这些自动化数据处理系统当中许多与显著的约束关联,包括关于数据处理过程、数据模型、数据类型的约束,以及其它此类约束。而且,大多数自动化系统仍然涉及大量特定于问题的编码来指定将数据指向与特定接口关联的特定类型功能所需的数据处理步骤以及数据变换。其结果是,设计和开发数据处理系统和工具的那些人以及使用它们的那些人继续寻求新的数据处理系统和功能。

【发明内容】

[0005]本文档针对提供允许用户构建和执行各种类型数据驱动的工作流的可视集成开发环境(“IDE”)的自动化实验平台。自动化实验平台包括后端组件,包括API服务器、目录、集群管理组件以及执行集群节点。工作流可视地表示为有向无环图并被以文本方式编码。工作流被变换成为了执行而被分发到执行集群节点的作业。
【附图说明】
[0006]图1示出了由当前公开的自动化实验平台的用户创建的示例工作流。
[0007]图2示出了,在图1所示的实验运行之后,用户可以如何通过用新的输入数据集202替换图1中的输入数据集102来修改实验。
[0008]图3示出了图2中所示的第二工作流的仪表板视图。
[0009]图4提供了用于各种类型计算机的一般体系架构图。
[0010]图5示出了互联网连接的分布式计算机系统。
[0011]图6示出了云计算。
[0012]图7示出了通用计算机系统的一般化的硬件和软件组件,其中计算机系统诸如具有类似于图1所示的体系架构的通用计算机系统。
[0013]图8A-B示出了两种类型的虚拟机和虚拟机执行环境。
[0014]图9示出了客户端和服务器计算机之间的电子通信。
[0015]图10示出了资源在RESTful API中的角色。
[0016]图1lA-D示出了由在RESTful应用中使用的HTTP应用层协议提供的四个基本动词,或操作。
[0017]图12示出了当前文档针对的科学工作流系统的主要组件。
[0018]图13A-E示出了相对简单的六节点实验DAG的JSON编码。
[0019]图14A-D示出了被存储在目录服务(图12中的1226)中的元数据。
[0020]图15A-1提供了对应于实验DAG的实验布局的DAG的例子,其中实验DAG诸如上面参考图13C-D所讨论的实验DAG。
[0021]图16A-1示出了科学工作流系统内的实验设计和执行的过程。
[0022]图17A-B示出了实验DAG的样本可视表示和实验DAG的对应JSON编码。
[0023]图18A-G示出了在提交实验以供由用户经由前端实验仪表板应用执行之后由科学工作流系统后端的API服务器组件(图16A中的1608)执行的活动。
[0024]图19提供了用于在科学工作流系统后端的集群管理器组件上执行以便向执行集群节点分发作业以供执行的例程“集群管理器”的控制流程图。
[0025]图20提供了用于例程“pinger”的控制流程图。
[0026]图21提供了用于在执行集群节点上启动作业执行的例程“执行器”的控制流程图。
【具体实施方式】
[0027]本文档针对允许用户进行数据驱动的实验的自动化实验平台。实验是复杂的计算任务,并且由用户通过可视IDE组装成工作流。一般而言,在这种可视IDE和自动化实验平台底层的模型包括三个基本实体:(I)输入数据集;(2)生成的数据集,包括中间和输出数据集;和(3)具有配置的执行模块。一旦工作流被图形构建,自动化实验平台就执行该工作流并产生输出数据集。配置好的执行模块被实验的运行时实例转换成作业。这些作业被自动化实验平台执行和监视,并且可以在其中结合自动化实验平台的相同计算机系统上本地执行,或者在远程计算机系统上远程执行。换句话说,工作流的执行可以映射到分布式计算组件。在某些实现中,自动化实验平台本身跨多个计算机系统分布。自动化实验平台可以并行地运行多个作业和多个工作流,并且包括当所需的数据集已经由自动化实验平台生成并编目的时候用于避免数据集的冗余生成和作业的冗余执行的复杂逻辑。
[0028]执行模块可以用非常多各种各样不同的语言当中任何一种编写,所述语言包括Python、Java、hive、MySQL、scala、spark,及其它编程语言。自动化实验平台自动处理用于将数据输入到各种类型执行模块所需的数据变换。自动化执行平台还附加地包括版本化组件,其识别和编目被实现为工作流的实验的不同版本、执行模块和数据集,使得实验的整个历史可以被用户访问以供重新使用和重新执行,以及用于基于先前的实验、执行模块和数据集建立新的实验。
[0029]自动化实验平台提供允许用户从本地机器上传和到本地机器下载执行模块以及从本地机器上传和到本地机器下载输入、中间和输出数据集的仪表板能力。此外,用户可以通过名称、通过用于与执行模块和用户数据集关联的一个或多个属性的值以及通过描述来搜索执行模块和数据集。现有的工作流可被克隆并且现有的工作流的部分可被提取和修改,以便创造用于新实验的新工作流。由自动化实验平台提供的可视工作流创建设施通过允许用户快速设计和执行复杂的数据驱动处理任务而大大提高了用户的工作效率。此外,因为自动化实验平台可以识别执行的潜在重复和重复的数据,所以相对于手工编码或不太智能的自动数据处理系统获得了显著的计算效率。此外,自动化实验平台允许用户作为团队进行合作,以发布、共享和协作创建实验、工作流、数据集和执行模块。
[0030]图1示出了由当前公开的自动化实验平台的用户创建的示例工作流。图1和下面讨论的图2-3将工作流示为将通过由自动化实验平台提供的可视IDE的图形用户界面显示给用户的工作流。在图1中,工作流100包括两个输入数据集102和104。第一输入数据集102被输入到第一执行模块106,在图不的例子中,第一执行模块106产生由Monte-Car1模拟的结果集组成的中间数据集,由圆圈108表示。然后,中间数据集108被输入到产生输出数据集112的第二执行模块110。第二数据集104由生成第二中间数据集116的第三执行模块114处理,在这种情况下,第二中间数据集116是继续非常大量的Monte-Carlo模拟的结果的大文件。第二中间数据集116与输入数据集102—起被输入到执行模块106。
[0031]如图2中所示,在图1中所示的实验运行之后,用户可以通过用新的输入数据集202替换图1中的输入数据集102来修改实验。然后,用户可以执行新的工作流,以产生新的输出数据集204。在这种情况下,因为对第二输入数据集104和第三执行模块114没有改变,所以第二工作流的执行不涉及第二输入数据集104到第三执行模块114的重新输入以及第三执行模块114的执行。相反,之前通过第三执行模块的执行所产生的中间数据集116可以在图2所示的第二工作流的运行期间从先前产生的中间数据集的目录中检索并被输入到第二执行模块106。应当指出,三个执行模块106、110和114可以已经用不同的语言进行编程并且可以在不同的物理计算机系统上运行。还应当指出,自动化实验平台负责确定输入数据集102和104的类型并且确保,在必要时,这些数据集被适当地修改,以便具有它们在工作流的执行期间要输入到其中的执行模块106和114所需的适当格式和数据类型。
[0032]图3示出了图2中所示的第二工作流的仪表板视图。如在图3中可以看到的,工作流在工作流显示面板302中被可视地显示给用户。此外,仪表板提供具有对应输入和操纵特征304-308的各种工具以及显示与由用户利用输入和操纵特征执行的各种任务和操作相关的信息的附加显示窗口 310和312。
[0033]在以下两个小节中,给出了在本文档针对的自动化实验平台的所述实现中使用的硬件平台和RESTful通信的概述。最后一个小节描述本文档针对的自动化实验平台的实现,被称为“科学工作流系统”。
[0034]计算机硬件、分布式计算系统和虚拟化
[0035]术语“抽象”不是要以任何方式意在表示或暗示抽象的构思或概念。计算抽象是最终利用物理计算机硬件、数据存储设备和通信系统实现的有形的物理接口。相反,在目前的讨论中,术语“抽象”是指封装在一个或多个具体的、有形的、物理实现的计算机系统中的功能的逻辑层面,具有既定的接口,通过这些接口,电子编码的数据被交换、过程执行被启动,并且电子服务被提供。接口可以包括在物理显示设备上显示的图形和文本数据以及控制物理计算机处理器执行各种任务和操作并通过以电子方式实现的应用编程接口( “API”)和其它以电子方式实现的接口调用的计算机程序和例程。在那些不熟悉现代技术和科学的人当中,当被用来描述现代计算的某些方面时,存在误解术语“抽象的”和“抽象”的趋势。例如,常常遇到以下断言:由于计算系统就抽象、功能层和接口进行描述,计算系统与物理机器或设备稍有不同。这种断言是毫无根据的。只需要将计算机系统或计算机系统组与它们各自的电源断开,以体会复杂计算机技术的物理、机器本质。还会频繁地遇到将计算技术表征为“纯软件”并且因此不是机器或设备的陈述。软件本质上是编码符号的序列,诸如计算机程序的打印输出或顺序地存储在光盘上或机电大容量存储设备内的文件中的数字编码的计算机指令。软件独自什么也做不了。只有当编码的计算机指令被加载到计算机系统内的电子存储器中并在物理处理器上执行时,才提供所谓“软件实现的”功能。数字编码的计算机指令是处理器控制的机器和设备的基本和物理的控制组件,不比内燃机中凸轮轴控制系统更不基本和物理。多云聚合、云计算服务、虚拟机容器和虚拟机、通信接口以及下面讨论的许多其它议题是物理、光-电-机械计算机系统的有形的物理组件。
[0036]图4提供了用于各种类型的计算机的一般体系架构图。例如,云计算设施内的计算机可以由图4中所示的一般体系架构图来描述。计算机系统包含一个或多个中央处理单元(“CPU”)402-405、通过CPU/存储器子系统总线410或多个总线与CPU互连的一个或多个电子存储器408、将CPU/存储器子系统总线410与附加总线414和416互连的第一桥412,或者其它类型的高速互连介质,包括多个高速串行互连。这些总线或串行互连又将CHJ和存储器与专用处理器,诸如图形处理器418,并与一个或多个附加桥420互连,其中附加桥与高速串行链路或与多个控制器422-427,诸如控制器427,互连,其中控制器提供对各种不同类型的大容量存储设备428、电子显示器、输入设备以及其它此类组件、子组件和计算资源的访问。应当指出,计算机可读数据存储设备包括光和电磁磁盘、电子存储器和其它物理数据存储设备。那些熟悉现代科学和技术的人可以认识到,电磁辐射和传播信号不存储用于随后检索的数据,并且可以片刻“存储”每英里仅一个字节或更少的信息,这远少于即使编码最简单的例程所需要的信息。
[0037]当然,存在在包括不同类型的分层高速缓冲存储器在内的不同存储器的数量、处理器的数量和处理器的与其它系统组件的连接性、内部通信总线和串行链路的数量方面以及以许多其它方式彼此不同的许多不同类型的计算机系统体系架构。但是,计算机系统一般通过从存储器获取指令并在一个或多个处理器中执行指令来执行所存储的程序。计算机系统包括通用计算机系统,诸如个人计算机(“PC”),各种类型的服务器和工作站,以及更高端的大型计算机,但是也可以包括许多各种类型的特殊用途计算设备,包括数据存储系统、通信路由器、网络节点、平板计算机,以及移动电话。
[0038]图5示出了互联网连接的分布式计算机系统。随着通信和联网技术的能力和可访问性的演进,并且随着各种类型的计算机系统的计算带宽、数据存储能力以及其它能力和容量稳步快速地增加,许多现代计算现在一般涉及通过本地网络、广域网、无线通信和互联网互连的大型分布式系统和计算机。图5示出了典型的分布式系统,其中大量的PC 502-505、具有大数据存储系统512的高端分布式大型机系统510以及具有大量机架式服务器或刀片服务器的大型计算机中心514都通过一起构成互联网516的各种通信和联网系统互连。这种分布式计算系统提供功能的多样化阵列。例如,坐在家里办公室的PC用户可以访问由世界各地成数十万不同的Web服务器提供的数亿不同的网站,并且可以从用于运行复杂的计算任务的远程计算机设施访问高计算带宽计算服务。
[0039]图6示出了云计算。在最近开发出的云计算范例中,计算周期和数据存储设施由云计算提供商提供给组织和个人。此外,更大的组织可以选择建立私有云计算设施来补充或代替对由公共云计算服务提供商提供的计算服务的订阅。在图6中,组织的系统管理员,利用PC602,通过本地网络606和私有云接口 608访问组织的私有云604,并且还,通过互联网610,通过公共云服务接口 614访问公共云612。管理员可以在私有云604或公共云612任一情况下配置虚拟计算机系统以及甚至整个虚拟数据中心并且在虚拟计算机系统和虚拟数据中心上启动应用程序的执行,以便执行许多不同类型的计算任务当中任何一种。作为一个例子,小组织可以在公共云中配置和运行执行Web服务器以便通过公共云向组织的远程客户,诸如在远程用户系统616上观看该组织的电子商务网页的用户,提供电子商务接口的虚拟数据中心。
[0040]云计算设施意在提供计算带宽和数据存储服务,非常像公用事业公司为消费者提供电力和水。云计算为没有资源去购买、管理和维护内部数据中心的小组织提供巨大的优势。这种组织可以动态地从它们在公共云中的虚拟数据中心添加和删除虚拟计算机系统,以便跟踪计算带宽和数据存储需求,而不是购买物理数据中心内的足够多计算机系统来处理峰值计算带宽和数据存储需求。而且,小组织可以完全避免维护和管理物理计算机系统的开销,包括招聘并定期再培训信息技术专家并且不断地为操作系统和数据库管理系统升级付费。此外,云计算接口允许虚拟计算设施的容易和简单的配置、可配置的应用和操作系统的类型的灵活性,以及对甚至由单个组织使用的私有云计算设施的所有者和管理员有用的其它功能。
[0041]图7示出了通用计算机系统的一般化硬件和软件组件,其中计算机系统诸如具有类似于图1所示的体系架构的通用计算机系统。计算机系统700常常被认为包括三个基础层:(I)硬件层或级702; (2)操作系统层或级704;及(3)应用程序层或级706。硬件层702包括一个或多个处理器708、系统存储器710、各种不同类型的输入-输出(“I/O”)设备710和712,以及大容量存储设备714。当然,硬件级还包括许多其它组件,包括电源、内部通信链路和总线、专用集成电路、许多不同类型的处理器控制的或微处理器控制的外围设备和控制器,以及许多其它组件。操作系统704通过低级操作系统和硬件接口 716接口到硬件级702,其中该接口 716—般包括一组非特权计算机指令718、一组特权计算机指令720、一组非特权寄存器和存储器地址722,以及一组特权寄存器和存储器地址724。一般而言,操作系统暴露非特权指令、非特权寄存器和非特权存储器地址726以及系统调用接口 728,作为到应用程序732-736的操作系统接口 730,其中应用程序732-736在由操作系统提供给应用程序的执行环境中执行。操作系统独自访问特权指令、特权寄存器和特权存储器地址。通过保留对特权指令、特权寄存器和特权存储器地址的访问,操作系统可以确保应用程序和其它更高级的计算实体不能干扰彼此的执行并且不能以有害地影响系统运行的方式改变计算机系统的整体状态。操作系统包括许多内部组件和模块,包括调度器742、存储器管理744、文件系统746、设备驱动器748,以及许多其它组件和模块。在一定程度上,现代操作系统提供在硬件级之上的众多抽象级,包括虚拟存储器,其向每个应用程序和其它计算实体提供由操作系统映射到各种电子存储器和大容量存储设备的单独的、大的线性存储器地址空间。调度器编排各种不同应用程序和更高级的计算实体的交叉执行,向每个应用程序提供完全致力于该应用程序的虚拟的、独立的系统。从应用程序的观点来看,应用程序连续执行,而无需考虑与其它应用程序和更高级的计算实体共享处理器资源和其它系统资源。设备驱动器抽象硬件组件操作的细节,从而允许应用程序采用系统调用接口来向通信网络、大容量存储设备以及其它I/O设备和子系统发送和从其接收数据。文件系统736促进大容量存储设备和存储器资源作为高级、易于访问的文件系统接口的抽象。因此,操作系统的发展和演进导致一类用于应用程序和其它更高级的计算实体的多方位虚拟执行环境的产生。
[0042]虽然由操作系统提供的执行环境已被证明是计算机系统内极其成功的抽象级,但操作系统提供的抽象级仍然与应用程序和其它更高级的计算实体的开发者和用户的困难和挑战关联。一个困难来自存在许多在各种不同类型的计算机硬件中运行的不同操作系统的事实。在许多情况下,流行的应用程序和计算系统被开发为仅在可用操作系统的子集上运行,并且因此可以仅在操作系统被设计为在其上运行的各种不同类型的计算机系统的子集内执行。通常,即使当应用程序或其它计算系统被移植到附加的操作系统时,该应用程序或其它计算系统也仍然可以在该应用程序或其它计算系统最初针对的操作系统上更高效地运行。另一个困难来自计算机系统的日益分散的本质。虽然分布式操作系统是相当多研究和开发工作的主题,但是许多流行的操作系统主要被设计为在单个计算机系统上执行。在许多情况下,难以为了高可用性、容错和负载平衡目的而实时地在分布式计算机系统的不同计算机系统之间移动应用程序。在包括运行不同类型操作系统的不同类型硬件和设备的异构分布式计算机系统中,问题甚至更大。操作系统继续演进,作为其结果,某些较旧的应用程序和其它计算实体可能与它们针对的操作系统的较新版本不兼容,从而造成在大型分布式系统中特别难以管理的兼容性问题。
[0043]出于所有这些原因,更高的抽象级,称为“虚拟机”,已被开发和演进,以进一步抽象计算机硬件,以便解决与传统计算系统关联的许多困难和挑战,包括以上讨论的兼容性问题。图8A-B示出了两种类型的虚拟机和虚拟机执行环境。图8A-B使用如图7中所使用的相同图示约定。图8A示出了第一种类型的虚拟化。图8A中的计算机系统800包括与图7所示的硬件层702相同的硬件层802。但是,不是像图7中那样在硬件层之上直接提供操作系统层,图8A中所示的虚拟化计算环境特征在于虚拟化层804,该虚拟化层804通过虚拟化层/硬件层接口 806,其相当于图7中的接口 716,接口到硬件。虚拟化层向多个虚拟机,诸如虚拟机810,提供像硬件的接口 808,在虚拟机层812中的虚拟化层之上执行。每个虚拟机包括与操作系统一起打包的一个或多个应用程序或其它更高级的计算实体,称为“客人操作系统”,诸如在虚拟机810中一起打包的应用814和客人操作系统816。因此,每个虚拟机等效于图7中所示的通用计算机系统中的操作系统层704和应用程序层706。虚拟机中的每个客人操作系统接口到虚拟化层接口 808,而不是接口到实际的硬件接口 806。虚拟化层将硬件资源分区到虚拟机中的每个客人操作系统与其接口的抽象虚拟硬件层。虚拟机中的客人操作系统一般意识不到虚拟化层并且就好像它们在直接访问真正的硬件接口那样操作。虚拟化层确保当前在虚拟环境中执行的每个虚拟机接收底层硬件资源的公平分配并且所有虚拟机都接收继续执行的足够资源。虚拟化层接口 808可以对不同的客人操作系统有所不同。例如,虚拟化层一般能够对各种不同类型的计算机硬件提供虚拟硬件接口。作为一个例子,这允许包括为特定计算机体系架构设计的客人操作系统的虚拟机在不同体系架构的硬件上运行。虚拟机的数量不必等于物理处理器的数量或者甚至是处理器数量的倍数。
[0044]虚拟化层包括虚拟机监视器模块818( “VMM”),该模块虚拟化硬件层中的物理处理器,以创建每个虚拟机在其上执行的虚拟处理器。对于执行效率,虚拟化层尝试允许虚拟机直接执行非特权指令并直接访问非特权寄存器和存储器。但是,当虚拟机内的客人操作系统通过虚拟化层接口 808访问虚拟特权指令、虚拟特权寄存器和虚拟特权存储器时,该访问导致虚拟化层代码的执行,以模拟或仿效特权资源。虚拟化层附加地包括代表执行虚拟机(“VM内核”)管理存储器、通信和数据存储机器资源的内核模块820 ο例如,VM内核在每个虚拟机上维护影子页表,使得硬件级虚拟存储器设施可被用来处理存储器访问。VM内核附加地包括实现虚拟通信和数据存储设备的例程,以及直接控制底层硬件通信的操作的设备驱动器和数据存储设备。类似地,VM内核虚拟化各种其它类型的I/O设备,包括键盘、光盘驱动器,以及其它此类设备。虚拟化层基本上调度虚拟机的执行,非常像操作系统调度应用程序的执行,使得每个虚拟机在完整和功能齐全的虚拟硬件层中执行。
[0045]图SB示出了第二种类型的虚拟化。在图SB中,计算机系统840包括与图7中所示的硬件层702相同的硬件层842和软件层844。若干应用程序846和848被示为在由操作系统提供的执行环境中运行。此外,虚拟化层850也在计算机840中提供,但是,不像参考图8A讨论的虚拟化层804,虚拟化层850层叠在操作系统844之上,被称为“主机OS”,并且使用操作系统接口来访问操作系统提供的功能以及硬件。虚拟化层850主要包括VMM和像硬件的接口852,类似于图8A中像硬件的接口 808。等同于图7中的接口 716的虚拟化层/硬件层接口 852为多个虚拟机856-858提供执行环境,每个虚拟机包括与客人操作系统一起打包的一个或多个应用程序或其它更高级的计算实体。
[0046]在图8A-B中,为了说明的清晰,层被略微简化。例如,虚拟化层850的部分可以驻留在主机操作系统内核之内,诸如结合到主机操作系统中以促进由虚拟化层进行硬件访问的专门的驱动器。
[0047]应当指出,虚拟硬件层、虚拟化层和客人操作系统全都是由存储在物理数据存储设备,包括电子存储器、大容量存储设备、光盘、磁盘和其它此类设备,当中的计算机指令实现的物理实体。术语“虚拟”不以任何方式暗示虚拟硬件层、虚拟化层和客人操作系统是抽象的或无形的。虚拟硬件层、虚拟化层和客人操作系统在物理计算机系统的物理处理器上执行并且控制物理计算机系统的操作,包括改变物理设备的物理状态的操作,其中物理设备包括电子存储器和大容量存储设备。它们就像计算机系统的任何其它组件一样是物理的和有形的,诸如电源、控制器、处理器、总线和数据存储设备。
[0048]RESTful API
[0049]计算机系统之间的电子通信一般包括从客户端计算机发送到服务器计算机和从服务器计算机发送到客户计算机的信息的分组,被称为数据报。在许多情况下,计算机系统之间的通信通常是从使用应用层协议进行信息传送的相对高级的应用程序来查看的。但是,应用层协议在包括传输层、互联网层和链路层的附加层之上实现。这些层通常在计算机系统内的不同级别实现。每个层与用于计算机系统的对应层之间的数据传送的协议关联。这些协议层通常被称为“协议栈”。在图9中,公共协议栈930的表示在互连的服务器和客户端计算机904和902下面示出。层与层号关联,诸如层号“1”932与应用层934关联。这些相同的层号在客户端计算机902与服务器计算机904的互连的描述中被使用,诸如层号“1”932与水平虚线936关联,其中水平虚线936表示客户端计算机的应用层912通过应用层协议与服务器计算机的应用/服务层914的互连。虚线936表示经由图9中的应用层协议的互连,因为这种互连是逻辑的,而不是物理的。虚线938表示客户端和服务器计算机的操作系统层经由传输层的逻辑互连。虚线940表示两个计算机系统的操作系统经由互联网层协议的逻辑互连。最后,链路906和908和云910—起表示从客户端计算机向服务器计算机和从服务器计算机向客户端计算机物理地传送数据的物理通信介质和组件。这些物理通信组件和介质根据链路层协议传送数据。在图9中,与示出协议栈的表930对齐的第二个表942包括可被用于每个不同的协议层的示例协议。超文本传输协议(“HTTP”)可被用作应用层协议944,传输控制协议(“TCP”)946可被用作传输层协议,互联网协议948( “IP”)可被用作互联网层协议,并且,在通过本地以太网互连到互联网的计算机系统的情况下,以太网/IEEE802.3U协议950可被用于从计算机系统向互联网的复杂通信组件发送和接收信息。在表示互联网的云910内部,许多附加类型的协议可被用于在客户端计算机和服务器计算机之间传送数据。
[0050]考虑经由HTTP协议从客户机计算机到服务器计算机的消息的发送。应用程序一般对操作系统进行系统调用,并且在系统调用中包括数据要发送到其的接收方的指示以及对包含该数据的缓冲区的引用。数据和其它信息一起打包到一个或多个HTTP数据报中,诸如数据报952。数据报一般可以包括报头954以及数据956,被编码为存储器块内的字节序列。报头954—般是由多个字节编码的字段组成的记录。由应用程序对应用层系统调用的调用在图9中由实线垂直箭头958表示。操作系统采用传输层协议,诸如TCP,传送一起表示应用层消息的一个或多个应用层数据报。一般而言,当应用层消息超出某个阈值字节数时,该消息作为两个或更多个传输层消息被发送。每个传输层消息960包括传输层消息报头962和应用层数据报952。除其它项外,传输层报头包括允许一系列应用层数据报被重新组装成单个应用层消息的序列号。传输层协议负责端到端消息传送,独立于底层网络和其它通信子系统,并且附加地涉及差错控制、分割,如以上所讨论的,流控制、拥塞控制、应用寻址,以及可靠的端到端信息传送的其它方面。然后,传输层数据报经由操作系统中的系统调用被转发到互联网层并且被嵌在互联网层数据报964中,每个互联网层数据报964包括互联网层报头966和传输层数据报。协议栈的互联网层涉及跨有可能一起包括互联网的许多不同的通信介质和子系统发送数据报。这涉及消息通过复杂通信系统到预期目的地的路由。互联网层涉及向消息的发送计算机和目的地计算机都分配的唯一地址,被称为“IP地址”,并且通过互联网将消息路由到目的地计算机。互联网层数据报最终被操作系统传送到通信硬件,诸如将互联网层数据报964嵌入到链路层数据报970的网络接口控制器(“NIC”),其中链路层数据报970包括链路层报头972并且一般包括若干附加到互联网层数据报的结尾的附加字节974。链路层报头包括:冲突控制和错误控制信息,以及本地网络地址。链路层分组或数据报970是字节序列,其包括由协议栈的每一层引入的信息以及根据应用层协议从源计算机传送到目的地计算机的实际数据。
[0051 ]接下来,描述对网络服务API的RESTfuI方法,从图10开始。图10示出了资源在RESTful API中的角色。在图10中,并且在随后的附图中,远程客户端1002被示为与由一个或多个服务计算机1004经由HTTP协议1006提供的服务互连并通信。许多RESTful API基于HTTP协议。因此,在以下讨论中,重点是在应用层。但是,如以上参考图10所讨论的,远程客户端1002和由一个或多个服务器计算机1004提供的服务事实上是具有应用、操作系统和硬件层的物理系统,其中应用、操作系统和硬件层通过HTTP协议与各种类型的通信介质和通信子系统互连,其中HTTP协议是在客户端计算机和服务器计算机的应用、操作系统和硬件层中实现的协议栈中的最高级层。服务可以由一个或多个服务器计算机提供,如上面在前面部分中所讨论的。作为一个例子,多个服务器可以被分层组织为各级中间服务器和端点服务器。但是,一起提供服务的服务器的整个集合是由包括在统一资源标识符(“URI”)中的域名寻址的,如下面进一步讨论的。RESTful API是基于由通过HTTP协议提供的并且关于资源的一小组动词,或操作,其每一个由对应的URI唯一识别。资源是逻辑实体,关于其的信息被存储在一起构成域的一个或多个服务器上。URI是用于资源的唯一名称。关于其的信息存储在连接到互联网的服务器上的资源具有允许那个信息被也连接到互联网的具有适当授权和特权的任何客户端计算机访问的唯一 URI ο因此,URI是全局唯一的标识符,并且可以被用来在世界各地指定服务器计算机上的资源。资源可以是任何逻辑实体,包括人、数字编码的文档、组织,以及其它此类可以通过数字编码信息来描述和表征的实体。因此,资源是逻辑实体。描述资源并能够由客户端计算机从服务器计算机访问的数字编码的信息被称为对应资源的“表示”。作为一个例子,当资源是网页时,资源的表示可以是资源的超文本标记语言(“HTML”)编码。作为另一个例子,当资源是公司的雇员时,资源的表示可以是一个或多个记录,每个记录包含存储表征雇员的信息的一个或多个字段,诸如雇员的姓名、地址、电话号码、职称、工作经历,以及其它此类信息。
[0052]在图10中所示的例子中,web服务器1004基于HTTP协议1006和分层组织的资源集1008提供RESTful API,其允许服务的客户端访问关于客户和由Acme公司的客户所下订单的信息。这个服务可以由Acme公司本身或由第三方信息提供商提供。所有的客户和订单信息都由与URI “http: //www.acme.com/ customer Info” 1012关联的客户信息资源1010集体表示。如下面进一步讨论的,这单个URI和HTTP协议一起提供足够的信息,用于让远程客户端计算机访问由服务1004存储和分发的任何特定类型的客户和订单信息。客户信息资源1010表示大量下属资源。对Acme公司的每个客户,这些下属资源包括客户资源,诸如客户资源1014。所有客户资源 1014-1018都由单个URI “http: //www.acme.com/customerInfo/customers” 1020共同命名或指定。个别客户资源,诸如客户资源1014,与客户识别符号码关联,并且每个分别由客户资源特定的URI寻址,诸如URI “http: / /www.acme.com/customer Info/customers/361” 1022,该URI包括用于由客户资源1014表示的客户的客户标识符“361”。每个客户可以与一个或多个订单逻辑关联。例如,由客户资源1014表示的客户与三个不同的订单1024-1026关联,每个订单由订单资源表示。所有订单都由单个URI“http: //www.acme.com/customerlnfo/orders” 1036 共同指定或命名。与由资源 1014表不的客户关联的所有订单,由订单资源1024-1026表示的订单,可以由URI“http://www.acme.com/ customerlnfo/customers/361/orders” 1038共同指定。特定的订单,诸如由订单资源1024表示的订单,可以由与那个订单关联的唯一 URI,诸如URI“http://www.acme.com/ customerlnfo/customer s/361/orders/1” 1040,指定,其中最后的 “I” 是指定对应于由客户识别符“361”识别出的特定客户的订单集合中特定订单的订单号。
[0053]从某种意义上说,这些URI与到由计算机操作系统提供的文件目录中的文件的路径名具有相似性。但是,应当认识到,资源,与文件不同,是逻辑实体,而不是物理实体,诸如一起构成计算机系统中的文件的所存储的字节集合。当文件通过路径名被访问时,作为那个文件的一部分被存储在存储器或大容量存储设备中的字节序列的拷贝被传送到访问实体。与此相反,当资源通过URI被访问时,服务器计算机返回资源的数字编码的表示,而不是资源的拷贝。例如,当资源是人时,经由指定该人的URI访问的服务可以返回人的各种特点的字母数字编码、数字编码的一张或多张照片,以及其它此类信息。不像通过路径名访问的文件的情况,资源的表示不是资源的拷贝,而是关于该资源的某种类型的数字编码信息。
[0054]在图10中所示的示例RESTful API中,客户端计算机可以使用HTTP协议的动词,或操作,和顶层URI 1012来导航资源1008的整个层次结构,以便获得关于特定客户和关于已经由特定客户所下订单的信息。
[0055]图1lA-D示出了由在RESTful应用中使用的HTTP应用层协议提供的四个基本动词,或操作。RESTful应用是客户端/服务器协议,其中客户端向服务或服务器发出HTTP请求消息并且服务或服务器通过返回对应的HTTP响应消息作出响应。图1lA-D使用上面关于客户端、服务和HTTP协议参考图10所讨论的图示约定。为了说明的简化和清楚,在这些图中每一个当中,顶部示出请求并且下部示出响应。远程客户端1102和服务1104被示为标记的矩形,如在图10中。指向右边的实线箭头1106表示HTTP请求消息从远程客户端向服务的发送并且指向左边的实线箭头1108表示对应于请求消息的响应消息由服务向远程客户端的发送。为了说明的清晰和简化,服务1104被示为与几个资源1110-1112关联。
[0056]图11A示出了GET请求和典型的响应。GET请求从服务请求由URI识别的资源的表示。在图1lA所示的例子中,资源1110由URI “http://www.acme.com/iteml” 1116唯一识别。初始子串“http: //www.acme.com”是识别服务的域名。因此,URI 1116可以被认为是指定资源“i teml”位于域“www.acme.com”内并由其管理。GET请求1120包括命令“GET” 1122、当被附加到域名时生成唯一识别资源的URI的并且在特定的底层应用层协议1126的指示中的相对资源标识符1124。请求消息可以包括一个或多个报头,或键/值对,诸如指示请求所指向的域的主机报头1128 “Host: www.acme.com”。存在可以被包括的许多不同的报头。此外,请求消息还可以包括请求消息主体。主体可以以各种不同的自描述编码语言当中任何一种编码,常常是JS0N、XML或HTML。在当前的例子中,没有请求消息主体。服务接收包含GET命令的请求消息、处理该消息,并返回对应的响应消息1130。响应消息包括应用层协议1132的指示、数字状态1134、结构(textural)状态1136、各种报头1138和1140,以及,在当前的例子中,包括网页的HTML编码的主体1142。但是,再次,主体可以包含许多不同类型的信息当中任何一种,诸如编码人事文件、客户描述或订单描述的JSON对象。GET是HTTP协议中最根本和一般最常用的动词,或功能。
[0057]图1lB示出了POST HTTP动词。在图1IB中,客户端向服务发送与URI“http://www.acme.com/iteml”关联的POST请求1146。在许多RESTful API中,POST请求消息请求服务创建下属于与该POST请求关联的URI的新资源并且为新创建的资源提供名称和对应的URI。因此,如图1IB中所示,服务创建下属于由URI “http: //www.acme.com/iteml”指定的资源1110的新资源1148,并且向这个新资源分配标识符“36”,从而为该新资源创建唯一 URI“http: //www.acme.com/i teml/36” 1150。然后,服务向远程客户端发送回对应于POST请求的响应消息1152。除了应用层协议、状态和报头1154,响应消息还包括具有新创建的资源的URI的位置报头1156。根据HTTP协议,POST动词还可以被用来通过包括具有更新信息的主体来更新现有的资源。但是,当新资源的名称由服务确定时,RESTful API—般使用POST用于创建新资源。POST请求1146可以包括包含可被服务结合到用于资源的所存储信息的资源的表示或部分表示的主体。
[0058]图1lC示出了HTTP PUT动词。在RESTful API中,PUT HTTP动词一般被用于更新现有的资源或者当新资源的名称由客户端而不是服务确定时用于创建新资源。在图1ic中所示的例子中,远程客户端关于命名新创建的资源1148的URI “http://www.acme.com/iteml/36”发出PUT HTTP请求1160IUT请求消息包括具有资源1162的表示或部分表示的JSON编码的主体。响应于接收到这个请求,服务更新资源1148,以包括在HJT请求中发送的信息1162,然后将对应于PUT请求1164的响应返回到远程客户端。
[0059]图1ID示出了DELETEHTTP动词。在图1ID所示的例子中,远程客户端向服务发送关于唯一指定新创建的资源1148的URI “http: //www.acme.com/iteml/36” 的DELETE HTTP请求1170。作为响应,服务删除与URL关联的资源并且返回响应消息1172。
[0060]如下面进一步讨论的,并且如上面提到的,在响应消息中,除了资源表示,服务还可以返回各种不同的链接,或URI。这些链接可以向客户端指示以各种不同方式与由与对应请求消息关联的URI指定的资源相关的附加资源。作为一个例子,当响应于请求而返回到客户端的信息对于单个HTTP响应消息来说太大时,它可以被分成页,返回第一页连同附加的链接,或URI,这些URI允许客户端利用附加的GET请求检索剩余的页。作为另一个例子,响应于对客户信息资源(图10中的1010)的初始GET请求,除了所请求的表示,服务还可以向客户端提供URI 1020和1036,利用这些URI,客户端可以开始遍历后续GET请求中的层次资源组织。
[0061]当前文档针对的科学工作流系统
[0062]图12示出了当前文档针对的科学工作流系统的主要组件。科学工作流系统包括前端1202和后端1204。前端经由互联网1206和/或各种类型的个人区域网、局域网、广域网以及通信子系统、系统和介质及其组合连接到后端。科学工作流系统的前端部分一般包括多个前端实验仪表板应用1208-1210,每个应用运行在用户计算机或其它处理器控制的用户设备上。每个前端实验仪表板向人类用户提供用户界面,该用户界面允许人类用户下载关于存储在科学工作流系统1204的后端部分中的执行模块、数据集和实验的信息,利用基于有向无环图(“DAG” )的可视化创建和编辑实验,提交实验以供执行,观看由已执行的实验生成的结果,向科学工作流系统后端上传数据集和执行模块,并且与其他用户共享实验、执行模块和数据集。在本质上,前端实验仪表板应用提供了一种进入科学工作流系统并且,通过科学工作流系统,进入科学工作流系统用户的社区的交互式开发环境和窗口或门户。在图12中,外部虚线矩形1202表示科学工作流系统前端,而内部虚线矩形1220表示支持科学工作流系统前端的硬件平台。在外部虚线矩形1202内并在内部虚线矩形1220外的阴影组件1208-1210表示在硬件平台1220中实现的科学工作流系统的组件。类似的图示约定用于在一个或多个云计算系统、集中式或分布式专用数据中心或其它一般化大规模多计算机系统计算环境1222上实现的科学工作流系统后端1204。这些大型计算环境一般包括多个服务器计算机、网络附连的存储系统、内部网络,并且常常包括主框架或其它大型计算机系统。科学工作流系统后端1204包括一个或多个API服务器1224、分布式目录服务1226、集群管理服务1228,以及多个执行集群节点1230-1233。这些后端组件中的每一个可以被映射到多个物理服务器和/或大型计算机系统。其结果是,科学工作流系统1204的后端部分被相对直接地缩放,以便向增加数量的用户提供科学工作流服务。由双箭头1240-1244表示的前端实验仪表板1208-1210和API服务器1224之间的通信是基于前面讨论的RESTful通信模型,就像由双头箭头1250-1262表示的后端组件之间的内部通信一样。图12中所示后端中除目录服务1226之外的所有其它组件都是无状态的并且通过无状态RESTful协议交换信息。
[0063]API服务器1224从在用户计算机上运行的前端实验仪表板应用接收请求,并向其发送响应。API服务器通过访问由目录服务1226和集群管理服务1228提供的服务来执行请求。此外,API服务器向执行集群节点1230-1233和集群管理服务1228提供服务。目录服务1226提供到所存储的执行模块、实验、数据集和作业的接口。在许多实现中,目录服务1226本地存储用于这些不同实体的元数据,这允许实体自身从远程或附连的存储系统访问,并存储在其上,其中存储系统包括网络附连的存储设备、数据库系统、文件系统,以及其它此类数据存储系统。目录服务1226是用于存储与以前执行的、当前正在执行的以及未来执行的作业关联的态信息的储存库。目录服务1226提供所存储的数据集、实验、执行模块和作业实体的版本化,以及对其的搜索接口。
[0064]集群管理服务1228从API服务器接收需要在执行集群节点上执行以便代表用户执行实验的作业的作业标识符。集群管理服务将作业分派到合适的执行集群节点以便执行。准备好执行的作业被转发到特定的执行集群节点以供立刻执行,而需要等待由当前正在执行的作业产生的数据的作业或者等待执行的作业被转发到在执行集群节点中执行的pinger例程,该pinger例程间歇地检查依赖性的满足情况,以便在作业的依赖性被满足时启动它们。当作业完成执行时,输出数据和状态信息经由API服务器从执行集群节点返回到目录。
[0065]如上面所讨论的,实验经由前端实验仪表板被可视地表示为包括数据源和执行模块节点的DAG。在科学工作流系统的一种实现中,实验DAG以JavaScript对象符号(“JS0N” )以文本方式编码。实验DAG被文本编码为JSON执行模块的列表。图13A-E示出了相对简单的六节点实验DAG的JSON编码。在图13A中,提供了 JSON编码的实验DAG的框图状图示。JSON编码的实验DAG由JSON编码的执行模块1302和1303的列表1300组成。执行模块1302的JSON编码包括执行模块名称1304和版本号1306以及用于一个或多个执行模块实例1308和1310当中每一个的编码。每个执行模块实例包括实例名称或标识符1312以及键值对1314-1316的列表或集合,每个键值对包括通过冒号1322与以文本方式表不的值1320分开的以文本方式表示的键1318。
[0066]执行模块是可以由执行集群节点执行的可执行文件。科学工作流系统可以存储和执行从许多不同的编程语言当中任何一种编译的可执行文件。执行模块可以是例程或多例行程序。执行模块实例被映射到实验DAG的单个节点。当相同的执行模块在实验过程中被调用多次时,每次调用对应于不同的实例。键-值对1314-1316提供输入到执行模块的数据、从执行模块输出的数据、静态参数以及用于执行模块的可变参数的指示。图13B显示了可以在执行模块内实例的JSON编码中键-值对的列表或集合中出现的不同类型的键-值对。在图13B中存在两种类型的输入键-值对1330和1332。这两种类型的输入键-值对包括键“in”1334。第一输入键-值对1330包括包含“at”符号1336、数据集的名称1338和版本号1340的值串。这第一类型的输入键-值对指定存储在科学工作流系统后端(图12中的1204)的目录服务(图12中的1226)中的命名数据集。第二输入键-值对类型1332指定从执行模块实例输出到包括输入键-值对的执行模块实例的数据。第二输入键-值对类型1332包括以美元符号1342开始、后面跟着执行模块名称1344、用于执行模块的版本号1346、用于执行模块的实例的实例名称或标识符1348以及指示执行模块的哪个输出产生要被输入到包括输入键-值对的执行模块实例的数据的输出号1350的值串。
[0067]从执行模块的实例输出的所有数据都由输出键-值对1352指定。用于输出键-值对的键是“out”1354并且值是整数输出数字1355。命令行静态参数和变量参数由静态键-值对1356和参数键-值对1357表示。静态和参数键-值对包括串值1358和1359。
[0068]图13C示出了由节点和链接可视表示的相对简单的实验DAG。随机数发生器可执行模块1360的单个实例经由到文件分离器可执行模块实例1362的单个输出1361生成数据。文件分离器可执行模块实例产生三个数据输出1363-1365。这些输出被指向双排序执行模块1366-1368的三个实例当中每一个。双排序执行模块1366-1368的三个实例各自生成输出1369-1371,并且所有这三个输出都被输入到双合并执行模块1372的实例,其产生单个输出1373。图13D示出了在图13C中所示的实验DAG的JSON编码。随机数发生器执行模块的单个实例(图13C中的1360)由文本1375表示。文件分离器执行模块的单个实例(图13C中的1362)由文本1376表示。双合并执行模块的单个实例(图13C中的1372)由文本1377表示。双排序执行模块的三个实例(图13C中的1366-1368)由图13D中的文本1378、1379和1380表示。考虑来自表示图13D中文件分离器执行模块的图13C的实验DAG的JSON编码的文本1376。命令行静态参数由键-值对1382表示。从随机数发生器执行模块(图13C中的1360)输出的数据的输入由输入键-值对1384表示。从文件分离器执行模块的实例(图13C中的1363-1365)输出的三个数据由三个输出键-值对1386-1388表示。由随机数发生器执行模块(图13C中的1360)接收的两个参数由两个参数键-值对1390和1392指定。
[0069]图13E示出了三个不同的JSON编码的对象。图13E意在示出在随后的附图以及图13D中使用的JSON的某些方面。第一个JSON编码的对象1393是被封在括号1393b和1393c中的逗号分隔的键-值对1393a的列表。每个键-值对由用冒号隔开的两个串组成。第二个JSON编码的对象1394也包括键-值对1394a的列表。但是,在这种情况下,第一个键-值对1394b包括是在括号1394c和1394d中编码的键-值对1394d的列表的值1394c。因此,键-值对的值可以是串或者可以是JSON编码的子对象。另一种类型的值是表示串1394e的数组的括号封住的串的列表。在第三个JSON编码的对象1395中,第二个键-值对1395a包括在括号1395b和1395c中被封住的数组值,其中元素包括对象1395d,对象1395d包括两个键-值对以及两个键-值对1395e和1395f。因此,JSON是允许任意数量的分层级别的分层对象或实体编码系统。对象由JSON编码为键-值对,但给定的键-值对的值本身可以是子对象和数组。
[0070]图14A-D示出了存储在目录服务(图12中的1226)中的元数据。图14A示出了存储在目录服务中的元数据的逻辑组织。每个目录条目1402包括索引1404、类型1405和标识符1406。有四种不同类型的目录条目:(1)数据源条目;(2)实验条目;(3)执行模块条目;和(4)作业条目。数据条目描述在作业执行期间被输入到作业的数据集。数据条目描述由用户上传到科学工作流系统的命名数据集以及表示作业的输出的临时数据集这二者,该输出来自被输入到在实验的上下文中执行的其它作业。例如,在图1的实验DAG中所示的数据源102和104是在实验执行之前上传到科学工作流系统或者在其中生成的命名数据源。与此相反,来自执行模块实例的输出,诸如输出116,作为临时数据集由目录存储,用于随后输入到执行模块实例106。实验是由上面参考图13A-D讨论的实验DAG描述的。执行模块部分地由JSON编码描述,但是,除此之外,还包括对所存储的包括在实验执行期间作为作业被执行的实际计算机指令或P-代码指令的可执行文件或对象的引用。作业条目描述对应于执行模块的并且包括用于来自上游、相关作业的输入的作业状态和标识符的作业。
[0071]科学工作流系统可以对许多不同用户和组织支持实验工作流和实验执行。因此,如图14A中所示,对于每个用户或用户组织,目录可以包含用于那个用户或用户组织的数据、实验、执行模块和作业条目。在图14A中,每个大矩形,诸如大矩形1408,表示代表特定用户或用户组织存储的目录条目。在每个大矩形内,有四个较小的矩形,诸如较大的矩形1408内较小的矩形1410-1413,分别表示所存储的数据、实验、执行模块和作业条目。目录条目1404的索引字段识别用于特定用户或用户组织的所存储元数据的特定集合。目录条目的类型字段1405指示条目属于这四种不同类型的所存储条目当中哪一种。所存储的条目的ID字段1406是用于可被用来从用于特定用户或组织的相同类型的条目集合中找出和检索所存储条目的所存储条目的唯一标识符。
[0072]图14B提供了关于目录条目的内容的更多细节。如以上参考图14A讨论的,每个目录条目1420包括索引1404、类型1405和ID字段1406。此外,每个条目包括源部分1422。源部分包括状态值1423、简短描述1424、名称1425、所有者1426、最后更新日期/时间1427、类型1428、创建日期1429、版本1430和元数据1431。图14C示出了用于执行模块目录条目的元数据的一部分,其描述在图13C中所示的实验DAG中被示为节点1362的文件分离器执行模块。这个节点被编码在图13D中所示的实验的JSON编码中的文本1376中。图14C所示的用于这个执行模块的执行模块目录条目的元数据的部分是用于执行模块的接口的JSON编码,其对于由图13C中所示实验DAG表示的实验描述被包括在图13D中文件分离器节点1376的JSON中的键-值对1382-1388。该接口是数组,其包括对应于图13D中键-值对1382-1388的五个对象1440-1444。接口数组内的JSON编码对象1441是输入参数1384的描述,其可被用来将实验-DAG节点的JSON编码结合到表示由包括图14C中所示接口编码的执行-模块条目描述的执行模块的实验DAG中。
[0073]图14D示出了存储在作业目录条目中的元数据的一部分。这个元数据包括资源键_值对1450,该键-值对指定作业执行所需的盘空间、CPU带宽和存储器的量,以及用于对应于该作业的执行模块的各个执行-模块参数的值。应当指出,在图14D中所示的元数据中,对应于来自当前描述的作业依赖于其的作业的输入的输入参数包括作业标识符,诸如作业标识符1452和1454,而不是对执行-模块实例的引用,就像在用于图13C中所示实验DAG的双合并节点(图13D中的1377)的JSON编码中那样。
[0074]图15A-1提供了对应于实验DAG的实验布局DAG的例子,其中实验DAG诸如上面参考13C-D所讨论的实验DAG。图15A-1中所示的实验布局DAG包括显著的附加信息,包括描述可视显示元素,诸如节点和链接,的位置和朝向,其中这些元素一起构成通过前端实验仪表板提供给用户的实验DAG的可视表示。实验DAG的实验布局DAG形式可被前端和API服务器使用,但一般不被集群-管理服务和执行-集群节点使用。
[0075]图16A-1示出了科学工作流系统内的实验设计和执行的过程。图16A-1都使用相同的图示约定,其中方框示出先前参考图12讨论的科学工作流系统组件。在初始的实验设计阶段,在用户计算机或其它处理器控制的设备上运行的前端实验仪表板应用提供允许用户构建实验设计或者实验DAG 1604的可视表示的用户界面。可视表示是基于上面参考图13C-D和图15A-1所描述的DAG 1606的JSON编码。前端实验仪表板应用调用由科学工作流系统后端的AP1-服务器组件1608提供的各种DAG编辑器工具服务和搜索服务。API服务器组件1608又向目录服务1610进行调用,并且从其接收信息。在构建实验设计时,用户可以搜索,并下载以前开发的实验设计以及实验设计的组件,其元数据被存储在目录1610中。搜索可以关于上面参考图14B讨论的目录条目内的各个字段的值来执行。用户也可以采用编辑工具来构建全新的实验设计。实验设计可以被用户通过从前端实验仪表板应用调用的各种API月艮务器服务命名并存储在目录中。在称为“克隆”的一种实验设计方法中,通过对存储在目录中的实验设计的搜索,现有的实验设计被识别出来,并且通过前端实验仪表板应用显示给用户。然后,通过改变数据源,添加、删除或改变执行模块和执行模块之间的数据流链接,并通过添加或删除执行模块的实例,用户可以修改现有的实验。因为关于先前执行的实验和作业的信息在科学工作流系统内被维护,所以,在当前实验执行期间,与先前执行的实验中完全相同的作业接收相同输入的修改后的实验设计中的那些作业不需要被再次执行。相反,由这种作业产生的数据可以从目录中获得,用于输入到当前实验的下游作业。实际上,当修改后的实验设计的整个子图具有在当前实验设计中完全相同的输入并且完全相同地发生时,那些子图可能不需要在目前实验设计的执行期间被执行。
[0076]如图16B中所示,一旦实验设计已经被开发出来,用户就可以采用前端实验仪表板特征来经由API服务器组件1608提供的上传服务向目录上传在该目录中还不存在的数据集和执行模块。如图16C中所示,一旦用户已经上传了执行还没有在目录中存在的实验所需的必要数据集和执行模块,用户就输入前端实验仪表板的实验提交特征,以便向由API服务器组件1608提供的实验提交服务提交实验设计,作为对应实验DAG 1612的JSON编码以供执行。如图16D中所示,在接收到实验设计后,API服务器组件1608将该试验设计解析为执行模块实例和数据集,与目录服务1610进行交互以确保所有的数据集和执行模块都驻留在该目录中,验证实验设计,为所有执行模块实例计算作业签名,并与目录进行交互以便为不匹配已存储在该目录中的作业条目的作业签名的作业签名创建新作业条目,为新创建的作业条目接收作业标识符。为了执行实验,仅新创建的作业条目需要被执行。
[0077]如图16E中所示,用于为了执行实验而需要被执行的那些作业的作业标识符从API服务器组件1608被转发到集群管理器组件1614。对于立即执行,当用于对应于接收到的作业标识符的作业的所有输入数据都可用时,或者对于后续执行,一旦数据依赖性被满足,集群管理器组件就在执行集群节点1616之间分发接收到的作业标识符。如图16F中所示,对于对应于等待依赖性满足的作业的那些作业标识符,作业标识符已被集群管理器组件转发到其的执行集群节点内的Pinger 1618连续或间歇地轮询API服务器组件1608,以确定,作为上游作业的执行完成的结果,输入数据依赖性是否已被满足。当依赖性被满足时,作业标识符被提交,用于由执行集群节点执行。如图16G中所示,当执行集群节点准备启动作业的执行时,执行集群节点经由API服务器服务将必要的数据集和可执行文件下载到本地存储器和/或其它本地数据存储资源。如图16H中所示,一旦作业结束执行,执行集群节点就通过API服务器组件1608向目录1610发送通过执行生成的数据集、标准错误输出和I/O输出以及完成状态,以便存储。如图161中所示,当API服务器组件1608确定用于实验的所有作业都已被执行时,API服务器组件可以向前端实验仪表板应用1602返回执行完成指示。作为替代,前端实验仪表板应用可以通过API服务器组件接口或服务轮询目录,以便确定何时执行完成。在执行完成后,用户可以访问并在前端实验仪表板上显示来自实验的输出。
[0078]接下来,更详细地描述上面参考图16A-1讨论的后端活动。在那种讨论之前,接下来总结实验设计和实验执行的各个方面。科学工作流系统的第一个重要方面是实验设计由概念上简单的执行模块和数据源组成。与可视编辑工具、搜索能力和系统目录中的元数据存储相结合,这允许用户快速构建实验,常常是通过重复利用以前开发的实验设计的大部分。科学工作流系统的第二个重要特征是,因为作业和由成功执行的作业输出的数据在目录中被存储并维护,所以,当结合先前执行的实验的部分的新实验设计被系统执行时,没有必要利用完全相同的输入重新执行完全相同的作业。因为来自那些作业的输出被存储,所以,当实验被执行时,那个输出立即可用于提供给下游作业。因此,设计实验的过程和实验执行的计算效率两者都通过在科学工作流系统内维护的综合目录被大大增强了。科学工作流系统的另一个重要方面是除目录之外的所有其它后端组件都是无状态的,从而允许它们被直接缩放,以便支持不断增加的用户数量。用于执行作业的数据和执行模块本地存储在作业在其上执行的执行集群节点上,这显著改善了与大型分布式系统中的分布式执行关联的通信带宽问题。科学工作流系统将实验分解成对应于执行模块的作业并且在执行阶段执行作业,其中初始作业只依赖于命名数据源或独立于外部资源并且执行的后续阶段涉及其依赖性已经被先前执行的作业满足的那些作业。这种执行调度由目录维护的作业状态信息协调并且从实验的DAG描述自然产生。
[0079]图17A-B示出了实验DAG的样本可视表示和实验DAG的对应JSON编码。如图17A中所示,实验设计包括三个数据源节点1702-1704和五个执行模块实例节点1705-1709。在图17B中,图17A中所使用的用于执行模块节点的数字标签被再次用来指示JSON编码的对应部分。
[0080]图18A-G示出了在实验经由前端实验仪表板应用提交以便由用户执行之后由科学工作流系统后端的API服务器组件(图16A中的1608)执行的活动。图18A示出了在由API服务器对实验设计进行验证期间执行的各种不同步骤。在图18A中,如上在图17B中示出的实验DAG的JSON编码在左侧第一列1802中被再现。在第一步骤中,API服务器识别实验设计中的执行模块和数据集并且从目录检索用于这些组件的对应目录条目,在图18A的右侧第二列1804示为矩形。当API服务器不能识别和检索对应于每个执行模块和数据源的目录条目时,实验提交被拒绝。否则,在下一步骤中,用于执行模块的每个实例的键-值对对照对应目录条目中的元数据接口进行检查,该检查在图18A中由双头箭头,诸如双头箭头1806,指示。当接口规范未能与实验DAG的JSON编码中的键-值对重合时,实验提交被拒绝。最后,引用另一执行模块的每个输入键-值对,诸如输入键-值对1808,对照实验DAG进行检查,以确保输入键-值对引用第一级执行模块名称,如由弧形箭头,诸如弧形箭头1810,所指示的。
[0081]图18B提供了用于以上参考图18A讨论的验证步骤的控制流程图。在步骤1812中,例程“验证”接收实验DAG。在步骤1813-1824的for循环中,检查DAG的每个元素,其中元素是执行模块或引用的数据集。首先,在步骤1814中,为当前考虑的DAG元素从目录中获取对应的条目。当目录获取不成功时,如在步骤1815所确定的,则返回失败。否则,当获取的条目是执行模块时,如在步骤1816所确定的,则在步骤1817中,目录条目的元数据上的接口相对于实验DAG中的执行模块编码的输入、输出和参数进行检查。当输入、输出和参数相对于接口元数据的检查成功时,如在步骤1818所确定的,然后,在步骤1819-1821的内部for循环中,包括对其它执行模块的引用的所有输入键-值对被检查有效性,如以上参考图18A所讨论的。当引用无效时,返回失败。否则,当前考虑的元素通过验证。当当前考虑的元素是数据集时,如在步骤1816所确定的,则任何数据集有效性检查都在步骤1822中执行。这些检查可以包括基于数据集目录条目信息确定数据是否可访问。当数据集检查成功时,如在步骤1823所确定的,数据集条目通过验证。步骤1813-1824的for循环迭代通过所有的实验DAG的元素并且当全部都通过验证时返回成功。
[0082]图18C-D示出了实验DAG的排序。图18C示出了用于执行模块实例执行的次序,或阶段。执行模块1705从数据源1702和1703只接收数据源输入。因此,执行模块实例1705可以在第一阶段中被立即执行,如由带圆圈的阶段号1825所指示的。与此相反,执行模块1706和1707都依赖于来自执行模块实例1705的输出。因此,它们必须都等待执行模块实例1705的执行完成。因此,它们被分配给执行的第二阶段,如由带圆圈的阶段号1826和1827所指示的。执行模块实例1708依赖于执行模块实例1706的之前执行,并且因此被分配给第三执行阶段1828。最后,执行模块实例1709必须等待执行模块实例1708的执行完成,并且因此被分配给第四执行阶段1829。这些阶段分配表示实验DAG的执行次序。当然,当执行模块实例可以在执行集群节点上被启动的点只依赖于所有的数据依赖性都被满足,而不是依赖于执行模块实例被认为驻留在其中的阶段。
[0083]图18D提供了用于为实验DAG确定执行次序的例程“排序DAG”的控制流程图。在步骤1830中,例程“排序DAG”接收实验DAG、将局部变量numLevels设置为0,并且将两个局部集合变量80111^6?^0(168和01:116洲0(168设置为空集。然后,在步骤1831-1837的¥11;[16循环中,阶段被迭代地确定,直到存储在本地变量集SourceNodes和otherNodes中的所有节点等于在实验D A G中的全部节点。在步骤18 3 2中,例程找出实验D A G中仅依赖于数据源和集合sourceNodes和otherNodes中的节点的所有节点。在步骤1833中,例程确定在步骤1832中是否找到任何节点。如果没有,则例程返回假,因为实验DAG必须具有循环或将防止执行排序的其它异常。否则,当存储在局部变量numLevels中的值是O时,如在步骤1834所确定的,找出的节点在步骤1835中被添加到局部集合变量sourceNodes,并且变量numLevels被设置为
I。否则,找出的节点在步骤1836中被添加到集合otherNodes,并且变量numLevels递增I。
[0084]图18E提供了用于例程“创建作业签名”的控制流程图。作业签名是用于对应于执行模块实例的作业的独特指纹的类型。在步骤1840中,例程接收执行模块实例的JSON编码。在步骤1841中,例程将局部变量job_sig设置为空串。然后,在步骤1842-1847的for循环中,例程将每个键-值对串附加到存储在局部变量job_s i g中的作业签名。当当前考虑的键-值对是引用另一个执行模块的输入键-值对时,如在步骤1843所确定的,$编码的引用被用于其它执行模块的作业签名代替并且d-引用的输入键-值对在步骤1844-1845中被添加到作业签名。否则,键-值对在步骤1846中被添加到作业签名。因此,作业签名是在执行模块实例中的所有键-值对的级联,其中对其它执行模块的引用被用于那些执行模块的作业签名代替。
[0085]图18F是用于创建由API服务器转发到科学工作流系统后端的集群管理组件以启动实验的执行的作业标识符的列表的例程“准备作业”的控制流程图。在步骤1850中,例程“准备作业”将局部变量list设置为空或空列表。然后,在步骤1851-1855的for循环中,考虑存储在源节点和例程“排序DAG”的先前执行中的其它节点集合中的每个执行模块实例。在步骤1852中,为执行模块实例计算作业签名。在步骤1853中,例程“准备作业”确定这个作业签名是否已经与目录中的作业条目关联。如果还没有,则在步骤1854中新的作业条目被创建并存储在目录中,该条目的状态为CREATED。然后,在步骤1856-1863的for循环中,考虑当作业在目录中被找到或者在目录中被创建和存储时获得每个作业签名和对应于该作业签名的作业标识符。当对应的执行模块实例中在sourceNodes集合中并且对应于作业标识符的作业条目的状态是CREATED时,如在步骤1857所确定的,在步骤1858中,在目录中的作业条目中状态被改变为READY并且在步骤1859中作业标识符被添加到作业标识符的列表。否贝1J,当对应于作业签名的执行模块实例在集合otherNodes中被找出并且用于目录中的作业签名的作业条目的状态被创建时,如在步骤1860所确定的,用于作业条目的状态在目录中被改变为SUBMITTED并且在步骤1862中作业标识符被添加到列表中。因此,由例程“准备作业”产生的列表包含对应于需要在实验执行期间被执行的执行模块实例的作业标识符的列表。在许多情况下,该列表包含比实验DAG中的执行模块实例更少的作业标识符。这是因为,如上面所讨论的,具有匹配目录中先前执行的作业的作业签名的作业签名的那些作业不需要被执行,因为它们的数据输出在目录中可用。
[0086]图18G提供了用于表示提交的实验设计的API服务器处理的例程“处理DAG”的控制流程图。在步骤1870中,例程“处理DAG”接收实验DAG。在步骤1872中,例程“处理DAG”调用例程“验证”,以验证接收到的实验DAG。如果验证失败,如在步骤1874所确定的,则实验提交失败。否则,在步骤1876中,实验DAG通过对例程“排序DAG”的调用来排序。当排序失败时,如在步骤1878所确定的,实验提交失败。否则,在步骤1880中,为了执行实验而需要被执行的作业的列表通过对例程“准备作业”的调用来准备。在步骤1882中,作业标识符的列表被转发到集群管理器以供执行。在步骤1884中,例程“处理DAG”等待对应于列表中的作业标识符的所有作业的成功完成或者执行超时的通知。当所有作业都已经成功完成时,如在步骤1886所确定的,实验提交成功。否则,实验提交不成功。
[0087]图19提供了用于在科学工作流系统后端的集群管理器组件上执行以便向执行集群节点分发作业以供执行的例程“集群管理”的控制流程图。在步骤1902中,集群管理器从API服务器接收作业标识符的列表。在步骤1903-1912的for循环中,例程“集群管理器”向执行集群节点分派由作业标识符表示的作业以供执行。在步骤1904中,例程“集群管理器”通过API服务器访问对应于目录中的作业标识符的作业条目。当作业条目的状态是READY时,如在步骤1905中所确定的,例程“集群管理器”在步骤1906中为作业确定适当的执行集群节点,并在步骤1907中向执行节点执行器发送作业标识符以供立即执行。在步骤1906中为了执行作业而确定适当执行集群节点涉及跨执行集群节点平衡执行负载以及匹配作业执行所需的资源与在执行集群节点上可用的资源的策略。在某些实现中,当任何执行集群节点上存在执行作业的不足资源时,作业可被排队供后续执行并且科学工作流系统可以经受缩放操作,以增加云计算设施内可用于科学工作流系统的计算资源。当作业条目的状态不是READY时,如在步骤1905中所确定的,然后,当状态是SUBMITTED时,如在步骤1908中所确定的,例程“集群管理器”在步骤1909中确定用于作业的执行的适当执行集群节点,然后在步骤1910中将作业标识符转发到所确定的执行集群节点中执行的pinger。如果pinger尚未在执行集群节点上执行,贝IJ例程“集群管理器”可以访问执行集群节点接□,以启动Pinger作业,以便接收作业标识符。如上面所提到的,pinger继续轮询目录,以便在启动由作业标识符识别的作业的执行之前确定何时所有的依赖性都已被满足。当作业条目的状态既不是RE ADY也不是SUBMITTED时,获得错误条件,这在步骤1911中被处理。在某些实现中,作业条目可以具有除RE ADY或SUBMITTED之外的其它状态,有可能在另一实验的上下文中,该状态指示作业已经被排队等待执行。在这种情况下,包括该作业的实验的执行可以继续。
[0088]图20提供了用于例程“pinger”的控制流程图。如上面所讨论的,pinger在执行集群节点内运行,以便继续检查与从集群管理器接收到的作业标识符关联的作业的依赖性的满足,以便启动作业的执行。如上面所讨论的,实验DAG被排序到执行阶段,其中特定执行阶段中的每个作业只有当之前执行阶段中该作业依赖于其的作业已经完成执行并产生输入到之前考虑的作业的输出数据的时候才可执行。在步骤2002中,pinger等待下一个事件。当事件是新作业标识符的接收时,如在步骤2003中所确定的,作业标识符被放在正由pinger监视的作业标识符的列表上。当下一个事件是轮询定时器期满事件时,如在步骤2005中所确定的,在步骤2006-2009的for循环中,pinger对被pinger监视的作业标识符列表上的每个作业标识符检查依赖性的满足。当对于特定的作业标识符所有的依赖性都已经满足时,如在步骤2008中所确定的,该作业标识符被转发到执行集群节点内的执行器,以供执行从被监视的作业标识符列表中除去的作业标识符。当列表上的所有作业标识符都已被检查依赖性满足时,在步骤2011中轮询定时器复位。可能发生的其它事件在步骤2012中由一般事件处理器处理。当存在排队要考虑的另一事件时,如在步骤2013中所确定的,控制流返回到步骤2003。否则,控制流返回到步骤2002,在那里pinger等待下一个发生的事件。
[0089]图21提供用于在执行集群节点上启动作业的执行的例程“执行器”的控制流程图。在步骤2102中,例程“执行器”从科学工作流系统后端的集群管理器组件接收作业标识符。在步骤2103中,例程“执行器”经由API服务器获得用于作业的目录条目。在步骤2104中,例程“执行器”确保所有输入数据的本地拷贝和用于作业的可执行文件都已本地存储在执行集群节点内,以确保在执行集群节点上的本地执行。在步骤2105中,用于作业的目录条目的作业状态被更新为RUNNING。在步骤2106中,执行器启动作业的执行。在某些实现中,新的执行器被启动,以接收由集群管理器转发到执行集群节点的每个新作业标识符。在其它实现中,执行集群节点是用于启动对应于被持续转发到执行器的作业标识符的作业的连续运行的执行器。执行器确保来自执行的作业的所有输出都在文件或其它输出数据存储实体中被捕获。然后,在步骤2108中,执行器等待作业结束执行。一旦作业结束执行,执行器就将输出文件转发到目录。当作业已成功完成执行时,如在步骤2110中所确定的,用于作业的目录条目在步骤2112中被更新为具有状态FINISHED。否则,用于目录的工作条目在步骤2111中被更新为具有状态FAILED。
[0090]虽然本发明已经关于特定的实施例进行了描述,但并不意味着本发明局限于这些实施例。在本发明的精神之内的修改对本领域技术人员将是显而易见的。例如,许多不同实现当中任何一种可以通过改变许多不同设计和实现参数当中任何一个来获得,包括用于前端和后端的硬件平台的选择,编程语言、操作系统、虚拟化层、云计算设施和其它数据处理设施、数据结构、控制结构、模块化组织以及许多附加的设计和实现参数的选择。
[0091]可以认识到,提供前面对所公开的实施例的描述是为了使本领域任何技术人员能够制作或使用本公开内容。对这些实施例的各种修改将是本领域技术人员容易认识到的,并且,在不背离本公开内容的精神或范围的情况下,在本文中定义的一般原理可以应用到其它实施例。因此,本公开内容并非意在局限于本文中所示的实施例,而是要符合与本文所公开的原理和新颖特征一致的最广范围。
【主权项】
1.一种自动化实验平台,包括: 一个或多个处理器; 一个或多个存储器; 一个或多个数据存储设备;及 存储在所述存储器和数据存储设备中的一个或多个当中的计算机指令,当在所述一个或多个处理器中的一个或多个上被执行时,控制自动化实验平台 提供可视集成开发环境,通过该可视集成开发环境,包括在图形中被链接到一起的输入数据集、执行模块和所生成的集合的工作流被创建和显示;及执行工作流以产生输出数据集。
【文档编号】G06F15/16GK105830049SQ201480068776
【公开日】2016年8月3日
【申请日】2014年12月17日
【发明人】G·加普塔, A·桑克拉, J·莫里斯, R·佩恩, M·桑达吾, D·泰百
【申请人】阿提乔有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1