掌桥专利:专业的专利平台
掌桥专利
首页

计算系统中的容器迁移

文献发布时间:2023-06-19 12:02:28


计算系统中的容器迁移

背景技术

沙箱是一种软件管理策略,该软件管理策略可以将操作系统和/或应用与主机计算机的计算资源和同一主机计算机上其他程序隔离开。例如,提供云计算服务的数据中心可以包括大量服务器,这些大量的服务器分别托管一个或多个虚拟机、容器或其他类型的虚拟化组件。虚拟机和容器可以用于为租户执行应用,而无需给出对服务器的底层资源的直接访问。因此,沙箱可以提供安全性的层,其防止恶意软件或有害应用对主机计算机产生负面影响。

发明内容

提供本发明内容以简化形式介绍一些概念,这些概念将在下面的具体实施方式中进一步描述。本发明内容既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。

尽管虚拟机和容器都可以用作虚拟化技术来容纳计算、通信或其他类型的计算服务,但是这些虚拟化技术可能具有不同的特性。例如,虚拟机可能带来比容器明显更多的资源开销。虚拟机通常具有操作系统、完整的文件和目录结构集、唯一的配置、虚拟存储器和应用,所有这些文件的大小总量可达数十GB。相反,容器(例如,基于Docker的容器)是软件包,其提供软件应用或服务运行所需的一定数量的设施,例如代码、运行时、工具、系统库等。容器可以共享资源,例如操作系统内核、文件、文件夹、配置、供应、存储设备和网络。这样可以有效利用主机计算资源,并降低管理成本。容器通常比虚拟机具有低的多的存储器和磁盘占用空间(例如,大小是兆字节而不是千兆字节)。

在某些情况下,膝上型计算机、平板电脑、智能手机或其他类型的计算设备可能会受益于当沙箱化时,在使用本地和远程计算资源之间切换的灵活性。例如,当计算机处于“飞行模式”、超出本地计算机网络的范围或没有网络连接时,计算机(例如,膝上型计算机)可以使用本地计算资源。在另一个示例中,计算机在执行诸如编译代码之类的计算密集型任务或运行其他计算繁重的工作负载时可能会使用远程计算资源。在另一个示例中,远程嵌入式设备在从网络中进行分区时可能求助于本地处理,但是当重新建立网络连接时可能会自动切换到远程计算资源。在另一个示例中,计算机的电池电量可能不足,需要使用远程资源来节省电量和/或保持在线状态。

在前述场景中的至少一些场景下,容器化可以通过从底层硬件和/或软件中提取工作负载来帮助在使用本地和远程资源之间的切换。尽管已经很好地了解了虚拟机的迁移,但是迁移容器化的工作负载可能有困难。与包含完整操作系统的虚拟机不同,容器共享来自底层操作系统内核的资源。有时,容器和在容器中执行的一个或多个应用以及底层操作系统可能会随着时间而发生变化。这种变化可能是以下操作的结果:将软件补丁程序应用到操作系统和/或应用以修复安全性或功能问题、安装容器的扩展或一个或多个应用以添加功能、或其他合适的修改。在另一示例中,跟踪与容器和一个或多个应用相关联的各种操作系统句柄也可能是困难的,因为操作系统和/或软件驱动程序通常不提供这样的功能。

所公开技术的几个实施例旨在实现一种同步引擎,以用于促进容器在源计算设备和目的地计算设备之间的有效迁移。在某些实施例中,计算设备(例如,膝上型计算机,在下文中称为“本地设备”)可以确定是否将托管在本地设备上的源容器(称为“本地容器”)迁移到目的地设备,诸如位于数据中心的远程服务器。用于确定的示例标准可以基于功率水平、网络连接性的当前状态、当前计算负载或本地设备的其他合适的参数。在其他示例中,标准还可以基于用户输入、设备或传感器输入、迁移时间表或其他合适的条件。在另一示例中,资源(例如,打印机)不是本地可用的,并且工作负载被移动到该资源可用的位置(例如,数据中心)。在另一个示例中,主机检测到篡改审核日志,并将敏感的工作负载撤离到安全的远程位置。

在确定要迁移本地容器之后,本地设备上的同步引擎可以被配置为将具有适当凭证的迁移请求传输到云计算系统,以指示迁移即将发生。作为响应,云计算系统可以被配置为基于凭证对迁移请求进行认证,然后选择远程服务器以实例化远程服务器上的新容器(称为“远程容器”)。在某些实施方式中,迁移请求还可以包含标识本地设备上的操作系统的版本、构造或其他合适类型的参数的数据。然后,远程服务器(或其上的管理程序)可以利用与迁移请求中的版本、构造或其他类型的参数兼容或相同的版本、构造或其他类型的参数来实例化具有操作系统的虚拟机或容器。在其他实现中,远程服务器可以被选择,以具有与迁移请求中的版本、构造或其他合适类型的参数兼容的版本、构造或其他合适类型的参数。然后可以直接在远程服务器上实例化远程容器。

在某些实现中,远程服务器然后可以被配置为使用预分发或共享的容器镜像实例化远程容器。这种容器镜像可以包括表示完整文件系统的数字数据,该文件系统具有容器的文件夹、文件、应用、配置或容器的其他合适的信息。容器镜像可以使用版本、构造、哈希值、序列号或其他合适的标识符标识。在其他实施方式中,远程服务器可以在有或没有向本地设备请求容器镜像的副本的情况下从本地设备接收容器镜像的副本。

