CN114174991B - 容器镜像的动态分布的方法、系统和存储设备 - Google Patents
容器镜像的动态分布的方法、系统和存储设备Info
- Publication number
- CN114174991B CN114174991B CN202080049185.9A CN202080049185A CN114174991B CN 114174991 B CN114174991 B CN 114174991B CN 202080049185 A CN202080049185 A CN 202080049185A CN 114174991 B CN114174991 B CN 114174991B
- Authority
- CN
- China
- Prior art keywords
- application
- instances
- instance
- module
- data processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
- G06F8/63—Image based installation; Cloning; Build to order
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45545—Guest-host, i.e. hypervisor is an application program itself, e.g. VirtualBox
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5072—Grid computing
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Mathematical Physics (AREA)
- Image Processing (AREA)
- Stored Programmes (AREA)
Abstract
一种由数据处理系统实施的方法,该方法包括:访问包括第一应用程序和第二应用程序的容器镜像;由该数据处理系统确定该第一应用程序的给定模块的并行执行数量;对于该给定模块,根据确定的并行执行数量来生成该容器镜像的多个实例,对于每个实例,将该实例配置成执行该第一应用程序的给定模块;使得该多个经配置的实例中的每一个实例在这些主机系统中的一个或多个主机系统上执行;以及对于该多个经配置的实例中的至少一个实例,由该经配置的实例的第二应用程序引起该数据处理系统与执行该经配置的实例的这些主机系统中的一个或多个主机系统之间的通信。
Description
优先权要求
本申请要求于2019年10月18日提交的美国专利申请序列号16/656,886的优先权,该美国专利申请根据35U.S.C.§119(e)要求于2019年5月7日提交的美国专利申请序列号62/844,430的优先权,这两个美国专利申请的全部内容通过援引并入本文。
背景技术
在计算系统上运行的应用程序需要计算系统的计算资源的一部分来运行。因此,计算系统必须管理对在其上运行的应用程序的资源分配。分配给应用程序的资源的一些示例包括对计算系统的存储器的一部分的访问、对文件数据的访问以及对所需量的处理能力的访问。
发明内容
在一方面,总体上披露了一种由数据处理系统实施的用于使容器镜像的实例在多个主机系统上执行的方法,其中,每个容器镜像包括具有多个模块的第一应用程序,并且其中,这些实例被配置成根据给定模块的确定的并行执行数量来执行该给定模块,其中,该方法包括:访问包括该第一应用程序和第二应用程序的容器镜像,其中,该第二应用程序引起该数据处理系统与执行该容器镜像的实例的主机系统之间的通信;由该数据处理系统确定该第一应用程序的给定模块的并行执行数量;对于该给定模块,根据确定的并行执行数量来生成该容器镜像的多个实例,其中,每个实例包括该第一应用程序和该第二应用程序;对于每个实例,将该实例配置成执行该第一应用程序的给定模块;使得该多个经配置的实例中的每一个实例在这些主机系统中的一个或多个主机系统上执行;以及对于该多个经配置的实例中的至少一个实例,由该经配置的实例的第二应用程序引起该数据处理系统与执行该经配置的实例的这些主机系统中的一个或多个主机系统之间的通信。该方面的其他实施例包括记录在一个或多个计算机存储设备上的对应的计算机系统、装置和计算机程序,这些计算机系统、装置和计算机程序各自被配置成执行这些方法的动作。
在该示例中,这些操作包括访问指定给定模块的并行执行数量的规范。该容器镜像是第一容器镜像,并且其中,该方法进一步包括:从硬件存储设备访问第二容器镜像的实例,其中,该第二容器镜像包括该第一应用程序并指定该第二应用程序中每个模块的并行量;以及将该第二容器镜像存储在执行系统上。这些操作还包括从该第二容器镜像的实例向包括在该执行系统中的接口传输请求,以根据该确定的并行执行数量生成该容器镜像的多个实例。这些操作还包括将该多个经配置的实例中的每一个实例指配给这些主机系统中的一个或多个主机系统。指配是通过在运行时间指配每个经配置的实例来动态地执行的,并且这些指配不是预先确定的。该第一应用程序是具有多个组件的数据流图,这些操作进一步包括:对于每个组件,根据为该组件确定的并行执行数量来生成该容器镜像的多个实例;以及在多个节点上动态地运行数据流图,以通过以下方式获得动态并行水平:对于每个组件,将生成的实例动态地指配给这些主机系统的一个或多个节点;以及使得该多个指配的实例中的每一个实例在这些主机系统的一个或多个节点上执行。在一些示例中,该给定模块是第一模块,该生成的多个实例是多个第一实例,并且该方法进一步包括:由该数据处理系统确定该第一应用程序的第二模块的并行执行数量;对于该第二模块,根据为该第二模块确定的并行执行数量来生成该容器镜像的多个第二实例,其中,每个第二实例包括该第一应用程序和该第二应用程序;对于每个第二实例,将该第二实例配置成执行该第一应用程序的第二模块;使得该多个经配置的第二实例中的每一个第二实例在这些主机系统中的一个或多个主机系统上执行;以及使得在这些第一实例之一与这些第二实例之一之间建立通信信道,其中,这些第一实例之一输出数据并通过该通信信道将该输出数据传输到这些第二实例之一。
在一些示例中,该数据处理系统与执行该经配置的实例的这些主机系统中的一个或多个主机系统之间的通信包括:由该给定模块向该第二应用程序传输监测数据,以及由该第二应用程序将该监测数据传递给该数据处理系统,其中,该监测数据被配置成由该数据处理系统使用以跟踪该给定模块何时已经完成执行,以便该数据处理系统指示另一模块执行。在一些示例中,该给定模块是第一模块,其中,该生成的多个实例是多个第一实例,并且其中,这些操作进一步包括:由该数据处理系统确定该第一应用程序的第二模块的并行执行数量;对于该第二模块,根据为该第二模块确定的并行执行数量来生成该容器镜像的多个第二实例,其中,每个第二实例包括该第一应用程序和该第二应用程序;对于每个第二实例,将该第二实例配置成执行该第一应用程序的第二模块;使得该多个经配置的第二实例中的每一个第二实例在这些主机系统中的一个或多个主机系统上执行;从本地数据存储区中取得这些第二实例之一的地址;以及根据取得的地址,从这些第一实例之一向这些第二实例之一提供来自这些第一实例之一的输出。
这些方面的其他实施例包括记录在一个或多个计算机存储设备上的对应的计算机系统、装置和计算机程序,这些计算机系统、装置和计算机程序各自被配置成一起或以任何组合来执行这些方法的动作。
除其他优点外,各方面实现了很大的灵活性(在识别主机容器中的模块的资源方面)和/或实现了在执行应用程序时计算资源的减少(尽管从容器内启动应用程序)。本文所描述的技术有助于更高效和/或灵活地使用执行计算机程序的计算系统的计算资源,并且因此增强和确保计算系统的适当内部功能。本文所描述的技术的另一技术效果是对在计算系统上执行的比如数据处理图等计算机程序的效果。进一步,更大数量的计算机程序部分(模块)可能能够同时执行,和/或一些计算机程序部分可能能够通过不必等待很长时间来获取执行所需的计算系统的必要计算资源而更快地开始。
通过以下描述并且通过权利要求,本发明的其他特征和优点将变得显而易见。
附图说明
图1、图3B和图4A、图4B各自是用于镜像实例的动态分布的系统的框图。
图2A至图2F展示了容器镜像的动态分布的时间序列。
图3A是数据处理图的图示。
图5是用于容器镜像的动态分布的过程的流程图。
具体实施方式
数据处理图在多个节点上动态地运行以获得动态并行水平。这些数据处理图是计算上密集的,具有大量的计算磁盘输入和输出(I/O)。为了减少磁盘I/O,这些数据处理图是从容器内启动的,这些容器与(托管容器的系统的)主机操作系统共享内核。通常,容器包括类、数据结构或其实例是其他对象的集合的抽象数据类型(ADT)。容器可以被实施为用于包含特定量的计算资源或包含识别特定量的计算资源的任何信息或其任何组合的任何合适的数据结构。容器以遵循特定访问规则的有组织的方式存储对象。调度、联网、磁盘I/O和对硬件的访问由内核提供。为了利用容器的优点,本文所描述的系统将这些容器(包括数据处理图)动态地分布在多个节点上。分布是动态的,因为在分配用于执行容器的节点的资源之前,哪些节点将执行哪些容器是未知的(例如,先前未定义或指定)。通过实施容器(包括数据处理图)的这种动态分布,系统实现了很大的灵活性(在识别用于托管容器的资源方面),并且实现了在执行数据处理图时计算资源的减少(尽管从容器内启动图)。
通常,数据处理图(例如,计算图)将包括多个组件,其中每个组件封装有可执行逻辑。可以指定每个组件以一定数量的方式并行运行,例如,跨多个不同的机器。因此,第一组件可以在五个不同的机器上执行,并且第二组件可以在两个不同的机器上执行。在该示例中,第一组件向第二组件输出数据。也就是说,第一组件在第二组件的上游。如本文所描述的,该系统的优点之一是该系统例如在运行时间动态地生成第一组件(包括在一台机器上执行的容器中)与第二组件(包括在不同的机器上执行的另一容器中)之间的连接(例如,通信信道或管道)。组件之间的连接不需要预先指定或预先配置。使用本文所描述的技术,可以在运行时间和在托管容器的系统上动态地建立连接。相反,现有技术系统不能动态地生成这些连接。因此,在现有技术系统中,所有的上游应用程序必须在数据被传输到下游应用程序之前完成执行,从而在应用程序的执行中产生延迟。也就是说,在现有技术系统中,应用程序是串行运行的,而不是在此描述的连续地运行。具体地,使用本文所描述的系统,数据流图(及其伴随组件)以减少的延迟连续且实时地执行,因为第一组件不需要等待所有第一组件完成执行即可将输出数据传输到第二组件。
参考图1,示出了网络环境100,在该网络环境中镜像的实例以动态分布启动。通常,镜像包括当被执行时产生应用程序运行时间环境的文件,该文件包括应用程序(例如,可执行应用程序)和用于执行该应用程序的运行时间环境(例如,系统工具、库、系统二进制和设置)。镜像的实例是指镜像的特定出现。存在各种类型的应用程序运行时间环境,包括例如容器。通常,应用程序运行时间环境通过与主机操作系统共享内核来使用轻量级操作系统级虚拟化。因此,调度、联网、磁盘输入/输出和对硬件的访问由内核提供。因此,与虚拟机相比,应用程序运行时间环境具有更快的启动时间、更好的资源分布、直接的硬件访问和更少的冗余。通常,动态分布(本文也称为动态布局)是指在执行应用程序(或其一部分)时实施的并行量,以及在运行时间指配(即,动态地指配)实施并行所需的资源,如US2018/0165129 A1中所描述的,该文献的全部内容通过援引并入本文。例如,容器镜像的实例(如本文所描述的)被动态地指配给主机系统上的节点,例如,通过在运行时间指配并且指配不是预先确定的。
环境100包括执行系统106和数据存储装置115。执行系统106是用于自动化应用程序部署、扩展和管理的系统(例如,Kubernetes系统)。数据存储装置115存储应用程序镜像118和代理镜像119。代理镜像119是容器镜像——容器的镜像。通常,镜像包括存储设备的内容的副本。在该示例中,应用程序镜像118也是容器镜像。在下文中,非限制性地并且出于方便的目的,代理镜像119可以被称为容器镜像119。通常,应用程序镜像包括被配置成请求启动其他镜像并进一步指示那些其他镜像如何执行的应用程序的镜像。在该示例中,应用程序镜像也是容器镜像。代理镜像119包括容器的镜像,该容器包括正被执行并且被配置成从应用程序镜像118接收关于如何执行的指示的应用程序(例如,如本文所描述的数据处理图)。
执行系统106包括用于与外部系统(例如,节点)通信的接口111。执行系统106还从数据存储装置115中取得应用程序镜像118和代理镜像119。执行系统106执行应用程序镜像118作为应用程序镜像118的实例108。执行系统106从代理镜像119启动代理镜像119的实例104、105。
应用程序镜像118(以及实例108)包括启动器子系统112、多路复用器子系统116和应用程序117。代理镜像119的实例104、105中的每一个包括代理服务107和应用程序109。多路复用器子系统116通过向接口111传输请求来启动代理镜像119的实例104、105。在该示例中,启动器子系统112请求启动代理镜像119的多个实例。在该示例中,接口111是应用编程接口(API)服务器。作为响应,API服务器启动代理镜像119的实例104、105。实例104、105中的每一个包括代理服务107和应用程序109,该应用程序是与应用程序117相同类型的应用程序(例如,应用程序109可以与应用程序117相同和/或应用程序109可以包括与应用程序117相同的模块)。启动器子系统112与代理服务107通信,以指示代理服务107由代理镜像119的特定实例执行应用程序109的哪些部分。代理服务107进而指示应用程序109要执行哪些部分(或组件)。
应用程序117是数据处理图(给出计算机程序的一个示例),该数据处理图包括由顶点之间的有向链路(表示工作元素的流,即数据)连接的顶点(表示数据处理组件(例如,可执行组件)或数据集)。除了这些数据流连接之外,一些数据处理图还具有用于确定组件之间的控制的流(例如,控制流)的控制流连接。在这种数据处理图中,程序部分是组件,并且这些程序部分根据其数据流链路相互关联。在其他示例中,程序部分是程序内被单独授予用于执行的计算资源的子模块或其他实体。程序部分被认为是相互关联的,达到这些程序部分所属的整个程序的执行能力取决于各个程序部分的能力的程度。这种相互关联或相互依赖的程序部分还可以相互依赖地执行。例如,一个程序部分可以从另一程序部分接收数据或向另一程序部分提供数据。此外,虽然程序部分被单独授予计算资源,但是这些程序部分可以以各种其他方式(例如,竞争有限供应的计算资源)重叠或相互依赖。
例如,在名称为“Managing Parameters for Graph-Based Applications[基于图的应用程序的参数管理]”的美国公开号2007/0011668中更详细地描述了这种用于开发基于图的计算的环境,该美国公开通过援引并入本文。在名称为“EXECUTING COMPUTATIONSEXPRESSED AS GRAPHS[执行表示为图的计算]”的美国专利号5,966,072中描述了用于执行这种基于图的计算的系统,该美国专利通过援引并入本文。根据该系统制成的数据处理图提供了用于将信息输入和输出由图组件表示的各个进程、用于在进程之间移动信息、以及用于为进程限定运行顺序的方法。该系统包括从任何可用方法中选择进程间通信方法的算法(例如,根据图的链路的通信路径可以使用TCP/IP或UNIX域套接字、或使用共享存储器以在进程之间传递数据)。
应用程序镜像118的实例108包括应用程序117(该应用程序与应用程序109相同),以使启动器子系统112能够识别应用程序117的各种组件或部分以及它们如何相互通信,以使实例108能够指示实例104、105如何相互通信(例如,当由实例105执行的一个组件需要由实例104执行的组件输出的输入数据时)。在该示例中,主机系统120被配置用于与执行系统106通信,例如,使得执行系统106可以在节点120a至120r中的一个或多个节点上启动容器镜像119的实例104、105。在该示例中,主机系统120是托管和运行(例如,执行)容器镜像119的实例的Kubernetes系统。
参考图2A至图2F,示出了容器镜像实例的动态分布的时间序列。参考图2A,环境101是第一时间(“T1”)的环境100(图1)的示例。在时间T1,执行系统106从数据存储装置115取得应用程序镜像118的实例108。如先前所描述的,应用程序镜像118是包括启动器子系统、多路复用器子系统和应用程序117的容器镜像。应用程序117是具有三个模块(模块1至3)的程序。每个模块指定要在该模块中实施的并行量。在该示例中,应用程序117包括指定给定模块的并行执行数量的规范,并且该规范例如由启动器子系统112在执行配置时访问。通常,并行量指的是特定模块例如在同一时间、同时地等执行的次数。模块1被配置成并行执行三次。模块2被配置成并行执行两次。模块3被配置成并行执行三次。参考图2B,示出了环境103。环境103是环境101(图1)在第二时间(“T2”)的版本。在该示例中,启动器子系统112根据指定的并行量向多路复用器子系统传送要为每个模块启动的容器镜像的多个实例。启动器子系统112指示多路复用器子系统116启动容器镜像119的三个实例122a至122c,并将这些实例122a至122c配置成执行模块一。因为模块一的并行量被配置为三,所以启动器子系统112指示多路复用器子系统116启动容器镜像119的三个实例122a至122c。作为响应,多路复用器子系统116请求接口111启动实例122a至122c,并且接口111启动实例122a至122c。
启动器子系统112指示多路复用器子系统116启动容器镜像119的三个实例124a至124b,并将这些实例124a至124b配置成执行模块二。因为模块二的并行量被配置为二,所以启动器子系统112指示多路复用器子系统116启动容器镜像119的两个实例124a至124b,其中实例124a至124b中的每一个实例被配置成执行模块二。作为响应,多路复用器子系统116请求接口111启动实例124a至124b,并且接口111启动执行系统106中的实例124a至124b。
启动器子系统112指示多路复用器子系统116启动容器镜像119的三个实例126a至126c,并将这些实例126a至126c配置成执行模块一。因为模块一的并行量被配置为三,所以启动器子系统112指示多路复用器子系统116启动容器镜像119的三个实例126a至126c。作为响应,多路复用器子系统116请求接口111启动实例126a至126c,并且接口111启动实例126a至126c。
参考图2C,示出了环境113。环境113是环境100(图1)在第三时间点(T3)的版本。在时间T3,启动器子系统112配置容器镜像119(图1)的实例122a、122b、122c。实例122a、122b、122c中的每一个包括代理服务和具有三个模块的应用程序。实例122a包括代理服务128和具有模块130a至130c的应用程序130。应用程序130、132、134中的每一个可以与应用程序117相同,和/或应用程序130、132、134中的每一个可以包括与应用程序117相同的模块。启动器子系统112将容器镜像119的实例122a、122b、122c中的每一个配置成例如通过向实例122a至122c中的每一个传输关于该实例应该执行哪个模块的指示来执行模块一(例如,应用程序130中的模块130a)。在该示例中,启动器子系统112通过查找应用程序117中指定的并行量来识别每个模块的并行量。
启动器子系统112配置容器镜像119(图1)的实例124a、124b。实例124a、124b中的每一个包括代理服务和具有三个模块的应用程序。实例124a包括代理服务131和具有模块132a至132c的应用程序132。启动器子系统112将容器镜像119的实例124a、124b中的每一个配置成例如通过向实例124a至124b中的每一个传输关于该实例应该执行哪个模块的指示来执行模块二(例如,应用程序132中的模块132b)。
启动器子系统112配置容器镜像119(图1)的实例126a、126b、126c。实例126a、126b、126c中的每一个包括代理服务和具有三个模块的应用程序。实例126a包括代理服务133和具有模块134a至134c的应用程序134。启动器子系统112将容器镜像119的实例126a、126b、126c中的每一个配置成例如通过向实例126a至126c中的每一个传输关于该实例应该执行哪个模块的指示来执行模块三(例如,应用程序134中的模块134c)。
参考图2D,示出了环境127。环境127是环境100(图1)在第四时间点(T4)的示例。在时间T4,执行系统106将容器镜像的实例传输或指配给主机系统120以在主机系统上执行。在该示例中,实例122a被指配给节点120d。接收到实例122a后,节点120d托管并执行容器镜像119(图1)的实例122a,由此对容器进行实例化。实例122b被指配给节点120e。接收到实例122b后,节点120e托管并执行容器镜像119(图1)的实例122b。类似地,实例122c、124a、124b、126a、126b、126c分别被指配给节点120f、120g、120i、120n、120o和120q。接收到实例122c、124a、124b、126a、126b、126c后,节点120f、120g、120i、120n、120o和120q(在主机系统120上)托管并执行容器镜像119(图1)的相应实例。
参考图2E,示出了环境140。环境140是环境100(图1)在第五时间点(T5)的版本。在时间T5,容器镜像122a在节点120d上被实例化为容器160。通常,当在节点(或其他计算系统)上运行的程序或应用程序中包括的命令将容器镜像作为模板并从其中产生接下来在节点上执行的容器时,容器镜像被实例化为容器。
容器镜像122a的实例化产生具有代理服务162的容器160,该代理服务对应于(例如,等同于)包括在容器镜像122a中的代理服务128。在一些示例中,代理服务128是代理服务镜像(即,代理服务的镜像)。在该示例中,当容器镜像122a被实例化时,代理服务162根据代理服务镜像进行实例化。容器镜像122a的实例化还产生应用程序164(包括在容器160中)。在该示例中,应用程序164包括模块164a、164b、164c。应用程序164对应于包括在容器镜像122a中的应用程序130。在一些示例中,应用程序130是应用程序镜像(即,应用程序的镜像)。在该示例中,当容器镜像122a被实例化时,应用程序164根据应用程序镜像进行实例化。
在容器160的执行期间,应用程序164将监测数据145传递回启动器子系统112,例如,以使启动器子系统能够跟踪应用程序164的进度并跟踪应用程序164中可能出现的错误。具体地,模块164a被配置成向代理服务162传输监测数据145,该代理服务进而与启动器子系统112通信并将监测数据145传递回启动器子系统112。启动器子系统112使用监测数据145来跟踪特定模块(例如,164a)何时已经完成执行,例如,使得启动器子系统112可以指示下一个模块执行(例如,同一节点上的下一个模块或不同节点上的下一个模块)。
参考图2F,示出了环境150。环境150是环境100(图1)在第六时间点(T6)的版本。环境150展示了容器160、170、176之间的节间通信(分别在主机系统上执行并根据容器镜像122a、124a、126a进行实例化)。
在该示例中,容器170包括代理服务172和应用程序174(具有模块174a、174b、174c)。在该示例中,应用程序174被配置成根据容器镜像124a的配置来执行模块174b,容器170根据该容器镜像进行实例化。
在该示例中,容器176包括代理服务180和应用程序178(具有模块178a、178b、178c)。在该示例中,应用程序178被配置成根据容器镜像126a的配置来执行模块178c,容器176根据该容器镜像进行实例化。在该示例中,容器160在节点120d(图2D)上执行,该节点是容器镜像122a被指配到的节点。容器172在节点120g(图2D)上执行,该节点是容器镜像124a被指配到的节点。容器176在节点120n(图2D)上执行,该节点是容器镜像126a被指配到的节点。
在该示例中,完整的应用程序由应用程序的各个模块执行,这些各个模块相互通信并将一个模块的输出传递给另一模块的输入,由此使整个应用程序能够跨多台机器执行。在该示例中,应用程序164、174、178中的每个模块被配置成与其他模块(例如,在不同节点上运行)或与执行系统106通信。
在该示例中,容器160被配置成执行模块164a以生成输出151并将输出151传输到容器170的模块174b。容器170进而被配置成使得当模块174b执行时,模块174的输出152被输入到容器176上的应用程序178的模块178c。容器176进而被配置成执行模块178c以生成输出153并将该输出传输回执行系统106,例如,以使执行系统能够监测哪些模块已经执行以及哪些模块已经完成执行。在该示例中,代理服务162、172、174中的每一个被配置成与启动器子系统112通信,例如,以将监测数据传输回启动器子系统,从而使启动器子系统112能够跟踪容器执行的进度。
在该示例中,容器160、170、176能够自动生成彼此之间的连接(例如,管道或通信信道)。在该示例中,容器160包括本地数据存储区160a,该本地数据存储区包括模块164a的输出地址。在该示例中,数据存储区160a存储容器170上的模块174b的地址。在将容器指配给节点期间,主机系统120向执行系统106传送实例被指配到的节点的地址。启动器子系统112(或者更一般地,执行系统106)进而例如基于应用程序117的内容来识别哪些模块需要向其他模块传输信息。也就是说,启动子系统识别上游模块和下游模块。使用接收到的地址信息,启动子系统112向本地数据存储区传输输出数据被传输到的模块的地址。
在该示例中,容器160、170、176分别包括本地数据存储区160a、170a、176a。启动器子系统112向本地数据存储区160a传输模块174b的地址,向本地数据存储区170a传输模块178c的地址,并向本地数据存储区176a传输指令以将输出数据传输回执行系统106。
执行完成后,模块164a在本地数据存储区160a中查找数据结构的地址以输出模块164a的输出。查找到的地址指定模块174b。使用该地址,模块164a通过链路151a将输出151传输到模块174b。在一些示例中,模块164a例如通过建立到模块174b的通信信道来建立链路151a。一旦模块164a已经完成执行,通过动态地建立链路151a,减少了在开始执行模块174b时的延迟。
执行完成后,模块174b在本地数据存储区170a中查找数据结构的地址以输出模块174b的输出。查找到的地址指定模块178c。使用该地址,模块174b通过链路152a将输出152传输到模块178c。在一些示例中,模块174b例如通过建立到模块178c的通信信道来建立链路152a。一旦模块174b已经完成执行,通过动态地建立链路152a,减少了在开始执行模块178c时的延迟。
执行完成后,模块178c在本地数据存储区176a中查找数据结构的地址以输出模块178c的输出。查找到的地址指定执行系统106。使用该地址,模块178c通过链路153a将输出153传输到执行系统106。在一些示例中,模块178c例如通过建立到执行系统的通信信道来建立链路153a。
在该示例中,模块164a能够例如在模块164a的启动时间从数据存储区160a中查找输出151的地址。在另一示例中,模块164a在处理数据时查找该地址。基于这些查找,模块164a、174b、178c能够例如连续地且实时地流式传输数据,而不必将数据存放到磁盘。在现有技术系统中,数据必须存放到磁盘以对数据进行重新分区。相反,本文所描述的系统能够通过能够查找输出节点的地址来实时地且连续地对数据进行重新分区,而无需将该数据存放到磁盘。
参考图3A,数据处理图200包括组件202至210。数据处理图200还包括组件的部分或分组。数据处理图200包括部分212和部分214。部分212包括组件202至206。部分214包括组件208、210。部分212以两种方式并行运行,并且部分214以四种方式并行运行。
参考图3B,图示201展示了部分212、214(图3A)的并行执行。应用程序镜像118(图1)的实例108启动代理镜像119(图1)的两个实例216、218来执行以两种方式并行运行的部分212(图3A)。启动器子系统指示实例216、218中的每一个以执行组件202、204、206。应用程序镜像118(图1)的实例108启动代理镜像119(图1)的四个实例220至226来执行以四种方式并行运行的部分214(图3A)。启动器子系统指示实例220至226中的每一个以执行组件208、210。
计算资源分配
参考图4A,环境300包括执行系统106、数据源302和主机集群306,用于使用主机集群306的计算资源来处理来自数据源302的数据,该主机集群包括可以跨多个主机(例如,比如服务器等计算集群)分布的计算资源。在图4A中,有三个主机:第一主机H1 336、第二主机H2 338和第三主机H3 340。每个主机包括有限量的计算资源,这些计算资源合起来包括主机集群306的总计算资源。由执行系统106管理和分配的计算资源的示例可以包括以下任何一个:主机处理器的使用份额(例如,被指定为映射到一个或多个多核处理器的物理核的虚拟核)、主机的易失性存储器的一部分(例如,指定主机的主存储器空间的量)、主机的非易失性存储器的一部分(例如,被指定为主机的硬盘驱动器存储空间的量)、或通信信道的使用份额(例如,主机的以太网接口的带宽的一部分)。计算资源的单个单元可以包括多种类型的资源,比如指定数量的CPU或虚拟核以及指定量的主存储器。
执行系统106包括资源请求模块322。主机集群306包括资源管理器320。资源请求模块322与资源管理器320交互以将计算资源分配给组件,使得当另一组件缺乏计算资源时,没有一个组件被分配超过其需要的计算资源。
为了简化对本文所描述的计算资源分配方法的解释,主机的计算资源被表示为计算资源单元(在主机内被展示为正方形),这些计算资源单元都被示出为具有相同的粒度(即,可以被授权的最小大小)。然而,应注意,计算资源不一定被分割成具有固定且相等粒度的单元,而是可以被分割成各种粒度的单元或可以使用其他替代性的方法进行分配。此外,为了简化对本文所描述的计算资源分配方法的解释,图4A的主机集群306中的所有主机被示出为具有相同数量(即,16个)的计算资源单元。然而,应注意,通常不同的主机可以具有不同量的计算资源。
资源管理器320接收对计算资源的请求,并且基于主机集群306的主机中的可用计算资源的量来授予或拒绝这些请求。这种资源管理器320的一个示例包括“Hadoop YARN”资源管理器,该资源管理器能够接收对用于执行计算机程序(或程序部分)的计算资源的请求,并且如果有足够的计算资源可用,则授予具有一定数量的计算资源单元的“工作空间”供程序使用,其中工作空间可以被实施为任何合适的数据结构,该数据结构用于包含特定量的计算资源,或者包含识别特定量的计算资源的任何信息,或其任何组合。然后,计算机程序可以使用授予工作空间中的计算资源来执行。在一些示例中,计算机程序可以从主机集群306一次请求多个资源工作空间(例如,用于运行程序的一部分的并发实例的多个工作空间)。如果有足够的资源可供资源管理器320向计算机程序授予所有请求的多个工作空间,则该资源管理器将这样做。否则,基于可用资源,资源管理器320可以仅授予一些所请求的工作空间(即,小于所请求的工作空间总数的整数个工作空间),或者资源管理器320可以不授予任何所请求的工作空间。在一些实施方式中,与给定工作空间相关联的所有计算资源都源自单个主机。替代性地,在其他实施方式中,给定工作空间的资源可以源自多个主机。
如下文更详细描述的,资源请求模块322以确保满足由数据处理图200施加的多个约束和/或以更平衡的方式满足该多个约束的方式与资源管理器320交互。
如先前所描述的,数据处理图200是用于处理从数据源302接收到的数据的计算机程序的规范。数据处理图200包括多个相互关联的组件,这些组件包括第一组件202、第二组件204、第三组件206、第四组件208和第五组件210。
通常,数据处理图的每个组件可以与一个或多个约束相关联。这种约束可以由指定与组件的并行化相关的约束的“布局”提供。布局中指定的约束之一是“布局类型”,其可以采用包括固定深度动态布局(FDL)类型的多个值之一。不同的布局类型指定了与组件执行时并行执行的组件的实例数量相关的约束。这些组件实例中的每一个将消耗计算资源,因此具有特定布局的组件所需的计算资源的目标量直接由该组件的组件实例的对应目标数量决定。
动态布局类型(FDL)可以指配实例以在与存储该实例要操作的数据的主机不同的主机上执行,这可以提供增加的灵活性,但只能通过降低局部性进行权衡。不过,如果局部性对于特定的计算并不重要,则该权衡可能是值得的。
具有FDL类型的组件具有在主机集群306上执行以使数据处理图200成功运行所需的预定义的固定目标数量的组件实例。对于具有FDL类型的组件的组件实例在哪里(即,在主机集群306的哪些主机上)执行没有限制。
动态布局类型(例如,FDL)的潜在优势是即使在特定(例如,本地)主机上没有可用的计算资源,只要在集群中的某个主机上有可用的计算资源,计算也能够开始的灵活性。另一潜在的优势是,如果计算由于一个或多个主机的故障而失败,则该计算可能能够在不同的主机集上重新启动。
FDL类型的另一潜在优势是固定并行度(即实例的数量)以限制因等待满足更大并行度的请求而导致的启动时间延迟的能力。
在图4A的示例性数据处理图200中,组件202至210中的每一个具有FDL类型。组件202至206各自需要在主机集群306上运行两个组件实例,而对于组件实例在哪里(即,在主机集群306的哪些主机上)运行没有限制。组件208、210中的每一个需要在主机集群306上运行四个组件实例,而对于组件实例在哪里(即,在主机集群306的哪些主机上)运行没有限制。如本文所描述的,数据处理图200的第一部分包括组件202至206,并且该第一部分以两种方式并行运行,因此需要组件202至206在两个实例324、326中运行。在该示例中,(图1中的代理镜像的)实例324、326由应用程序镜像118(图1)的实例108(图1)启动。针对部分212(图3A)启动两个实例324、326,因为部分212(图3A)需要以两种方式并行运行。实例324、326中的每一个仅执行组件202至206。数据处理图200的第二部分包括组件208、210,并且该第二部分以四种方式并行运行,因此需要组件208、210在四个实例370至376中运行(如图4B所示)。
数据处理图200中的组件中的每一个被配置成处理来自数据源302中的数据集的数据元素(例如,块、文件或记录)。在一些示例中,块是文件中包括一个或多个记录的数据的一部分。在图3A、图3B中,第一组件202处理来自第一数据集342的第一数据元素352,第二组件204处理来自第二数据集344的第二数据元素354,第三组件206处理来自第三数据集346的第三数据元素356,并且第四组件208处理来自第四数据集348的第四数据元素358。在下文所描述的示例中,执行系统106的一部分分析与每个组件相关联的数据集,以基于数据元素的数量来确定不同组件的实例的目标数量,并因此确定计算资源的目标量。但是,在其他示例中,计算资源的目标数不仅仅基于相关联的数据集中的数据数量,而是可以替代地(或者还)取决于其他因素,比如显式或隐式的用户需求、历史或估计的性能数据或其组合。应注意,不要求每个组件都与不同的数据集相关联。例如,许多组件可以都处理来自(多个)相同数据集中的一个或多个数据集的数据。
资源分配
给定与数据处理图200中的组件相关联的布局约束,只有在组件202至206中的每一个的两个实例在主机集群306上执行并且组件208至210中的每一个的四个实例在主机集群306上执行时,数据处理图200才能成功运行。
如果资源请求模块322知道数据处理图200的组件的实例总数所需的资源以及主机集群306中可用的资源,则可以使用打包优化问题的解决方案来执行通过资源管理器320为数据处理图200分配计算资源的任务。然而,通常情况下,资源请求模块322不知道主机集群306中可用的资源。相反,资源请求模块322简单地向资源管理器320请求资源,并等待查看是否授予所请求的资源。
参考图4A至图4B,执行系统106准备执行数据处理图200。资源请求模块322分析数据处理图200的部分和组件以确定组件中的每一个的资源需求。资源请求模块322确定第一组件202的每个实例需要五个计算资源单位,第二组件204的每个实例需要三个计算资源单位,第三组件206的每个实例需要四个计算资源单位,第四组件208的每个实例需要五个计算资源单位,并且第五组件210的每个实例需要两个计算资源单位。
参考图4A,资源请求模块322与资源管理器320交互以为数据处理图200的第一部分的实例324、326分配资源,其中第一部分包括组件202、204、206。为此,资源请求模块322向资源管理器320发送对来自主机336、338、340的两个工作空间(即,一个用于包括组件202、204、206的部分的每个所需实例)的请求350,每个工作空间具有十二个计算资源单元的大小。资源管理器320在第一主机336上分配九个计算资源单元,在第二主机338上分配八个计算资源单元,并且在第三主机340上分配七个计算资源单元。资源管理器320以指示该资源管理器能够分配所请求的计算资源并且因此满足请求350的消息352进行响应。对于两个工作空间,每个工作空间包括为第一组件202、第二组件204和第三组件206分配的十二个计算资源单元,第一组件202、第二组件204和第三组件206被100%满足,如数据处理图200执行所需要的。
参考图4B,资源请求模块322与资源管理器320交互以为数据处理图200的第二部分(包括组件208、210)的实例370、372、374、376分配资源。为此,资源请求模块322从任何主机向资源管理器320发送对四个工作空间(即,一个用于该部分的每个所需实例)的请求360,每个工作空间具有五个计算资源单元的大小(这是一起执行组件208、210所需的计算资源单元的量)。资源管理器320在第一主机336上分配四个计算资源单元,在第二主机338上分配七个计算资源单元,并且在第三主机340上分配九个计算资源单元。资源管理器320然后以指示该资源管理器能够分配所请求的计算资源并且因此满足请求360的消息362进行响应。对于四个工作空间,每个工作空间包括为数据处理图200的第二部分分配的五个计算资源单元,第二部分被100%满足,如数据处理图200执行所需要的。
参考图5,示出了用于根据动态布局来启动指定镜像的多个实例的过程400,其中该指定镜像包括具有多个可执行组件的多组件程序(例如,数据处理图),并且动态布局为可执行组件中一个或多个可执行组件中的每一个指定在执行该可执行组件时实施的并行量。
在该示例中,过程400由用于使容器镜像的实例在多个主机系统上执行的数据处理系统(例如,执行系统106)实施,其中,每个容器镜像包括具有多个模块的第一应用程序,并且其中,实例被配置成根据给定模块的确定的并行执行数量来执行该给定模块。在操作中,数据处理系统从数据存储装置115(图1)访问(402)容器镜像119(图1),该容器镜像包括第一应用程序(例如,图1中的应用程序109)和第二应用程序(例如,图1中的代理服务107),其中,第二应用程序引起数据处理系统与执行实例(例如,图1中的实例104或实例105)的主机系统(例如,图1中的主机系统120)之间的通信。数据处理系统确定(404)第一应用程序的给定模块(例如,图2C中的模块130a)的并行执行数量。
对于给定模块,数据处理系统根据所确定的并行执行数量来生成(406)容器镜像的一个或多个实例(图2C中的实例122a至122c),其中,每个实例包括第一应用程序和第二应用程序。对于每个实例,数据处理系统将该实例配置(408)成例如通过从启动器子系统112向实例122a传输关于执行哪个模块的指示来执行第一应用程序的给定模块。
数据处理系统使得(410)多个经配置的实例中的每一个在主机系统中的一个或多个主机系统上执行。对于多个经配置的实例中的至少一个,数据处理系统通过该经配置的实例的第二应用程序引起(412)数据处理系统与执行该经配置的实例的这些主机系统中的一个或多个主机系统之间的通信。
具有容器和动态布局的弹性处理
本文所描述的技术使得能够利用容器和动态布局进行弹性处理。具体地,随着时间的推移,已经出现了虚拟化增加的趋势,并且在一定程度上,计算与磁盘位置分离。因此,可能存在服务器集群,并且可能需要在资源空闲的地方执行应用程序。例如,服务器(“服务器A”)可能很忙,因为应用程序现今在服务器A上运行了很长时间,但是集群中有一个空服务器(“服务器B”)。在该示例中,应用程序现今将在服务器B上运行。但是,明天在服务器B上运行的另一应用程序可能会运行很长时间。因此,明天,应用程序在服务器A上运行。在静态配置中,哪些服务器执行哪个应用程序的配置是静态的或提前指定的。在动态配置或动态布局中,取决于可用资源,哪些服务器执行哪个应用程序以及何时执行的配置是灵活的。可执行程序和容器技术的组合提供了在应用程序启动时可用的资源上运行可扩展分布式并行应用程序的能力。
容器从根本上来说是控制进程在系统内能看到什么和能访问什么的机制。可以利用这些来实施与通过虚拟化平台在虚拟机(VM)上运行而实现的性能非常相似的策略。然而,容器的重量比虚拟机轻得多。虚拟机的问题之一是当VM运行时,操作系统的完整副本会运行,并且这将消耗数千兆字节的磁盘空间,并且在运行时这将消耗数千兆字节的内存。对于容器技术,内核(例如,Linux内核)是共享的。磁盘占用空间也是共享的。因此,容器比虚拟机更高效。使用容器,I/O性能得到了显著提高。磁盘占用空间和内存占用空间更低。启动时间大幅度地减少。由于应用程序在容器内部运行,因此操作系统已经启动并运行。如果启动了虚拟机,则应用程序必须等待操作系统启动。容器提供可预测的环境。所以,在开发中测试的就是在生产中运行的。容器还提供隔离。因此,如果一个应用程序需要修补或错误修复,则该应用程序的修补不会影响另一应用程序。
跨集群向外扩展
数据流图(例如,数据处理图)和其他执行应用程序在这些容器平台中执行,无论是微服务架构还是大规模批量应用程序正在被实施。当容器运行时,容器只运行该图。因此,对于服务架构,实施了容器的多个实例。批量图可以在单个容器内部运行,但是实施方式将受限于单个容器可用的资源,并且根据定义,容器受限于其运行的机器中可用的资源。这并没有真正提供跨尽可能多的可用服务器向外扩展以及提供对尽可能多的实际需要的计算能力的灵活性。因此,为了向外扩展批量图并跨有大量核和大量可用的内存资源的集群运行,需要实施动态布局。
扩展动态布局
通过动态布局,应用程序能够跨多台服务器分布式并行运行。另外,通过容器技术,可以将应用程序打包使得该应用程序被隔离。通过本文所描述的技术,系统实施并利用批量图、容器、动态布局和可扩展资源。例如,图和操作系统为使用容器运行的动态布局提供支持。因此,开发人员可以编写图并为该图中的组件定义动态布局,并指定具有计算资源集群的容器基础结构,并且该图应该跨集群执行。开发人员可以简单地将图或该图中的特定组件应该并行运行的方式的数量插入到图的动态布局参数中。也就是说,系统不是在一个实例内运行容器和所有逻辑以及所有内容,而是被配置成基于应用程序被指定以多少种并行方式运行来执行多个容器,并且然后使应用程序能够动态地扩展这些容器(例如,跨这些容器执行)。
在运行时,当该容器出现时,本文所描述的系统将与协调平台(例如,Kubernetes、Marathon、YARN或另一调度器)通信,并确保该图将跨整个集群执行,数据将流式传输,并且该图将利用集群中可用的计算内存资源。所有这些都是通过配置数据流图时的动态布局参数来实现的。动态布局与容器的组合使多个容器能够在执行单个应用程序时实施。
也就是说,通过容器化技术和动态布局,本文所描述的系统可以执行容器的多个实例,并利用那些实例来获得跨批量应用程序的可扩展性。通过容器和动态布局,本文所描述的系统是完全可扩展和动态的,并且具有独立于存储实际存在的弹性计算能力。
本文所描述的技术可以例如使用执行合适的软件指令的可编程计算系统来实施,或者可以在比如现场可编程门阵列(FPGA)等合适的硬件中或以某种混合形式实施。例如,在程控方法中,软件可以包括一个或多个计算机程序中的在一个或多个程控的或可编程计算系统(其可以是各种体系架构,诸如分布式客户端/服务器、或电网)上执行的程序,该计算系统各自包括至少一个处理器、至少一个数据存储系统(包括易失性和/或非易失性存储器和/或存储元件)、至少一个用户接口(用于使用至少一个输入设备或端口接收输入,并且用于使用至少一个输出设备或端口提供输出)。软件可以包括较大程序的一个或多个模块,该较大程序例如提供与对数据流图的设计、配置、和执行有关的服务。程序模块(例如,数据流图的元素)可以被实施为数据结构或符合存储在数据储存库中的数据模型的其他经组织的数据。
软件可以以非暂态形式存储,比如体现在易失性或非易失性存储介质中、或任何其他非暂态介质中,在延长的时间段(例如,比如动态RAM等动态存储器设备的刷新周期之间的时间)使用介质的物理性质(例如,表面凹坑和岸台、磁畴、或电荷)。在准备加载包括在以非暂态形式存储的软件中的指令时,软件可以提供在比如CD-ROM或其他计算机可读介质(例如,可由通用或专用计算系统或设备读取)等有形、非暂态介质上,或者可以通过网络的通信介质递送(例如,在传播信号中编码)到其被执行的计算系统的有形、非暂态介质。该处理的一些或全部可以在专用计算机上执行,或者使用比如协处理器或现场可编程门阵列(FPGA)或专门的专用集成电路(ASIC)等专用硬件来执行。该处理可以以分布式方式来实施,其中由软件指定的计算的不同部分由不同的计算元件执行。每一个这种计算机程序优选地存储在或下载到可由通用或专用可编程计算机访问的存储设备的计算机可读存储介质(例如,固态存储器或介质、或磁性介质或光学介质)上,以在计算机读取存储设备介质以执行本文所描述的处理时对计算机进行配置和操作。也可以认为本发明的系统被实施为配置有计算机程序的有形非暂态介质,其中,如此配置的介质使得计算机以特定和预定义的方式操作以执行本文所描述的处理步骤中的一个或多个处理步骤。
已经描述了本发明的多个实施例。然而,应当理解,前述描述旨在说明而非限制本发明的范围,本发明的范围由所附权利要求书的范围限定。因此,其他实施例也在所附权利要求书的范围内。例如,在不背离本发明的范围的情况下,可进行各种修改。另外,上述步骤中的一些可以是顺序独立的,并且因此可以以与所描述的顺序不同的顺序来执行。
Claims (32)
1.一种由数据处理系统实施的用于使容器镜像的实例在多个主机系统上执行的方法,其中,每个容器镜像包括具有多个模块的第一应用程序,并且其中,这些实例被配置成根据给定模块的确定的并行执行数量来执行该给定模块,其中,该方法包括:
访问包括该第一应用程序和第二应用程序的容器镜像,其中,该第二应用程序引起该数据处理系统与执行该容器镜像的实例的主机系统之间的通信;
由该数据处理系统确定该第一应用程序的给定模块的并行执行数量;
对于该给定模块,根据确定的并行执行数量来生成该容器镜像的多个实例,其中,每个实例包括该第一应用程序和该第二应用程序;
对于每个实例,将该实例配置成执行该第一应用程序的给定模块;
使得该多个经配置的实例中的每一个实例在这些主机系统中的一个或多个主机系统上执行;以及
对于该多个经配置的实例中的至少一个实例,由该经配置的实例的第二应用程序引起该数据处理系统与执行该经配置的实例的这些主机系统中的一个或多个主机系统之间的通信。
2.如权利要求1所述的方法,还包括访问指定该给定模块的并行执行数量的规范。
3.如权利要求1所述的方法,其中,该容器镜像是第一容器镜像,并且其中,该方法还包括:
从硬件存储设备访问第二容器镜像的实例,其中,该第二容器镜像包括该第一应用程序并指定该第二应用程序中每个模块的并行量;以及
将该第二容器镜像存储在执行系统上。
4.如权利要求3所述的方法,还包括:
从该第二容器镜像的实例向包括在该执行系统中的接口传输请求,以根据该确定的并行执行数量生成该容器镜像的多个实例。
5.如权利要求1所述的方法,还包括:
将该多个经配置的实例中的每一个实例指配给这些主机系统中的一个或多个主机系统。
6.如权利要求5所述的方法,其中,指配是通过在运行时间指配每个经配置的实例来动态地执行的,并且这些指配不是预先确定的。
7.如权利要求6所述的方法,其中,该第一应用程序是具有多个组件的数据流图,该方法还包括:
对于每个组件,根据为该组件确定的并行执行数量来生成该容器镜像的多个实例;以及
在多个节点上动态地运行数据流图,以通过以下方式获得动态并行水平:
对于每个组件,
将生成的实例动态地指配给这些主机系统的一个或多个节点;以及
使得该多个指配的实例中的每一个实例在这些主机系统的一个或多个节点上执行。
8.如权利要求1所述的方法,其中,该数据处理系统与执行该经配置的实例的这些主机系统中的一个或多个主机系统之间的通信包括:
由该给定模块向该第二应用程序传输监测数据,以及由该第二应用程序将该监测数据传递给该数据处理系统,其中,该监测数据被配置成由该数据处理系统使用以跟踪该给定模块何时已经完成执行,以便该数据处理系统指示另一模块执行。
9.如权利要求1所述的方法,其中,该给定模块是第一模块,其中,该生成的多个实例是多个第一实例,并且其中,这些操作还包括:
由该数据处理系统确定该第一应用程序的第二模块的并行执行数量;
对于该第二模块,根据为该第二模块确定的并行执行数量来生成该容器镜像的多个第二实例,其中,每个第二实例包括该第一应用程序和该第二应用程序;
对于每个第二实例,将该第二实例配置成执行该第一应用程序的第二模块;
使得该多个经配置的第二实例中的每一个第二实例在这些主机系统中的一个或多个主机系统上执行;以及
从本地数据存储区中取得这些第二实例之一的地址;以及
根据取得的地址,从这些第一实例之一向这些第二实例之一提供来自这些第一实例之一的输出。
10.一种用于根据动态布局来启动指定镜像的多个实例的系统,其中,该指定镜像包括具有多个可执行组件的多组件程序,并且该动态布局为这些可执行组件中的一个或多个可执行组件中的每一个指定在执行该可执行组件时实施的并行量,该系统包括:
存储器,该存储器被配置成存储应用程序镜像和代理镜像,其中,该应用程序镜像和该代理镜像中的每一个被配置成共享该镜像的主机的操作系统的内核,其中,该应用程序镜像包括请求启动该代理镜像的多个实例的启动器进程,其中,该代理镜像包括被配置成与该应用程序镜像的启动器进程通信的代理进程,并且其中,该代理镜像还包括多组件程序,该多组件程序包括多个可执行组件;
执行系统,该执行系统被配置成从存储器取得该应用程序镜像以在该执行系统上产生该应用程序镜像的实例,其中,该应用程序镜像的实例包括该启动器进程,其中,该执行系统还被配置成通过该启动器进程请求根据指定的动态布局来启动该代理镜像的多个实例,该指定的动态布局为这些可执行组件中的一个或多个可执行组件中的每一个指定在跨托管该代理镜像的实例的多个主机中的一个或多个主机上执行该可执行组件时实施的并行量;以及
接口,该接口被配置成响应于从该应用程序镜像的实例接收到请求而根据该指定的动态布局来启动该代理镜像的多个实例,其中,该代理镜像的每个启动实例的每个代理服务被配置成与该启动器进程通信以得到关于执行哪个可执行组件的指示。
11.如权利要求10所述的系统,其中,该多组件程序是数据处理图。
12.如权利要求10所述的系统,还包括:
具有多个主机系统的主机集群,其中,每个主机系统包括多个计算资源;
其中,每个可执行组件需要指定量的计算资源;
其中,该动态布局指定该多组件程序的部分被执行的次数;
其中,该主机集群被配置成根据该动态布局并根据该多组件程序的该部分中的可执行组件所需的计算资源量跨这些主机系统中的一个或多个主机系统来为该部分分配该部分所需的计算资源量。
13.如权利要求10所述的系统,其中,该应用程序镜像的实例是容器,并且其中,该代理镜像的实例是容器。
14.如权利要求10所述的系统,还包括:
主机集群,该主机集群被配置成:
接收关于执行该多组件程序的哪个部分的指示;并且
传输指定执行状态的数据。
15.如权利要求10所述的系统,其中,该应用程序镜像的实例和该代理镜像的实例中的每一个被配置成与主机操作系统共享内核。
16.一个或多个机器可读硬件存储设备,用于使容器镜像的实例在多个主机系统上执行,其中,每个容器镜像包括具有多个模块的第一应用程序,并且其中,这些实例被配置成根据给定模块的确定的并行执行数量来执行该给定模块,其中,该一个或多个机器可读硬件存储设备存储可由数据处理系统执行的指令以执行包括以下各项的操作:
访问包括该第一应用程序和第二应用程序的容器镜像,其中,该第二应用程序引起该数据处理系统与执行该容器镜像的实例的主机系统之间的通信;
由该数据处理系统确定该第一应用程序的给定模块的并行执行数量;
对于该给定模块,根据确定的并行执行数量来生成该容器镜像的多个实例,其中,每个实例包括该第一应用程序和该第二应用程序;
对于每个实例,将该实例配置成执行该第一应用程序的给定模块;
使得该多个经配置的实例中的每一个实例在这些主机系统中的一个或多个主机系统上执行;以及
对于该多个经配置的实例中的至少一个实例,由该经配置的实例的第二应用程序引起该数据处理系统与执行该经配置的实例的这些主机系统中的一个或多个主机系统之间的通信。
17.如权利要求16所述的一个或多个机器可读硬件存储设备,其中,这些操作还包括访问指定给定模块的并行执行数量的规范。
18.如权利要求16所述的一个或多个机器可读硬件存储设备,其中,该容器镜像是第一容器镜像,并且其中,这些操作还包括:
从硬件存储设备访问第二容器镜像的实例,其中,该第二容器镜像包括该第一应用程序并指定该第二应用程序中每个模块的并行量;以及
将该第二容器镜像存储在执行系统上。
19.如权利要求18所述的一个或多个机器可读硬件存储设备,其中,这些操作还包括:
从该第二容器镜像的实例向包括在该执行系统中的接口传输请求,以根据该确定的并行执行数量生成该容器镜像的多个实例。
20.如权利要求16所述的一个或多个机器可读硬件存储设备,其中,这些操作还包括:
将该多个经配置的实例中的每一个实例指配给这些主机系统中的一个或多个主机系统。
21.如权利要求20所述的一个或多个机器可读硬件存储设备,其中,指配是通过在运行时间指配每个经配置的实例来动态地执行的,并且这些指配不是预先确定的。
22.如权利要求21所述的一个或多个机器可读硬件存储设备,其中,该第一应用程序是具有多个组件的数据流图,其中,这些操作还包括:
对于每个组件,根据为该组件确定的并行执行数量来生成该容器镜像的多个实例;以及
在多个节点上动态地运行数据流图,以通过以下方式获得动态并行水平:
对于每个组件,
将生成的实例动态地指配给这些主机系统的一个或多个节点;以及
使得该多个指配的实例中的每一个实例在这些主机系统的一个或多个节点上执行。
23.如权利要求16所述的一个或多个机器可读硬件存储设备,其中,该给定模块是第一模块,其中,该生成的多个实例是多个第一实例,并且其中,这些操作还包括:
由该数据处理系统确定该第一应用程序的第二模块的并行执行数量;
对于该第二模块,根据为该第二模块确定的并行执行数量来生成该容器镜像的多个第二实例,其中,每个第二实例包括该第一应用程序和该第二应用程序;
对于每个第二实例,将该第二实例配置成执行该第一应用程序的第二模块;
使得该多个经配置的第二实例中的每一个第二实例在这些主机系统中的一个或多个主机系统上执行;以及
使得在这些第一实例之一与这些第二实例之一之间建立通信信道,其中,这些第一实例之一输出数据并通过该通信信道将该输出数据传输到这些第二实例之一。
24.一种数据处理系统,用于使容器镜像的实例在多个主机系统上执行的方法,其中,每个容器镜像包括具有多个模块的第一应用程序,并且其中,这些实例被配置成根据给定模块的确定的并行执行数量来执行该给定模块,其中,该数据处理系统包括:
一个或多个处理器;以及
一个或多个机器可读硬件存储设备,其存储可由所述一个或多个处理器执行的指令以执行包括以下各项的操作:
访问包括该第一应用程序和第二应用程序的容器镜像,其中,该第二应用程序引起该数据处理系统与执行该容器镜像的实例的主机系统之间的通信;
由该数据处理系统确定该第一应用程序的给定模块的并行执行数量;
对于该给定模块,根据确定的并行执行数量来生成该容器镜像的多个实例,其中,每个实例包括该第一应用程序和该第二应用程序;
对于每个实例,将该实例配置成执行该第一应用程序的给定模块;
使得该多个经配置的实例中的每一个实例在这些主机系统中的一个或多个主机系统上执行;以及
对于该多个经配置的实例中的至少一个实例,由该经配置的实例的第二应用程序引起该数据处理系统与执行该经配置的实例的这些主机系统中的一个或多个主机系统之间的通信。
25.如权利要求24所述的数据处理系统,其中,这些操作还包括访问指定该给定模块的并行执行数量的规范。
26.如权利要求24所述的数据处理系统,其中,该容器镜像是第一容器镜像,并且其中,这些操作还包括:
从硬件存储设备访问第二容器镜像的实例,其中,该第二容器镜像包括该第一应用程序并指定该第二应用程序中每个模块的并行量;以及
将该第二容器镜像存储在执行系统上。
27.如权利要求26所述的数据处理系统,这些操作还包括:
从该第二容器镜像的实例向包括在该执行系统中的接口传输请求,以根据该确定的并行执行数量生成该容器镜像的多个实例。
28.如权利要求24所述的数据处理系统,这些操作还包括:
将该多个经配置的实例中的每一个实例指配给这些主机系统中的一个或多个主机系统。
29.如权利要求28所述的数据处理系统,其中,指配是通过在运行时间指配每个经配置的实例来动态地执行的,并且这些指配不是预先确定的。
30.如权利要求29所述的数据处理系统,其中,该第一应用程序是具有多个组件的数据流图,这些操作还包括:
对于每个组件,根据为该组件确定的并行执行数量来生成该容器镜像的多个实例;以及
在多个节点上动态地运行数据流图,以通过以下方式获得动态并行水平:
对于每个组件,
将生成的实例动态地指配给这些主机系统的一个或多个节点;以及
使得该多个指配的实例中的每一个实例在这些主机系统的一个或多个节点上执行。
31.如权利要求24所述的数据处理系统,其中,该数据处理系统与执行该经配置的实例的这些主机系统中的一个或多个主机系统之间的通信包括:
由该给定模块向该第二应用程序传输监测数据,以及由该第二应用程序将该监测数据传递给该数据处理系统,其中,该监测数据被配置成由该数据处理系统使用以跟踪该给定模块何时已经完成执行,以便该数据处理系统指示另一模块执行。
32.如权利要求24所述的数据处理系统,其中,该给定模块是第一模块,其中,该生成的多个实例是多个第一实例,并且其中,这些操作还包括:
由该数据处理系统确定该第一应用程序的第二模块的并行执行数量;
对于该第二模块,根据为该第二模块确定的并行执行数量来生成该容器镜像的多个第二实例,其中,每个第二实例包括该第一应用程序和该第二应用程序;
对于每个第二实例,将该第二实例配置成执行该第一应用程序的第二模块;
使得该多个经配置的第二实例中的每一个第二实例在这些主机系统中的一个或多个主机系统上执行;以及
从本地数据存储区中取得这些第二实例之一的地址;以及
根据取得的地址,从这些第一实例之一向这些第二实例之一提供来自这些第一实例之一的输出。
Applications Claiming Priority (5)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201962844430P | 2019-05-07 | 2019-05-07 | |
| US62/844,430 | 2019-05-07 | ||
| US16/656,886 US11836505B2 (en) | 2019-05-07 | 2019-10-18 | Dynamic distribution of container images |
| US16/656,886 | 2019-10-18 | ||
| PCT/US2020/031772 WO2020227467A1 (en) | 2019-05-07 | 2020-05-07 | Dynamic distribution of container images |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN114174991A CN114174991A (zh) | 2022-03-11 |
| CN114174991B true CN114174991B (zh) | 2025-09-26 |
Family
ID=73046297
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202080049185.9A Active CN114174991B (zh) | 2019-05-07 | 2020-05-07 | 容器镜像的动态分布的方法、系统和存储设备 |
Country Status (8)
| Country | Link |
|---|---|
| US (3) | US11836505B2 (zh) |
| EP (1) | EP3966691B1 (zh) |
| JP (1) | JP7621973B2 (zh) |
| CN (1) | CN114174991B (zh) |
| AU (1) | AU2020267509B2 (zh) |
| CA (1) | CA3139510A1 (zh) |
| SG (1) | SG11202112124QA (zh) |
| WO (1) | WO2020227467A1 (zh) |
Families Citing this family (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US11836505B2 (en) | 2019-05-07 | 2023-12-05 | Ab Initio Technology Llc | Dynamic distribution of container images |
| US11188386B2 (en) * | 2019-11-01 | 2021-11-30 | Sap Portals Israel Ltd. | Lightweight remote process execution |
| US20230153162A1 (en) * | 2020-04-07 | 2023-05-18 | Telefonaktiebolaget Lm Ericsson (Publ) | Resource capacity management in clouds |
| KR20240011840A (ko) * | 2021-06-04 | 2024-01-26 | 아브 이니티오 테크놀로지 엘엘시 | 동적 계산 리소스 할당 |
| KR102488390B1 (ko) * | 2021-12-09 | 2023-01-13 | 래블업 주식회사 | 클러스터 상에서 다중 컨테이너 기반 연산 세션의 자동 스케일링 방법 및 시스템 |
| US20240004682A1 (en) * | 2022-06-29 | 2024-01-04 | Oracle International Corporation | De-centralized workflow execution |
Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN101939729A (zh) * | 2008-02-15 | 2011-01-05 | 国际商业机器公司 | 在虚拟化数据处理系统中对管理的虚拟机镜像重新布置任务 |
| CN108027747A (zh) * | 2015-07-29 | 2018-05-11 | Netapp股份有限公司 | 在存储阵列系统中执行为单处理器环境设计的控制器固件的多处理 |
Family Cites Families (20)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5966072A (en) | 1996-07-02 | 1999-10-12 | Ab Initio Software Corporation | Executing computations expressed as graphs |
| US7970902B2 (en) | 2004-03-19 | 2011-06-28 | Hewlett-Packard Development Company, L.P. | Computing utility policing system and method using entitlement profiles |
| US7716630B2 (en) | 2005-06-27 | 2010-05-11 | Ab Initio Technology Llc | Managing parameters for graph-based computations |
| US8291006B2 (en) | 2008-05-30 | 2012-10-16 | International Business Machines Corporation | Method for generating a distributed stream processing application |
| US8935702B2 (en) | 2009-09-04 | 2015-01-13 | International Business Machines Corporation | Resource optimization for parallel data integration |
| WO2011105091A1 (ja) | 2010-02-26 | 2011-09-01 | 日本電気株式会社 | 制御装置、管理装置、制御装置のデータ処理方法、およびプログラム |
| US9183016B2 (en) | 2013-02-27 | 2015-11-10 | Vmware, Inc. | Adaptive task scheduling of Hadoop in a virtualized environment |
| US10313345B2 (en) * | 2013-03-11 | 2019-06-04 | Amazon Technologies, Inc. | Application marketplace for virtual desktops |
| US10193963B2 (en) * | 2013-10-24 | 2019-01-29 | Vmware, Inc. | Container virtual machines for hadoop |
| US9645861B2 (en) | 2014-04-29 | 2017-05-09 | Good Technology Holdings Limited | Method and system for managing and presenting multiple application containers as a single logical container |
| US9256467B1 (en) | 2014-11-11 | 2016-02-09 | Amazon Technologies, Inc. | System for managing and scheduling containers |
| US10892942B2 (en) * | 2016-01-22 | 2021-01-12 | Equinix, Inc. | Container-based cloud exchange disaster recovery |
| US10212041B1 (en) * | 2016-03-04 | 2019-02-19 | Avi Networks | Traffic pattern detection and presentation in container-based cloud computing architecture |
| CN107797807B (zh) * | 2016-08-29 | 2021-04-06 | 阿里巴巴集团控股有限公司 | 生成容器的方法、装置、终端、服务器与系统 |
| CN108111470B (zh) * | 2016-11-25 | 2020-06-16 | 华为技术有限公司 | 容器的部署方法、服务间的通信方法及相关装置 |
| JP6825103B2 (ja) | 2016-12-08 | 2021-02-03 | アビニシオ テクノロジー エルエルシー | 計算リソース割り振り |
| US10572226B2 (en) | 2016-12-21 | 2020-02-25 | Aon Global Operations Ltd (Singapore Branch) | Methods, systems, and portal using software containers for accelerating aspects of data analytics application development and deployment |
| US9983891B1 (en) * | 2017-03-21 | 2018-05-29 | Veritas Technologies Llc | Systems and methods for distributing configuration templates with application containers |
| US10409713B2 (en) * | 2017-05-17 | 2019-09-10 | Red Hat, Inc. | Container testing using a directory and test artifacts and/or test dependencies |
| US11836505B2 (en) | 2019-05-07 | 2023-12-05 | Ab Initio Technology Llc | Dynamic distribution of container images |
-
2019
- 2019-10-18 US US16/656,886 patent/US11836505B2/en active Active
-
2020
- 2020-05-07 AU AU2020267509A patent/AU2020267509B2/en active Active
- 2020-05-07 CA CA3139510A patent/CA3139510A1/en active Pending
- 2020-05-07 WO PCT/US2020/031772 patent/WO2020227467A1/en not_active Ceased
- 2020-05-07 EP EP20729377.0A patent/EP3966691B1/en active Active
- 2020-05-07 SG SG11202112124QA patent/SG11202112124QA/en unknown
- 2020-05-07 JP JP2021565877A patent/JP7621973B2/ja active Active
- 2020-05-07 CN CN202080049185.9A patent/CN114174991B/zh active Active
-
2023
- 2023-10-23 US US18/492,173 patent/US12307262B2/en active Active
-
2025
- 2025-05-02 US US19/196,812 patent/US20250306955A1/en active Pending
Patent Citations (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN101939729A (zh) * | 2008-02-15 | 2011-01-05 | 国际商业机器公司 | 在虚拟化数据处理系统中对管理的虚拟机镜像重新布置任务 |
| CN108027747A (zh) * | 2015-07-29 | 2018-05-11 | Netapp股份有限公司 | 在存储阵列系统中执行为单处理器环境设计的控制器固件的多处理 |
Also Published As
| Publication number | Publication date |
|---|---|
| JP2022531452A (ja) | 2022-07-06 |
| US12307262B2 (en) | 2025-05-20 |
| US11836505B2 (en) | 2023-12-05 |
| CN114174991A (zh) | 2022-03-11 |
| AU2020267509A1 (en) | 2021-11-25 |
| JP7621973B2 (ja) | 2025-01-27 |
| AU2020267509B2 (en) | 2024-07-04 |
| SG11202112124QA (en) | 2021-11-29 |
| US20240126561A1 (en) | 2024-04-18 |
| US20200356376A1 (en) | 2020-11-12 |
| EP3966691B1 (en) | 2024-07-17 |
| EP3966691A1 (en) | 2022-03-16 |
| WO2020227467A1 (en) | 2020-11-12 |
| US20250306955A1 (en) | 2025-10-02 |
| CA3139510A1 (en) | 2020-11-12 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN114174991B (zh) | 容器镜像的动态分布的方法、系统和存储设备 | |
| CN110795228B (zh) | 用于训练深度学习模型的方法和制品、以及计算系统 | |
| US10262390B1 (en) | Managing access to a resource pool of graphics processing units under fine grain control | |
| US8234652B2 (en) | Performing setup operations for receiving different amounts of data while processors are performing message passing interface tasks | |
| US10379883B2 (en) | Simulation of high performance computing (HPC) application environment using virtual nodes | |
| US8312464B2 (en) | Hardware based dynamic load balancing of message passing interface tasks by modifying tasks | |
| US8108876B2 (en) | Modifying an operation of one or more processors executing message passing interface tasks | |
| US8127300B2 (en) | Hardware based dynamic load balancing of message passing interface tasks | |
| US11403150B1 (en) | Replenishment-aware resource usage management | |
| JP2023511467A (ja) | 機械学習ワークロードのためのタスクスケジューリング | |
| US20090064166A1 (en) | System and Method for Hardware Based Dynamic Load Balancing of Message Passing Interface Tasks | |
| JP2020502641A (ja) | 計算リソース割り振り | |
| Diab et al. | Dynamic sharing of GPUs in cloud systems | |
| CN114281516A (zh) | 一种基于numa属性的资源分配方法及装置 | |
| US12423578B1 (en) | Distributed training of machine learning models | |
| KR101620896B1 (ko) | 이기종 프로세싱 타입을 고려한 맵리듀스 프로그램 모델의 수행 성능 향상 방법, 수행 성능 향상 장치 및 수행 성능 향상 시스템 | |
| JPWO2020227467A5 (ja) | コンテナイメージの動的分散 | |
| US20220326986A1 (en) | Scheduling workloads on partitioned resources of a host system in a container-orchestration system | |
| KR20240011840A (ko) | 동적 계산 리소스 할당 | |
| HK40063748A (zh) | 容器镜像的动态分布 | |
| HK40063748B (zh) | 容器镜像的动态分布 | |
| US20230376728A1 (en) | Proxy systems and methods for multiprocessing architectures | |
| KR20250110636A (ko) | 신경망의 레이어에 대한 분산 병렬 처리 방법 및 이를 위한 장치 | |
| Kim et al. | Sophy+: Programming model and software platform for hybrid resource management of many-core accelerators | |
| Kim et al. | Sophy: A software platform for hybrid resource management of homogeneous many-core accelerators |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |