Docker热迁移研究背景,问题描述及解决方案

1.研究背景

  云计算作为一种新兴的计算模式,近几年受到越来越多的关注和应用,随着云服务规模的扩大,数据中心不断的扩张,为了可以在大规模的云服务平台下有效实现负载均衡,将计算资源进行有效分配,在线迁移技术就不得不引起人们的重视。传统模式下,云计算的核心内容是虚拟化技术,通过虚拟机来提高计算资源的利用率,而且目前虚拟机的热迁移技术也相对成熟。而随着人们容器概念的理解不断深入,及最近几年Docker的持续火热使人们对云服务的模式产生了新的思考,容器将给云带来更轻便,更灵活,更密集的服务能力,不同于虚拟机,容器通过共享主机内核可以弹性分配计算资源,进一步提高了资源利用率,在操作系统的角度来看,容器就相当于一个个的进程组在其中运行,而正是容器与内核这种密切的关联对容器的热迁移技术提出了挑战,迁移过程中的状态信息及资源都分散在操作系统甚至内核之中,容器的热迁移也就变的更加复杂,但在云服务均衡调度的需求下,容器的热迁移技术亟待解决。

 

2.研究现状

   容器热迁移指在确保客户端访问不中断的情况下在不同的物理主机之间移动应用程序的过程,它可以解决云服务下存在的一些问题,如硬件维护期间的停机,负载均衡及云平台故障。在虚拟机热迁移的技术指导下,目前容器的热迁移也参照虚拟机热迁移的模式,主要分为两种类型,一个是复制前内存(pre-copy memory),另一个是复制后内存(post-copy memory),目前市面上有一些容器热迁移产品相对成熟,Virtuozzo团队是研究容器热迁移技术的先锋团队,目前已经可以提供用于生产环境并可以实现容器热迁移的容器引擎,但唯一美中不足的就是这种技术只能面向Virtuozzo定制的Linux内核,通过对内核的修改或者补丁才能完成容器热迁移功能,不能面向主流Linux内核来实现热迁移。因此Virtuozzo为了解决这一个问题,为了能面向主流Linux内核在用户空间来实现热迁移,成立CRIU项目组来解决这些问题,目前CRIU项目还有一些问题没有解决还在研究阶段。

 

3.面临的问题

    相对于虚拟机热迁移,容器由于共享主机内核,状态信息及进程资源分布在内核之中,虚拟机是作为一个整体对象进行热迁移,不关心内部情况,在冻结过程中,虚拟机内存可以在指定位置获取,且只需要保存虚拟机CPU及其设备信息就可完成恢复操作,而容器内存分布在进程之间,需要根据进程信息去依次获取相应内存信息,并且与容器相关需要在冻结步骤中保存的状态信息和资源对象十分复杂,大约有1000左右的对象信息需要保存,而且有的对象信息内核并没有提供相应的接口直接获取,虚拟机则只需要保存70个左右的对象信息且可以直接获取。同理,在容器恢复过程中需要创建大量的对象或状态来支持容器进程组的恢复。除此之外,还有几个关键技术问题需要解决,由于容器之间的进程组之间会存在嵌套父子关系,热迁移过程需要维持进程之间的关系,所以进程子树的迁移问题需要得以解决,除了这个问题以外,CRIU这个面向主流linux内核研究容器热迁移的项目组还存在共享内存及共享文件描述符的迁移,存活状态的TCP链接的迁移及对进程冻结时间的优化这几个问题需要得以解决。

 

4.研究进展

   目前的研究思路是尝试了解linux内核与进程有关的机制,并隔离出容器虚拟化环境所需要的资源和状态信息,将这些对象信息通过图的方式保存下来用于容器的冻结操作,由于这个过程比较复杂,其中涉及到有关内核中的进程相关机制的技术细节需要扎实的linux内核的基础知识,目前正在深入研究linux内核,尝试将容器的虚拟化环境从linux内核中隔离出来,其中会涉及到进程子树迁移问题的解决,需要熟悉进程之间通过namespace构建父子关系的机制并思考如何保存并恢复进程之间的关系。在此基础上,再通过pre-copy memory的迁移机制实现容器热迁移的基本功能。目前Dokcer1.13版本的出现,其中checkpoint命令行可以实现为一个Dokcer容器创建检查点的功能,从而实现对该容器的虚拟环境的隔离性的描述,这对我们实现Docker热迁移具有很明显的参考价值,在接下来的研究过程中,我需要研究Docker checkpoint命令是如何将容器的虚拟化环境隔离出来的,并研究隔离过程中所需要保存的状态及资源在操作系统中的分布。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章