在某些实施例中,模板用于表示容器和相关联的配置参数。示例性配置参数可以包括存储器配置、安全性设置、网络设置、图形设置、设备设置中的一个或多个参数。在一些实施例中,该模板可以具有与支持容器迁移的计算机共享的预定义概要。然后该模板可以在计算机之间被同步,既可以按计划,也可以作为容器迁移的一部分。

在某些实施例中,本地设备的同步引擎还可以将本地容器的初始存储器快照连同迁移请求一起或者在迁移本地容器的授权之后传输到云计算系统。初始存储器快照可以包括存储器状态的数据、存储器状态、外壳投影句柄或其他合适的信息。在其他实施例中,代替从本地设备接收初始存储器快照,例如,在本地容器的初始开机期间,与本地容器相对应的基础存储器快照,可以被预先分发或与远程服务器共享。一旦获得了初始存储器快照,远程服务器就可以使用初始存储器快照实例化远程容器,或者将初始存储器快照应用于已经实例化的远程容器。

随后,本地设备的同步引擎可以被配置为使用写时复制、存储器分区或其他合适的技术生成与本地容器的初始存储器快照的一个或多个差异并将其传输到远程服务器。作为响应,远程服务器可以使用所接收的存储器快照的差异更新实例化的远程容器。在某些实施例中,在完成实例化远程容器之后,远程服务器可以被配置为向本地设备发信号通知已经准备好进行本地容器向云计算系统的迁移。在这种存储器更新/共享过程中,本地设备和远程服务器上的操作系统的镜像都必须是同一版本。此外,可能会执行存储器修复,因为操作系统中的库文件可能未加载在本地设备和远程服务器上的同一位置。

远程服务器可以为本地设备的用户提供关于何时完成迁移的某些选项,或基于其他合适的条件进行继续。在迁移期间,远程服务器还可以强制在本地设备上执行的一个或多个进程在迁移之前进入休眠或静默状态。一旦完成本地容器到远程容器的迁移,本地设备上的显示输出就会从本地容器切换到远程容器,例如,远程桌面协议(RDP),X Window系统或其他合适的技术。

在迁移过程中,可以跟踪本地容器对本地操作系统资源的句柄。“句柄”通常是指对计算资源的抽象引用。例如,当应用引用由操作系统或数据库管理的存储器块或对象时,可以使用句柄。示例句柄可以是允许访问有关计算资源的进一步信息的不透明标识符或指针。在一个实施例中,可以在本地设备和远程服务器上都实现句柄表(或其他合适类型的数据结构),以确保本地容器的句柄也在远程服务器上打开。这可以通过分批或以每个句柄表为基础同步句柄表来实现。在一些实施方式中,句柄表也可以被缓存。例如,远程服务器上的新句柄可能会导致缓存未命中,并且从本地设备进行远程获取以及仅根据需要进行迁移。在其他实施例中,句柄也可以存储在链表、树或其他合适类型的数据结构中。

因此,所公开技术的几个实施例可以促进通过容器化在使用本地资源和使用远程资源之间的有效切换。通过跟踪所迁移容器的存储器状态,可以以无缝方式将容器从本地设备迁移到远程服务器,反之亦然。这样,用户可以很容易地在使用本地资源和使用远程资源之间进行切换,而几乎不会中断。尽管上面在将本地容器作为源容器从本地设备迁移到远程服务器的上下文中描述了迁移过程,但是在其他实施例中,迁移过程还可以用于将作为源容器的远程容器以相反的方向从远程服务器迁移到本地设备。

附图说明

图1是根据所公开的技术的实施例的具有实现容器迁移的服务器的分布式计算系统的示意图。

图2示出了根据所公开技术的实施例的图1的分布式计算系统中的服务器的某些硬件/软件组件的示意图。

图3A-图3C示出了根据所公开的技术的实施例的在容器迁移期间图1和图2中的服务器的某些硬件/软件组件的示意图。

图4A和图4B示出了根据所公开技术的附加实施例的在容器迁移期间图1和图2中的服务器的某些硬件/软件组件的示意图。

图5-图7示出了根据所公开的技术的实施例的容器迁移的各种过程的流程图。

图8是适用于图1中的分布式计算系统的某些组件的计算设备。

具体实施方式

下面描述用于向/来自数据中心或其他合适的计算设施的容器迁移的系统、设备、组件、模块、例程、数据结构和过程的某些实施例。在以下描述中,包括组件的特定细节以提供对所公开技术的某些实施例的透彻理解。相关领域的技术人员还将理解,该技术可以具有附加的实施例。还可以在没有下面参考图1-8描述的实施例的几个细节的情况下实施该技术。

如本文中所使用的,术语“计算设施”通常是指具有多个网络节点的互连计算机网络,所述多个网络节点将多个服务器或主机彼此连接或连接至外部网络(例如,互联网)。术语“网络节点”通常是指网络设备。示例网络节点包括路由器、交换机、集线器、网桥、负载均衡器、安全网关或防火墙。“主机”通常是指被配置为实现例如一个或多个虚拟机或其他合适的虚拟化组件的物理本地设备。例如,主机可以包括具有配置为支持一个或多个虚拟机、容器或其他合适类型的虚拟组件的管理程序的远程服务器或远程设备。

