什么应用场景适用Container? | U刻
  • 什么应用场景适用Container?

    栏目:技术分享

    如果回顾一下2014年Docker领域的大事件,你就会发现很多关于IT巨头拥抱Docker的新闻,Docker与容器化的这股趋势显然势不可挡。所以,Docker受到如此多攻城狮的青睐也是必然的。攻城狮需要学习如何利用Docker技术实现DevOps自动化,做好应用持续集成、持续交付,增强自己在未来技术领域的竞争力。

    近日,# U.E.D Devops Workshop系列技术沙龙#在广州和深圳展开,题为“Docker应用与虚拟化技术”的技术沙龙为开发者带来了Docker技术的分享。现场,来自UCloud 平台开发中心总监邱模炯和DaoCloud CEO Roby分别与技术爱好者分享了他们在Docker领域的看法与经验。

    本文,与大家分享的是UCloud 平台开发中心总监邱模炯的精彩内容,DaoCloud CEO Roby将于后续进行分享。

    嘉宾介绍

    邱模炯,UCloud 平台开发中心总监。毕业于北京大学计算机系,先后在VMware和腾讯从事Linux内核和虚拟化、数据中心自动化运营以及云平台等方面的工作,在内核开发领域拥有近10年的经验,代号MJ,以下以MJ代之。

     

    内容提纲
    1. Container和虚拟机技术要点对比;
    2. 分享了对于Container原理的思考;
    3. 重点分析了Container的适用场景;
    4. 对Clear Container的介绍和思考。
    Container VS 虚拟机

    MJ说:Container与虚拟化技术是不同层面对应用程序运行环境的打包。

    QQ截图20160405164008

    如上图,可以看到左边是一个虚拟机,包括阿里云、UCloud和AWS等平台都是基于这样的虚拟化技术来提供虚拟机的;而右边是用Docker  Container的表现形式,这两者最大的区别在于——每个虚拟机可运行自己的内核,而Container是共享一个内核的。这是最重要的区别,为Container带来了诸多的好处,当然也有不好的地方。

     

    QQ截图20160405164028

    Docker Container是一种操作系统层面的虚拟化技术,其形态类似于虚拟机。背后是通过用户态的Docker引擎和内核态的Namespace&Cgroup&aufs等组合来实现。这样的架构带来了启动速度、内存占有率、性能开销等方面的优势,但同时也带来了很大的不便利,特别是安全和隔离上的缺陷,具体如上图所示。

    Container原理

    关于Container内核背后的技术,MJ分别从Namespace、Cgroup和aufs三个方面展开并进行了解析。

    • Namespace,提供虚拟机的假象。namespace的作用就是让一组进程按运行环境加入到“Container”。可以将namespace理解为进程组按运行环境进行虚拟化的手段,不同的namepsace负责运行环境不同部分。
    • cgroup,实现资源隔离;Cgroup允许一个Container或进程组进行资源限制,比如CPU内存,使得每个Container运行所需资源有QoS保证。通过Cgroup,我们可以精确的控制每个Container的资源消耗。
    • aufs,精简镜像。aufs是个联合文件系统,其用处是精简Container镜像。它通过对镜像分层来达到目的。比如把一个Debian基础镜像(通常不变)加上emacs镜像,叠加起来成为一个在Debian上安装了emacs的最终镜像。通常说Container镜像很小是因为我们只需管理好可变的那部分镜像,而基础镜像则因为共享不必存储。这也是Docker的重要作用,维护最终镜像的分层及其依赖关系。
    Container应用场景

    Container在启动速度、性能、运行开销、镜像大小等方面占据优势,但Container很难做好在线迁移和安全隔离这两个方面。

    • 在线迁移:我们通常是采用在线迁移的方式避免业务的中断,对于Container来说,它要求先把原来的Container停机,再复制到另外一台目标机器。Container的在线迁移很难突破,几乎可以死心。
    • 安全隔离:因为Container共用一个内核,这个安全性再怎么做都比虚拟机风险大。

    不过,在线迁移不能支持问题不大。一个真正高可用的业务不能依赖于在线迁移来保证业务不中断,而是应该通过后台架构的高可用设计来保证。因为硬件总是有固定的故障率,在线迁移无法解决这个问题。

    那么Container适用于什么场景呢?这点仁者见仁、智者见智。IaaS公有云只能用虚拟机来提供,主要是从在线迁移和安全隔离的角度来考虑,而Container提供IaaS公有云很糟糕。但私有云没有安全隔离的强需求,用Container更好。PaaS类平台若基于DockerContainer则很方便,PaaS平台对安全隔离的要求可以根据平台特点从其他方面弥补。

    由于启动快、开销小和部署方便等特点,无状态的服务既然对在线迁移无需求则用Container进行集群调度更合适;而有状态的大型服务可能虚拟机更合适。另外,内部开发模式用DockerContainer会加速开发测试部署交付运维整体流程。

    总的来讲,Container和虚拟机是互补的。如DaoCloud的PaaS平台部署在UCloud之上,可以利用UCloud云平台的安全隔离。

    随后,MJ也分享了UCloud自身在内部产品后台关于Docker Container的一个案例。

    QQ截图20160405164039

    如上图,这是UCloud的某个产品对Docker Container的一个应用。我们使用Docker Container技术,实现了按需申请、快速部署、自动调度和可靠交付。具体手段是,按微服务模式把一个业务拆分成多个Container。

    Clear Container

    现有的虚拟机和Docker Container两种技术各有优点。最后,MJ介绍了一项近期社区里很有意思的技术——Clear Container,它从内核层面对一个虚拟机进行大幅度优化,而优化的目标是向Container靠拢。

    QQ截图20160405164049

    QQ截图20160405164058

    优化完以后——启动的速度是150ms,性能开销的内存是20-30M,同时还保证了隔离性和安全性。因为Clear Container本质还是虚拟机,所以它是可以做在线迁移的,不需要中断业务。同时,和虚拟机一样,安全和隔离性非常好。简而言之,ClearContainer综合了虚拟机和Container的优点。不过,这仍然处于概念阶段。

    总结

    Docker Container近两年得到快速发展,相对于系统虚拟机,其轻量便携的优点引起诸多讨论和广泛实践。从MJ的分享看来,Container和虚拟机互补,两者并不冲突。IaaS公有云只能基于虚拟机实现,而在一些安全隔离和在线迁移要求不高的场景里,Container可以替代虚拟机。

    当然,如MJ介绍的,UCloud作为领先的IaaS公有云,内部也在基于Docker Container提供产品服务。MJ主要从内核原理剖析了Docker Container和虚拟机的技术特点,希望能够为大家在选择应用Docker Container时提供了原理上的参考。