选择虚拟机还是容器?
2014-12-24张振伦
与其将容器技术和虚拟机技术割裂开来,不如将二者设计成“最佳拍档”,因为容器技术绝对可以运行在虚拟机里,享受虚拟机带来的所有优势。
最近业内有人在探讨一个趋势—虚拟机:永远的光荣还是垂死挣扎呢?这个探讨主要源于D o c k e r公司和L i n u x容器(Container)的探讨。很多人疑惑容器技术能否最终将取代虚拟机技术。可能你也听说了L i n u x容器技术,但并非每个人都花时间研究了容器技术的来龙去脉,这不是一条140字的微博能够说清的,因此先分享一点背景知识。
关于容器技术
容器技术提供了操作系统级的进程隔离,类似于硬件的虚拟化技术,这也是为什么现在会有人提出容器技术将取代虚拟机技术的主要原因。当然,容器技术还是不同于今天的虚拟机技术,它是从操作系统内部进行进程级的隔离。而我们熟知的虚拟机(基于Hypervisor的虚拟化,这里不讨论操作系统上的虚拟机技术)是基于硬件资源的虚拟化技术进行隔离,位于操作系统下面。实际容器技术已经有多年的历史,比如FreeBSD Jail和Solaris Zones等。甚至谷歌也使用容器技术实现了一些功能,并且将这些代码贡献给了L i n u x社区,从而L i n u x内核已经有一些与容器相关的组件。
但是即使有谷歌的助推和很多开源大军的努力,容器技术都没能引起大家太多的关注。直到大约一年多前D o c k e r这家公司将L i n u x的容器技术向前推进了一
步,使得它可简化应用封装,让应用真正能够跨越不同的L i n u x发行版运行,包括提供适应开发流程的A P I,从而让容器技术真正引起整个业界的瞩目。
容器和虚拟机并非简单取舍
第一次听到容器这个概念,很容易将容器技术和虚拟机技术进行对比,但是二者真不是取舍的关系。因为IT的目标是让客户成功,这就意味着要很好地运行和管理客户的应用,这不是只靠虚拟机或者容器就能够完美实现的。要想顺利运行一个应用就需要一个高效、安全和高可用的架构,这是企业应用的基本需求。
所有的企业应用都要具有这些能力的基础架构支撑,无论该应用是运行在虚拟机上或容器里。目前虚拟化技术已经形成了完整的生态圈,确保基础架构的弹性、可靠性和安全。当然,应用的管理也一样,虚拟机已经有完善的管理生态圈,确保运行在虚拟机里的应用能够很容易达到企业级管理的需求。刚起步的容器技术从应用运行到管理维护都还需要历练。
虚拟机和容器:SDDC里的最佳拍档
其实,可以将虚拟机和容器放在一起,共同提升S D D C(软件定义数据中心)的服务能力。当然,无论虚拟机还是容器技术,都是专注解决软件定义计算的部分,只是S D D C的一个部分,当然也是一个很重要的部分。
首先,容器技术为应用提供了很好的移植性,让应用可以轻松跨越不同架构迁移。但应用和数据不是负载迁移的“拦路虎”,而运维的需求,包括性能容量管理、安全和管理工具集成会让应用部署到新环境困难重重。因此,仅解决应用跨平台移植只是解决迁移挑战的一个小问题。
其次,即使我们相信容器技术和虚拟机技术都能达到同样的安全隔离等级,基于L i n u x的容器技术仍然没有在企业级获得验证。L i n u x容器只是将操作系统的子系统设计为了可跨应用工作,试图在后来添加隔离特性。这同今天成熟的Hy pervisor不同,Hy pervisor基于裸设备设计,从根上解决虚拟机隔离问题。这些L i n u x容器子系统需要很长时间才能达到虚拟机一样的成熟度。合规性是另外一个挑战,任何企业系统都有合规性的要求。虚拟机技术花费了大量时间获得企业界认可,并通过一系列合规性的审核,容器技术还需要数年的时间。
最后,与其将容器技术和虚拟机技术割裂开来,不如将二者设计成最佳拍档,因为容器技术绝对可以运行在虚拟机里,享受虚拟机带来的所有优势,包括:获得业界认可的隔离能力和安全属性,还可以获得软件定义计算之外的所有S D D C的特性,当然也可以获得虚拟化大量生态圈的支持。