从概念上讲,计算机网络可以分为在底层网络上实现的覆盖网络。“覆盖网络”通常是指在底层网络之上实现并在其上运行的抽象网络。底层网络可以包括彼此互连的多个物理网络节点。覆盖网络可以包括一个或多个虚拟网络。“虚拟网络”通常是指覆盖网络中的底层网络的一部分的抽象。虚拟网络可以包括一个或多个虚拟端点,称为“租户站点”,由用户或“租户”单独使用,以访问虚拟网络以及相关的计算、存储设备或其他合适的资源。租户站点可以托管一个或多个租户端点(“TEP”),例如虚拟机。虚拟网络可以互连不同主机上的多个TEP。覆盖网络中的虚拟网络节点可以通过虚拟链路彼此独立地连接,这些虚拟链路分别对应于沿着底层网络中一个或多个物理网络节点的一个或多个网络路由。

本文中还使用的术语“容器”通常是指一个软件包,该软件包包括完整文件系统中具有代码(例如,可执行指令)的一个软件(例如,应用)、运行时环境、系统工具、系统库、或足以执行该一个软件的其他合适组件。在单个服务器或虚拟机上运行的容器都可以共享同一操作系统内核,并且可以有效利用系统存储器或虚拟存储器。容器可以具有与虚拟机相似的资源隔离和分配优势。但是,不同的架构方法允许容器比虚拟机具有更高的可移植性和效率。例如,虚拟机通常包括一个或多个应用、应用的必要二进制文件和库以及整个操作系统。相反,容器可以包括应用及其所有依赖项,但与同一主机上的其他容器共享操作系统内核。这样,容器可以比虚拟机更具资源效率和灵活性。一个示例容器是华盛顿州雷蒙德的微软公司的Windows Server容器。另一个示例容器是Linux容器或LXC。Docker是一种流行的打包和交付容器的机制,由加利福尼亚州旧金山的Docker有限公司提供。

在某些场景下,可以在使用本地资源和远程资源之间切换容器。尽管已经很好地了解了虚拟机的迁移,但是迁移容器工作负载可能有困难。与包含完整操作系统的虚拟机不同,容器共享来自底层操作系统内核的资源。有时,容器、在容器中执行的一个或多个应用以及底层操作系统,可能会随着时间而发生变化。此类变化可能是以下操作的结果:将软件补丁应用到操作系统和/或应用以修复安全性或功能问题、安装容器的扩展或一个或多个应用以添加功能或其他合适的修改。在另一示例中,跟踪与容器和一个或多个应用相关联的各种操作系统句柄也可能有困难,因为操作系统和/或软件驱动通常不提供这样的功能。所公开技术的几个实施例旨在实现一种同步引擎,以用于促进容器在本地和远程计算设备之间的有效迁移,如下面的参考图1-8更详细的描述。

图1示出了根据所公开的技术的实施例的实现有效的容器迁移的分布式计算系统100的示意图。如图1所示,分布式计算系统100可以包括底层网络108,该底层网络将相应用户101(如分别所示的第一,第二和第三用户101a-101c)的多个本地设备103(如分别所示的第一,第二和第三本地设备103a-103c)和计算设施104互连起来。即使在图1中示出了特定组件,在其他实施例中,分布式计算系统100也可以包括附加的和/或不同的组成部分。例如,除了或代替图1中所示的组件,分布式计算系统100可以包括网络存储设备\公用基础设施、和/或其他合适的组件。

本地设备103可以各自包括计算设备,该计算设备促进相应的用户101经由底层网络108访问由远程服务器106提供的云服务。例如,在所示的实施例中,本地设备103单独地包括台式计算机。在其他实施例中,本地设备103还可以包括笔记本电脑、平板电脑、智能手机或其他合适的计算设备。即使为了说明目的在图1中示出了三个用户101,但是在其他实施例中,分布式计算系统100可以促进任何合适数目的用户101访问由远程服务器106提供的合适类型的计算服务。

如图1所示,底层网络108可以包括一个或多个物理网络设备112,该一个或多个物理网络设备112将本地设备103和计算设施104互连。网络设备112的示例可以包括路由器、交换机、防火墙、负载均衡器或其他合适的网络组件。即使出于说明目的在图1中示出了特定的连接方案,但是在其他实施例中,网络设备112可以可操作地耦合成分层的、平坦的、“网状”或其他合适的拓扑。

计算设施104可以包括通过网络设备112可操作地彼此耦合的管理控制器102和多个远程服务器106。在某些实施例中,远程服务器106可以单独地包括物理服务器或具有几个物理服务器的计算刀片。在其他实施例中,远程服务器106还可以包括具有多个处理器核的一个或多个物理服务器,或者其他合适类型的计算设备。在任何前述实施例中,远程服务器106可以单独地包括一个或多个非易失性存储器(在图2中示为NVM 138)。

远程服务器106可以被组织成机架、可用性区域、组、集合、计算集群或其他合适的分区。例如,在图1所示的实施例中,远程服务器106被分组为三个计算集群105(如分别所示的第一、第二和第三计算集群105a-105c),其可操作地耦合到底层网络108中的相应网络设备112。尽管出于说明目的在图1中示出了三个计算集群105,但是在其他实施例中,计算设施104可以包括一个、两个、八个、十六个或任何其他合适数量的具有相似或不同组件和/或配置的的计算集群105。

