近日,初创公司HyperHQ发布了他们的开源项目 Hyper ,Hyper是一个可以在hypervisor上运行Docker镜像的引擎,它融合了Docker容器和虚拟机的优点,旨在打造一个性能更好、更安全的引擎。Hyper与Docker的核心区别在于Hyper没有使用Container技术,而是通过VM直接运行Docker镜像,它是一个完全基于虚拟化的解决方案。
王旭:Hyper是一个可以在hypervisor上,不安装完整操作系统,直接运行Docker Image的运行引擎。Hyper可以在hypervisor上运行一组相关的Docker Image,而不是一个,也正是Kubernetes所阐述的Pod的概念——不是一个虚机,不是一个胖容器,而是一组关联的容器。再进一步说,Hyper致力于成为一个平台中立、hypervisor中立的执行引擎,除了支持KVM/QEMU外,接下来Hyper还将会支持Xen。
Docker的发明,给每个人以震撼,同时也有遗憾。当你看到不同的创新的时候,心境并不完全相同,对于有些,你感慨它如此卓越新颖,着实叹服;对于有些,你感慨它工作量如此巨大,令人景仰;而对于Docker这些,我想,很多人的感慨都是——怎么不是我。
Docker的影响是如此深远,它以一种 App-Centric的完整环境封装,串联了开发、测试、交付的各个环节,从此OS与应用被彻底解耦了,这绝对是开源/技术创业的一个典范。然而,Docker使用的技术却“毫无新意”,UnionFS已经在Live CD中应用了近10年,容器,即使是LXC也比Docker早五年,一切条件都已具备,可是却只有dotCloud的家伙们捡起了这个贝壳,让人不禁感慨与成功失之交臂。
随着Docker的火热,我们也在不断地思考——Docker对DevOps的影响,OS的本质是什么,Docker领域还有什么创新。Mesos、Kubernetes、Novm这些项目都有不错的发展,我们也从中得到了启发。其实Google的非官方项目Novm就是一个使用hypervisor的执行引擎,只是开发一直停留在业余项目的水平而已。
虚拟机的问题不在“虚拟”,而在“机”,摆脱复杂的OS,虚机也能飞;Docker的核心在于以应用为中心的镜像封装,而非容器,封装改变了世界,而容器是封装的运行时承载而已。有了这两方面的思路,我们就取两者的长处,成为了一个新的选择。
InfoQ:您提到,Hyper其实就是Hypervisor+Docker镜像,而Docker是LXC+Docker镜像。Hyper为什么会选择Hypervisor?相比LXC,Hypervisor有什么优势?
王旭:Hypervisor的最明显的好处就在于,hypervisor的进程是由另一个kernel调度,系统调用由另一个kernel处理,而并非宿主机的kernel。这样,一方面用户可以选择自己的kernel,另一方面也增强了隔离性,hypervisor发生漏洞,对宿主机和其它虚拟机的威胁的概率是远低于容器漏洞的,毕竟容器向用户进程暴露了太多的入口点。
虚拟机的另一个优势是,虚拟机相关的产业链已经非常成熟,Xen/KVM已经有十多年的历史了,围绕虚拟机打造的OpenStack也有五年的历史了,和虚拟机有顺畅合作的软硬件上下游产品非常多,容器正在赶超,但虚拟机无疑是先行者。
王旭:对于虚拟机本身的性能,不仅我们,很多人也测试过,对于CPU/内存子系统为主要约束的应用,虚拟机的性能开销非常低,在大多数测试中,都可以得到95%甚至99%以上的裸机性能。
而在IO层面上,虚拟机确实性能开销相对大,但这和IO设备关系很大,一般IO设备越高速,影响越明显。很多云场景中,高速设备是通过IOV等技术,直接透明映射给虚机,来增强性能的,而对大部分云存储设备的性能来说,虚拟机并不构成关键损失。并且,对多租户环境,如果不使用hyper这样的技术,那么就必然还是需要把容器放入虚拟机来进行管理。
对于容器来说,启动时间也是一项被感知的明显指标,在第一次亮相meetup时,我使用一台装备超低电压i3处理器的小盒子,1秒钟便启动了一个完整的ubuntu docker image,在发布的时候,这个小盒子的性能大概达到了450毫秒,而在一台至强CPU的服务器上,能达到大约350毫秒启动。
王旭:说来惭愧,其实我们只是展示了虚机本来能达到的能力,我们不生产性能,我们只是开销的搬运工——我们简化了硬件模型和kernel的硬件支持,这样就不必费力去扫描和初始化一些本没有用的设备;我们省掉了完整的OS,这样就没有了init任务的影响;我们还是用了qboot,降低了老旧BIOS在引导过程中消耗的空间;此外还有一些流程上的细节优化,最终呈现出了Hyper现在的性能。
王旭:我们把App-Centric的理念带回到虚机来,我们让虚机回到了它的原本使命——承载应用,而不是完全模拟物理机,承载完整的Linux发行版。
InfoQ:Hyper与前段时间因特尔发布的Clear Linux有什么区别?是不是有异曲同工之处?
王旭:我们之前确实不了解Intel的这个项目,事后才知道他们做了一年多了,确实有很多相似之处——都在跑容器镜像,都在追求更低开销。
当然也很多不同,两个项目的出发点不完全相同,Intel的项目的出发点在于追求极致性能,证明硬件能力,所以使用了很多极端优化手段,确实也取得了很好的效果。
而Hyper项目一开始就致力于打造应用为中心的hypervisor,我们使用环境中已有的QEUM,利用已有的kernel feature,着重打造pod的可管理性,维持跨平台、多hypervisor的支持。虽然没有使用很多极端优化,但是事实证明,这种开箱即得的性能也是不错的。
更重要的是,两个项目都是开源的,大家可以互相借鉴,做得更好。尤其Intel OTC一直都是kernel的主要贡献机构之一,相信很多Clear Linux的feature大家都可以用上,而Hyper由于与Clear Linux相似,所以也可以第一时间把这些好处带给用户,就像Hyper已经集成了qboot,来提升启动速度一样。