[关闭]
@liuhui0803 2016-07-22T13:04:19.000000Z 字数 3232 阅读 2981

容器实时迁移揭秘

DevOps 开发 容器 云计算 云迁移


摘要:

本文介绍了一个目前IT界尚未全面考虑过的问题:容器的实时迁移。这种技术的工作原理如何,能解决哪些问题?由于能为应用程序生命周期管理提供更大灵活性,塑造更丰富的使用场景,业界对这一技术的需求已经有了显著提升。

正文:

主要结论

  • 实时迁移是指在客户端访问不中断的情况下移动应用程序实例。
  • 实时迁移有助于促进服务器维护工作并缓解失衡负载等场景。
  • 目前流行的实现策略包括“复制前(Pre-copy)”将状态复制到备用主机并切换流量,以及“复制后(Post-copy)”对初始状态进行复制并将残余组件置于“惰性加载(Lazy loaded)”状态下。
  • 实时迁移面临的挑战包括:迁移过程中性能略微退化,如果依赖的服务(例如大数据或其他专有服务)在备用位置不可用将难以在主机间移动。

本文介绍了一个目前IT界尚未全面考虑过的问题:容器的实时迁移。这种技术的工作原理如何,能解决哪些问题?由于能为应用程序生命周期管理提供更大灵活性,塑造更丰富的使用场景,业界对这一技术的需求已经有了显著提升。

实时迁移到底是什么?

容器实时迁移是指在确保客户端访问不中断的情况下在不同的物理计算机或云平台之间移动应用程序的过程。在裸机硬件基础上运行容器所需的内存、文件系统,以及网络连接都可以从源主机转移至目标主机,同时可以确保状态持续不中断。

此处输入图片的描述

实时迁移可以解决的问题

实时迁移技术可以解决多种问题:

备选解决方案

上述问题可通过多种方式解决。一起分析一下人们是如何使用实时迁移之外的其他方式解决这些问题的。

实时迁移的工作原理

一起使用下面的结构看看实时迁移过程在技术上是如何实现的。

此处输入图片的描述

为了执行实时迁移,平台首先需要将源节点的容器冻结,阻止内存、进程、文件系统,以及网络连接,并获得该容器的状态。随后将这些内容复制到目标节点。平台会在目标节点上还原状态并解冻容器,并在源节点执行一个快速的清理过程。

整个过程相当直观:获取状态,复制状态,还原状态。然而要注意,容器会在一段时间内处于冻结状态,因此在设计应用程序体系结构时需要考虑到这一问题,这一特点有可能让某些应用程序出现问题。

实时迁移解决方案有两种类型。其一是复制前内存(Pre-copy memory)。如果要迁移容器,平台会开始追踪源节点的内存使用,并将内存并行复制到目标节点,直到两个节点的内存差异实现最小化。随后平台会冻结容器,获取剩余的状态数据,将其迁移至目标节点,还原并解冻容器。

此处输入图片的描述

另一种解决方案是复制后内存(Post-copy memory),也可以叫做惰性迁移(Lazy migration)。系统会在一开始冻结源节点中的容器,从飞速变化的内存页中获取状态,将状态移动至目标节点并还原,然后解冻容器。随后用后台模式将剩余状态信息从源节点复制到目标节点。

此处输入图片的描述

取决于具体应用程序,通常每个容器需要冻结5-30秒。相比集群维护过程中长达数小时的停机,这个时间已经很短了。

实时迁移的用例

不停机硬件维护

在维护窗口中,容器可以用实时模式从一台物理硬件节点迁移至统一数据中心内的另一个节点,这一过程完全不造成停机。

负载平衡

通过实时迁移将容器从一个硬件节点迁移到另一个,借此实现负载平衡。通过实现相应的调度算法和触发器,这一切甚至可以自动完成。

此处输入图片的描述

同一硬件区域和数据中心内的高可用性

云服务供应商可以在一个或多个数据中心内预配置并提供一系列硬件可用性区域,因此最终用户可以在无需系统管理员介入的情况下执行容器的实时迁移,借此获得更多高可用性选项。

更换云供应商

实时迁移还可以帮助最终用户避免云基础结构供应商的锁定。应用程序可以迁移至另一个云服务供应商处,迁移过程中无需任何重配置或重部署操作。

此处输入图片的描述

瓶颈和潜在问题

如果想要通过实时迁移解决方案解决上述问题,还需要考虑到可能面临的各种挑战:

市面上的实时迁移产品

目前哪些公司提供了实时迁移产品?现在已经有多个产品可以对容器进行实时迁移。

演示:用实时模式迁移Minecraft

下列视频演示了使用实时模式将Minecraft应用程序从AWS不停机迁移至Azure的过程。

视频地址:https://www.youtube.com/embed/HfN4L6RFL10?list=PL88903F00A39DAF30

容器的实时迁移目前依然是一项比较新的技术。然而对企业来说这种技术的收益是显而易见的:不停机维护,无需花费大量时间对一切进行准备、确认,以及再次确认。因此这种解决方案是改善可用性,获得更高灵活性的好方法。如果你对于通过实时模式将容器从一个实例跨越数据中心移动到另一个实例有自己的经验,欢迎与我们一起分享。

关于本文作者

此处输入图片的描述
Ruslan Synytsky是Jelastic的CEO兼共同创始人,这家公司为DevOps提供了PaaS和托管业务。借助在IT界超过15年的经验,Ruslan已成为大规模分布式Java应用程序和企业平台领域的专家。在于2011年创办Jelastic之前,Ruslan是乌克兰国家航天局的重要工程主管,从事过多种创新式项目。Ruslan Synytsky有着丰富的科学经验,积极参与针对开发者、主机托管商、集成商,以及大型企业的各类技术大会。

作者Ruslan Synytsky阅读英文原文Containers Live Migration: Behind the Scenes

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注