每个集群105还可以包括集群控制器109,其被配置为监测状态并管理对应的计算集群105中的远程服务器106的操作。例如,集群控制器109可以监测远程服务器106或其组件是否发生故障。响应于检测到远程服务器106或其组件的故障,集群控制器109可以尝试通过以下方法补救检测到的故障:例如,将发生故障的远程服务器106上托管的虚拟机和/或容器迁移到同一集群105中的其他远程服务器106,重新启动发生故障的远程服务器106,替换发生故障的远程服务器106的硬件组件,和/或执行其他合适的操作。尽管在图1中将集群控制器109示为单独的物理服务器,但在其他实施例中,集群控制器109也可以包括由相应计算集群105中的一个或多个远程服务器106提供的计算服务。

管理控制器102可以被配置为监测、控制或以其他方式管理计算集群105的操作。例如,在某些实施例中,管理控制器102可以包括结构控制器,该结构控制器被配置为管理计算集群105中的处理、存储、通信或其他合适的硬件资源类型,以用于托管期望的计算服务。在其他实施例中,管理控制器102还可以包括数据中心控制器、应用交付控制器或其他合适类型的控制器。在所示的实施例中,管理控制器102被示为与计算集群105分离。在其他实施例中,管理控制器102可以包括计算集群105中的一个或多个远程服务器106。在进一步的实施例中,管理控制器102可以包括托管在计算集群105中的一个或多个远程服务器106上的软件服务。

在操作中,用户101可以经由例如在相应的本地设备103上呈现的用户门户107来请求各种计算服务(例如,站点的部署)。作为响应,管理控制器102可以分配一个或多个远程服务器106或其他计算资源(例如,一个或多个远程服务器106)以执行适当的指令以提供所请求的计算服务。例如,用户101可以经由相应的本地设备103请求将当前在本地设备103上执行的本地容器(未示出)迁移到计算设施104中的一个或多个远程服务器106,如下面的参考图3A-4B更详细的描述。在一些实施例中,可以通过在本地设备103、用户门户107或其他实体上运行的软件来对计算资源的请求进行自动化。

在一些实施例中,可以基于远程服务器106的某些属性来选择远程服务器106。示例属性可以包括成本、位置、网络延迟、可用性、安全保证、管治数据策略和其他合适的特征。在一些实施例中,在本地设备103上运行的本地容器122a可以与多个远程服务器106同步,以实现高可用性、最佳位置和/或其他合适的目的。

图2示出了根据所公开技术的实施例的图1的分布式计算系统100的某些硬件/软件组件的示意图。在图2和本文的其他图中,各个软件组件、对象、类、模块和例程可以是用C、C++、C#、Java和/或其他合适的编程语言编写为源代码的计算机程序、步骤或过程。组件可以包括但不限于一个或多个模块、对象、类、例程、属性,进程、线程、可执行文件、库或其他组件。组件可以采用源代码形式或二进制形式。组件可以包括在编译之前的源代码的各个方面(例如,类、属性、过程、例程)、已编译的二进制单元(例如,库、可执行文件)或在运行时实例化并使用的工件(例如,对象、进程、线程)。在某些实施例中,下面描述的各种组件和模块可以通过参与者来实现。在其他实施例中,还可以使用单片应用、多层应用或其他合适的组件来实现应用和/或相关服务的生成。

系统内的组件可以在系统内采用不同的形式。作为一个示例,包括第一组件、第二组件和第三组件的系统可以包括但不限于具有第一组件是源代码中的属性、第二组件是二进制编译库、以及第三组件是在运行时创建的线程的系统。可以将计算机程序、过程或进程编译为对象、中间代码或机器代码,并呈现出来以供个人计算机、网络服务器、笔记本电脑、智能手机和/或其他合适的计算设备中的一个或多个处理器执行。同样,组件可以包括硬件电路。

本领域普通技术人员将认识到,硬件可以被视为化石软件,并且软件可以被视为液化硬件。仅作为一个示例,组件中的软件指令可以被刻录到可编程逻辑阵列电路,或者可以被设计为具有适当集成电路的硬件电路。同样,硬件可以由软件仿真。源代码、中间代码和/或对象代码以及相关数据的各种实施方式可以存储在计算机存储器中,该计算机存储器包括只读存储器、随机访问存储器、磁盘存储介质、光学存储介质、闪存设备和/或除了传播的信号以外的其他合适的计算机可读存储介质。

如图2所示,第一服务器106a和第二服务器106b可以各自包括操作地彼此耦合的处理器132、存储器134、输入/输出组件136以及一个或多个非易失性存储器138。处理器132可以包括微处理器、现场可编程门阵列和/或其他合适的逻辑设备。存储器134可以包括易失性和/或非易失性介质(例如,ROM;RAM,NVRAM,磁盘存储介质;光学存储介质;闪存设备和/或其他合适的存储介质),和/或其他类型的计算机可读存储介质,其被配置为存储从处理器132接收的数据以及用于处理器132的指令(例如,用于执行下面参考图5A-7讨论的方法的指令)。输入/输出组件136可以包括网络接口卡或其他合适类型的输入/输出设备,其被配置为从操作员和/或自动化软件控制器(未示出)接受输入并向其提供输出。

第一和第二远程服务器106a和106b的存储器134可以包括可由相应处理器132执行的指令,以使各个远程服务器106提供管理程序140(分别标识为第一和第二管理程序140a和140b)以及其他合适的虚拟机,诸如虚拟网络接口卡,虚拟交换机等组件(未示出)。管理程序140可以独立地配置为发起、监测、终止和/或以其他方式本地管理主机141和组织成租户站点142的一个或多个虚拟机144(或容器)。例如,如图2所示,第一服务器106a可以提供第一管理程序140a,其为相同或不同的租户或用户101(图1)分别管理第一和第二租户站点142a和142b。第二服务器106b可以提供第二管理程序140b,其分别管理第一和第二租户站点142a'和142b'。

管理程序140可以是软件,固件或硬件组件。租户站点142可以各自包括多个虚拟机144或用于租户的其他合适的租户实例。例如,第一服务器106a和第二服务器106b都可以为第一用户101a(图1)托管租户站点142a和142a'。第一服务器106a和第二服务器106b都可以托管第二用户101b(图1)的租户站点142b和142b'。每个虚拟机144可以执行相应的操作系统、中间件和/或应用。

还如图2所示,分布式计算系统100可以包括一个或多个虚拟网络146,其跨多个远程服务器106互连租户站点142a和142b。例如,第一虚拟网络142a在第一服务器106a和第二服务器106b处互连第一租户站点142a和142a'。第二虚拟网络146b在第一服务器106a和第二服务器106b处互连第二租户站点142b和142b'。即使单个虚拟网络146被示为对应于一个租户站点142,在其他实施例中,多个虚拟网络146(未示出)可以被配置为对应于单个租户站点146。

即使虚拟机144位于不同的远程服务器106上,虚拟网络146上的虚拟机144也可以经由底层网络108(图1)相互通信。每个虚拟网146的通信可以与其他虚拟网络146隔离。在某些实施例中,可以允许通信通过安全网关或以受控方式从一个虚拟网络146穿过到另一虚拟网络。虚拟网络地址可以对应于虚拟网络146中的虚拟机144中的一个虚拟机。因此,不同的虚拟网络146可以使用相同的一个或多个虚拟网络地址。示例虚拟网络地址可以包括IP地址、MAC地址和/或其他合适的地址。

如图2所示,管理程序140和/或主机141可以分配非易失性存储器138中的一个或多个以由虚拟机144通过PCIe总线来访问。例如,第一服务器106a可以将非易失性存储器138分配给虚拟机144'。第二服务器106b可以将另一个非易失性存储器138分配给虚拟机144”。如上所述,服务器106可以利用虚拟机144中的一个或多个来促进从本地设备103(图1)的有效容器迁移,反之亦然,如下面的参考图3A-4B更详细的描述。

图3A-3C示出了根据所公开技术的实施例的在将本地容器122a从本地设备103迁移到远程服务器106的某些操作阶段期间本地设备103和远程服务器106的某些硬件/软件组件的框图。尽管在将本地容器122a(作为源容器)从作为源设备的本地设备103迁移为实例化为远程服务器106上的作为目的地设备的远程容器122b(作为目的地容器)的上下文中描述了操作,在某些实现中,本文描述的至少一些操作同样适用于将远程容器122b从作为源设备的远程服务器106迁移到作为目的地设备的本地设备103。此外,即使以下将迁移过程描述为由用户101的请求160触发,在其他实现中,也可以基于本地设备103的当前操作状态来发起迁移过程。示例操作状态可以包括功率水平、网络连接状态、处理器使用情况、系统存储设备水平、安全状态、证明状态或其他合适的操作参数。

在某些实施例中,本地设备103可以包括:数据存储库110a,其包含一个或多个容器映像114a,以及处理器(未示出),处理器被配置为执行容器镜像114a中的一个或多个容器镜像的适当指令,以提供本地容器122a,例如,作为容器运行时。如本文所使用的,“运行时”通常是指其中运行一个软件(例如,加载到存储器中的程序,由处理器调度和执行的指令)的计算环境。在其他实施例中,容器镜像114a也可以从远程、可移除或其他合适类型的存储位置获得。如图3A所示,在执行本地容器122a和/或本地容器122a中的一个或多个应用(未示出)期间,本地容器122a也可以被分配给容器存储器124a,并被允许访问容器存储器124a。这样,容器存储器124a可以被配置为包含本地容器122a和/或在本地容器122a中执行的一个或多个应用的存储器状态。尽管在图3A中将本地容器122a示出为直接由本地设备103托管,但是在一些实施例中,本地设备103还可以执行适当的指令以提供虚拟机(未示出)来托管本地容器122a。

在某些实施方式中,本地设备103还可以包括输出显示120,其被配置为将本地容器122a的执行结果126呈现给用户101。在某些实施例中,输出显示120可包括在本地设备103的输出组件(例如,LED屏幕)上呈现的用户界面元素(例如,图形用户界面)。在其他实施例中,输出显示120可以包括其他合适的硬件/软件组件。可以使用各种协议在输出显示120上呈现结果126。一种合适的示例协议是远程桌面协议(RDP)。在一些实施例中,协议简单地将远程容器122b重新连接到输出显示120。在其他实施例中,协议和容器迁移可以被集成和被编排。可以采用先接后断或其他类似类型的技术来减少对输出显示120的中断。在一些实施例中,由于远程容器122b快速地远程实例化,所以用户101在访问输出显示120时可以具有无缝的体验。在一些实施例中,可以向用户101通知失败或延迟。在容器迁移是自动化的一些实施例中,可以将改变通知给用户101。在其他实现中,本地设备103可能不包括输出显示120,例如,当本地设备103是嵌入式设备时。代替的,来自本地或远程容器122a和122b的执行结果可以用于开动、传输或执行其他合适的操作。

如图3A所示,本地设备103和远程服务器106中的每个还可以实现同步引擎150(分别示出为本地和远程同步引擎150a和150b),其被配置为促进本地设备103和远程服务器106之间的容器迁移。同步引擎150可以包括可操作地彼此耦合的接口组件152、存储器组件154和控制组件156。即使下面在将本地容器122a迁移到远程服务器106的上下文中描述了同步引擎150的各个组件的功能,当将远程容器122b(如图3B所示)从远程服务器106迁移到本地设备103时,同步引擎150a和150b的相似组件可以具有相似或相同的功能。

同步引擎150的接口组件152可以被配置为通过适当的同步协议相互通信,并使用传输来同步本地设备103和远程服务器106之间的状态。在某些实施例中,独立接口组件152可以包括网络接口卡和相应的软件驱动器。在其他实施例中,接口组件152可以包括其他合适的硬件/软件组件。

接口组件152还可以被配置为在本地设备103和远程服务器106之间传输或中继迁移请求160。例如,如图3A所示,在从用户101接收到请求160后,本地设备103上的接口组件152可以将请求160以及例如用于验证用户101的凭证161、包含本地设备103的版本、构造或其他合适的参数的设备信息162、和/或其他合适的信息中继到远程服务器106。在其他示例中,可以在本地设备103和远程服务器106之间预分发或共享凭证161和/或设备信息162。在一些实施例中,设备信息162可以包含配置模板,其包含容器配置的某些方面。在一些实施例中,设备信息162可以包含操作系统版本、所应用补丁的列表、驱动程序版本信息、固件版本信息和/或其他合适的信息中的一个或多个。在一些实施例中,请求160可以由本地设备103上的组件(例如,容器引擎)自动生成,而不是由用户101发起。

在接收到请求160之后,远程服务器106可以被配置为基于所接收的或预分发的凭证161来验证用户101。在验证用户101之后,在一个示例中,在远程服务器106处的控制组件156可以被配置为基于接收到的或预分发的设备信息162来实例化虚拟机144。这样,虚拟机144可以被提供有与本地设备103的操作系统内核兼容或相同的操作系统内核。

在本地设备103处的存储器组件154可以被配置为同步已迁移容器的镜像和存储器状态。在一个实施例中,如图3A所示,在接收到将本地容器122a迁移到远程服务器106的请求160时,存储器组件154可以被配置为生成本地容器122a的容器镜像114。容器镜像114可以包括代表文件系统的数字数据、在本地容器中执行的一个或多个应用及其配置参数。用于生成容器镜像114的示例技术可以包括针对Docker执行“提交”或“文件管理”命令。在接收到用户请求160后,存储器组件154还可被配置为从容器存储器124a捕获存储器快照116,该存储器快照116包含本地容器122a的存储器状态以及在本地容器122a中执行的一个或多个应用。在其他实施例中,容器映像114可以被预分发到远程服务器106。这样,代替从本地设备103接收容器镜像114,远程服务器106可以被配置为基于例如设备信息162从数据存储库110b中取回容器镜像114的副本。

在某些实施方式中,然后可以在捕获存储器快照116之后暂停本地容器122a的执行,同时可以将存储器组件154配置为将所生成的镜像和所捕获的存储器快照116传输到远程服务器106。在接收到容器镜像114和存储器快照116后,远程服务器106就可以基于容器镜像114和存储器快照116实例化远程容器122b。随后,远程服务器106可以继续执行远程容器122b中的一个或多个应用,并将这种执行的结果126'提供给本地设备103上的输出显示120。

在某些实施方式中,本地容器122a具有与主机(例如,本地设备103或其上的虚拟机)共享的存储器。当共享存储器被映射到本地容器122a中时,存储器快照116继续进行,并且存储器映射信息也可以被捕获并且经由经由设备信息162或类似机制与远程服务器106共享。当实例化远程服务器106上的远程容器122b时,可以创建相同的存储器映射作为该实例化的一部分。

在另一实施方式中,如图3B所示,本地容器122a的执行可以在捕获存储器快照116之后继续。如图3A所示,在传输初始存储器快照116之后,存储器组件154可以被配置为捕获附加的存储器快照并且基于相对于先前快照的随后捕获的存储器快照来生成一个或多个存储器差异116'。存储器组件154然后可以被配置为连续地、周期性地或以其他合适的方式将存储器差异116'传输到远程服务器106。在接收到存储器差异116′之后,远程服务器106处的控制组件156可以被配置为将接收到的存储器差异应用于实例化的远程容器122b。然后,控制组件156可以通过接口组件152向本地设备103发送查询117,以查询本地设备103上是否仍然存在任何其他存储器差异116'。

如图3C所示,在从本地设备103接收到指示在本地设备103上不再存在存储器差异116'的响应118之后,远程服务器106可以继续执行远程容器122b中的一个或多个应用,并且将执行结果126'提供给本地设备103的输出显示120。在某些实施例中,在将输出显示120从本地容器122a切换到远程容器122b之前,远程服务器106还可以可选地向本地设备103传输暂停命令119。响应于暂停命令119,本地设备103处的控制组件156可以被配置为暂停本地容器122a的执行并且将输出显示120切换到远程容器122b。在其他实施例中,可以在不暂停本地容器122a的情况下执行切换输出显示120。

即使上面参考图3A-3C所述的迁移过程涉及捕获本地容器122a的存储器快照并基于其实例化远程容器122b,在其他实施例中,还可以在本地设备103和远程服务器106之间预分发存储器快照114。例如,如图4A所示,可以在本地设备103和远程服务器106之间预分发容器镜像114和对应于容器镜像114的存储器快照116。在一个示例中,预分发的存储器快照116可以包括在启动操作期间本地或远程容器122的捕获的存储器状态。在其他示例中,预分发的存储器快照116可以包括在其他合适的执行点期间本地或远程容器122的捕获的存储器状态。

这样,在迁移过程中,远程服务器106可以被配置为从数据存储库110b中取回容器镜像114和初始存储器快照116。如以上参考图3B所描述的,本地设备103处的存储器组件154然后可以被配置为生成要应用于实例化的远程容器122b的一个或多个存储器差异116'并将其传输到远程服务器106。随后,远程服务器106可以被配置为将查询117传输到本地设备103,并且在接收到响应118时将输出显示120切换到远程容器122b,如上面参考图3C所描述的。

在以上参考图3A-4B描述的迁移过程中,用于本地容器122a的本地操作系统资源的句柄可以被跟踪。“句柄”通常是指对计算资源的抽象引用。例如,当应用引用由操作系统或数据库管理的存储器块或对象时,可以使用句柄。示例句柄可以是允许访问有关计算资源的进一步信息的不透明标识符或指针。在一个实施例中,可以在本地设备103和远程服务器106上都实现句柄表,以确保在远程服务器上也能打开本地容器的句柄。这可以通过成批地或在每个句柄的基础上同步句柄表来实现。在一些实施方式中,句柄表也可以被缓存。例如,远程服务器106上的新句柄可能会导致缓存未命中,并且从本地设备103被远程获取并仅在需要时进行迁移。

因此,所公开技术的几个实施例可以促进在使用本地资源和通过容器化使用远程资源迁移之间的有效切换。通过跟踪迁移的本地容器122a(或远程容器122b)的存储器状态,可以以无缝的方式将容器122从本地设备103迁移到远程服务器116,反之亦然。这样,用户101可以在很少或没有中断的情况下容易地在使用本地资源和使用远程资源之间进行切换。

所公开技术的几个实施例还可以实现上述实施例,以将在远程服务器106上运行的容器迁移到本地设备103。对于具有多个本地设备103(例如台式计算机、膝上型计算机、电话等等)的用户,这样的本地设备103的属性可以作为设备信息162的一部分被共享,从而使同步引擎150b能够以适当的本地设备103为目标。在一个实施例中,用户存在可以被用来确定交互式应用场景可以被迁移到用户当前正在使用的膝上型计算机。在另一个实施例中,计算资源可以用于确定可以将计算密集型应用迁移到台式计算机。

图5示出了根据所公开的技术的实施例的容器迁移的过程200的流程图。即使相对于图1和图2的分布式计算系统100描述了过程200,在其他实施例中,过程200也可以在其他合适的系统中实现。

如图5所示,过程200可以包括在阶段202处接收将容器从源设备迁移到目的地设备的请求。在一个实施例中,容器可以从本地设备103(图1)迁移到远程服务器106(图1)。在另一个实施例中,容器可以从远程服务器106迁移到本地设备103。在又一个实施例中,容器可以从一个远程服务器106迁移到计算设施104(图1)中的另一个。

在某些实施例中,过程200然后可以包括可选阶段204,在阶段204中,虚拟机或容器在目的地设备上启动,如以上参考图3A所述。在一些实施例中,阶段204的操作还可以包括分配诸如存储器、设备等的附加系统资源。这种及时资源分配可以由设备信息162或其他指示符来确定。在其他实施例中,可以省略阶段204的操作,使得容器直接迁移到目的地设备。

然后,过程200可以包括在阶段206实例化远程容器。在某些实施例中,可以基于源设备上容器的所捕获的当前镜像的副本和存储器快照来实例化远程容器206。在其他实施例中,容器的镜像或存储器快照中的至少一个可以在源设备和目的地设备之间被预分发。下面参考图6A和6B更详细地描述实例化远程容器的示例操作。然后,过程200可以包括决策阶段206,以确定实例化远程容器是否完成。响应于确定实例化远程容器已完成,过程200可以包括在阶段210处将源设备上的显示输出切换到远程容器,如以上参考图3C所描述的。

图6A示出了实例化远程容器的示例操作的流程图。如图6A所示,该操作可以包括在阶段212处接收要迁移的容器的所捕获的镜像的副本和存储器快照。然后,该操作可以包括在步骤214,向远程容器分配各种资源(例如,系统或虚拟存储器)。操作可以包括在步骤216使用所接收到的捕获的镜像的副本和存储器快照来启动远程容器。

图6B示出了实例化远程容器的另外的示例性操作的流程图。如图6B所示,该操作可以包括在阶段220接收要迁移容器的容器标识符。这种容器标识符可以包括序列号或其他合适类型的标识符。然后,该操作可以包括在阶段222基于容器标识符来取回容器的预分发镜像或存储器快照中的至少一个。然后,该操作可以包括在阶段224使用所取回的镜像和/或存储器快照来启动远程容器224。

然后,操作可以包括决策阶段226,以确定在源设备处是否存在容器的任何差异存储器快照。响应于确定在源设备处存在容器的附加的差异存储器快照,操作可以在阶段227,在返回到确定源设备上是否还存在该容器的其他差异存储器快照之前,可以继续接收附加的差异存储器快照并将其应用于远程容器。在某些实施方式中,阶段227的操作还可以包括基于附加的差异存储器快照来更新容器的预分发镜像和/或存储器快照。响应于确定在源设备处不存在容器的差异存储器快照,操作可以进行到可选阶段228,该可选阶段指示源设备暂停容器的执行,然后在阶段230指示远程容器的实例化完成。

图7示出了在容器从源设备到目的设备的迁移期间在源设备和目的设备之间同步句柄的示例操作的流程图。如图7所示,操作可以选择地包括在阶段232部分或完全同步句柄表,该句柄表包含标识源设备和目的地设备之间的各种句柄的条目。然后,这些操作可以包括决策阶段234,以确定新的句柄是否对应于同步句柄表中的条目。响应于确定新句柄不对应于同步句柄表中的条目,操作可以包括在阶段236,从源设备取回关于新句柄的信息。响应于确定新句柄确实对应于同步句柄表中的条目,操作可以包括在阶段238从句柄表中取回关于新句柄的信息。

图8是适合于图1中的分布式计算系统100的某些组件的计算设备300。例如,计算设备300可以适用于图1的本地设备103或远程服务器106。在非常基本的配置302中,计算设备300可以包括一个或多个处理器304和系统存储器306。存储器总线308可以用于在处理器304和系统存储器306之间进行通信。

依据期望的配置,处理器304可以是任何类型,包括但不限于微处理器(μP)、微控制器(μC)、数字信号处理器(DSP)或其任何组合。处理器304可以包括多级缓存,例如一级缓存310和二级缓存312、处理器核314和寄存器316。示例处理器核314可以包括算术逻辑单元(ALU)、浮点单元(FPU)、数字信号处理核(DSP核)或其任意组合。示例存储器控制器318也可以与处理器304一起使用,或者在一些实现中,存储器控制器318可以是处理器304的内部部分。

依据期望的配置,系统存储器306可以是任何类型,包括但不限于易失性存储器(例如RAM)、非易失性存储器(例如ROM、闪存等)或其任何组合。系统存储器306可以包括操作系统320、一个或多个应用322和程序数据324。如图8所示,操作系统320可以包括用于管理一个或多个虚拟机144的管理程序140。所描述的基本配置302在图8中由内部虚线内的那些组件示出。

计算设备300可以具有附加特征或功能以及附加接口,以促进基本配置302与任何其他设备和接口之间的通信。例如,总线/接口控制器330可以用于促进基本配置302与一个或多个数据存储设备332之间经由存储设备接口总线334的通信。数据存储设备332可以是可移除存储设备336、不可移除存储设备338或其组合。可移除存储和不可移除存储设备的示例包括固态硬盘等磁盘设备,诸如软盘驱动器和硬盘驱动器(HDD);光盘驱动器,例如光盘(CD)驱动器或数字多功能磁盘(DVD)驱动器;固态硬盘(SSD)和磁带驱动器等。示例计算机存储介质可以包括易失和非易失、可移除和不可移除介质,其用于以用于信息的存储的任何方法或技术实现,诸如计算机可读指令、数据结构、程序模块或其他数据。术语“计算机可读存储介质”或“计算机可读存储设备”不包括传播的信号和通信介质。

系统存储器306,可移除存储设备336和不可移除存储设备338是计算机可读存储介质的示例。计算机可读存储介质包括但不限于RAM、ROM、NVRAM、EEPROM、闪存或其他存储技术、CD-ROM、数字多功能磁盘(DVD)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备、或可用于存储所需信息并可由计算设备300访问的任何其他介质。任何这样的计算机可读存储介质都可以是计算设备300的一部分。术语“计算机可读存储”不包括传播的信号和通信介质。

计算设备300还可包括接口总线340,用于促进从各种接口设备(例如,输出设备342、外围接口344和通信设备346)经由总线/接口控制器330到基本配置302的通信。示例输出设备342包括图形处理单元348和音频处理单元350,其可以被配置为经由一个或多个A/V端口352与诸如显示器或扬声器之类的各种外部设备通信。示例外围接口344包括串行接口控制器354或并行接口控制器356,其可以被配置为经由一个或多个I/O端口358与诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备等)的外部设备或其他外围设备(例如,打印机、扫描仪等)通信。示例通信设备346包括网络控制器360,其可以被布置为促进经由一个或多个通信端口364通过网络通信链路与一个或多个其他本地设备362通信。

网络通信链路可以是通信介质的一个示例。通信介质通常可以由计算机可读指令、数据结构、程序模块或调制数据信号中的其他数据(例如载波或其他传输机制)来体现,并且可以包括任何信息传递介质。“调制数据信号”可以是具有以将信息编码在信号中的方式来设置或改变其一个或多个特征的信号。作为示例而非限制,通信介质可以包括诸如有线网络或直接有线连接之类的有线介质,以及诸如声学、射频(RF)、微波、红外(IR)和其他无线介质之类的无线介质。如本文所使用的术语计算机可读介质可以包括存储介质和通信介质的两者。

计算设备300可以被实现为诸如便携式电话、个人数据助理(PDA)、个人媒体播放器设备、无线网络观看设备、个人耳机设备、专用设备或包括上述任何功能的混合设备等的小型便携式(或移动)电子设备的一部分。计算设备300还可以被实现为包括膝上型计算机和非膝上型计算机配置的个人计算机。

为了说明的目的,上面已经描述了该技术的特定实施例。然而,可以在不背离前述公开的情况下进行各种修改。另外,除了或者代替其他实施例的元素,一个实施例的许多元素可以与其他实施例组合。因此,除所附权利要求书外,本技术不受限制。

相关技术
  • 一种基于容器环境中迁移对象的方法及计算系统
  • 一种基于容器环境中迁移对象的方法及计算系统
技术分类

06120113142920