近日,初创公司HyperHQ发布了他们的开源项目Hyper,Hyper是一个可以在hypervisor上运行Docker镜像的引擎,它融合了Docker容器和虚拟机的优点,旨在打造一个性能更好、更安全的引擎。Hyper与Docker的核心区别在于Hyper没有使用Container技术,而是通过VM直接运行Docker镜像,它是一个完全基于虚拟化的解决方案。

InfoQ:能简单介绍下Hyper吗?为什么你们要做Hyper?

王旭: 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也有五年的历史了,和虚拟机有顺畅合作的软硬件上下游产品非常多,容器正在赶超,但虚拟机无疑是先行者。

InfoQ:Docker的优势是快、轻量,你们有对Hyper做性能测试吗?表现如何?

王旭:对于虚拟机本身的性能,不仅我们,很多人也测试过,对于CPU/内存子系统为主要约束的应用,虚拟机的性能开销非常低,在大多数测试中,都可以得到95%甚至99%以上的裸机性能。

而在IO层面上,虚拟机确实性能开销相对大,但这和IO设备关系很大,一般IO设备越高速,影响越明显。很多云场景中,高速设备是通过IOV等技术,直接透明映射给虚机,来增强性能的,而对大部分云存储设备的性能来说,虚拟机并不构成关键损失。并且,对多租户环境,如果不使用hyper这样的技术,那么就必然还是需要把容器放入虚拟机来进行管理。

对于容器来说,启动时间也是一项被感知的明显指标,在第一次亮相meetup时,我使用一台装备超低电压i3处理器的小盒子,1秒钟便启动了一个完整的ubuntu docker image,在发布的时候,这个小盒子的性能大概达到了450毫秒,而在一台至强CPU的服务器上,能达到大约350毫秒启动。

InfoQ:Hyper为什么能有如此好的性能?

王旭:说来惭愧,其实我们只是展示了虚机本来能达到的能力,我们不生产性能,我们只是开销的搬运工——我们简化了硬件模型和kernel的硬件支持,这样就不必费力去扫描和初始化一些本没有用的设备;我们省掉了完整的OS,这样就没有了init任务的影响;我们还是用了qboot,降低了老旧BIOS在引导过程中消耗的空间;此外还有一些流程上的细节优化,最终呈现出了Hyper现在的性能。

InfoQ:你认为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,来提升启动速度一样。

Hyper:基于Hypervisor的容器化解决方案的更多相关文章

  1. 案例 | 腾讯广告 AMS 的容器化之路

    作者 张煜,15年加入腾讯并从事腾讯广告维护工作.20年开始引导腾讯广告技术团队接入公司的TKEx-teg,从业务的日常痛点并结合腾讯云原生特性来完善腾讯广告自有的容器化解决方案 项目背景 腾讯广告承 ...

  2. DCOS实践分享(1):基于图形化模型设计的应用容器化实践

    2015年11月29日,Mesos Meetup 第三期 - 北京技术沙龙成功举行.本次活动由数人科技CTO 肖德时 和 Linker Networks 的 Sam Chen 一起组织发起. 在这次m ...

  3. 容器部署解决方案Docker

      容器部署解决方案Docker 课程目标 目标1:了解Docker与虚拟机的不同点,相比的优势 目标2:掌握Docker的启动方法 目标3:掌握Docker镜像操作 目标4:掌握Docker容器操作 ...

  4. .NET微服务 容器化.NET应用架构指南(支持.NET Core2)

    介绍 企业通过使用容器,日益实现成本节约.解决部署问题并改进 DevOps 和生产操作. 通过创建 Azure 容器服务.Azure Service Fabric 等产品,同时与 Docker.Mes ...

  5. 网页静态化解决方案-Freemarker demo+语法

    1.网页静态化技术Freemarker 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说 ...

  6. 支付宝客户端架构解析:Android 容器化框架初探

    摘要: 本文将介绍支付宝 Android 容器化框架设计的基本思路. 1. 前言 由本章节开始,我们将从支付宝客户端的架构设计方案入手,细分拆解客户端在“容器化框架设计”.“网络优化”.“性能启动优化 ...

  7. 容器化-Docker介绍

    导读:本文章对Docker技术进行了介绍,阐述了Docker的技术发展历程.容器与虚拟机的差异.Docker原理.特点.Docker三组件和Docker带来的影响,为我们进一步理解Docker打下基础 ...

  8. Atitit s2018.6 s6 doc list on com pc.docx Atitit s2018.6 s6 doc list on com pc.docx  Aitit algo fix 算法系列补充.docx Atiitt 兼容性提示的艺术 attilax总结.docx Atitit 应用程序容器化总结 v2 s66.docx Atitit file cms api

    Atitit s2018.6 s6  doc list on com pc.docx Atitit s2018.6 s6  doc list on com pc.docx  Aitit algo fi ...

  9. Docker---大型项目容器化改造

           虚拟化和容器化是项目云化不可避免的两个问题.虚拟化由于是纯平台操作,一个运行于linux操作系统的项目几乎不需要做任何改造就可以支持虚拟化.而项目如果要支持容器化则需要做许多细致的改造工 ...

随机推荐

  1. JS eval()函数

    js  eval()函数   这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它.   举个小例子:    //执行表达式  var the_unevaled_answer = & ...

  2. Struts2.0 封装请求数据和拦截器介绍

    1. Struts2 框架中使用 Servlet 的 API 来操作数据 1.1 完全解耦合的方式 Struts2 框架中提供了一个 ActionContext 类,该类中提供了一些方法: stati ...

  3. django 多数据库时 ORM语句 选择数据库

    多数据库时ORM语句选择数据库 不需要save的操作: 查询(删除的话查询语句后面加一个.delete()即可,修改的话在后面加一个.update()即可): models.表名.objects.us ...

  4. Redis的LRU机制(转)

    原文:Redis的LRU机制 在Redis中,如果设置的maxmemory,那就要配置key的回收机制参数maxmemory-policy,默认volatile-lru,参阅Redis作者的原博客:a ...

  5. window下安装mysql详细步骤

    1.下载安装包 打开mysql官网下载页面:http://dev.mysql.com/downloads/mysql/ 1.选择相应的版本和平台 2.mysql配置 打开刚刚解压的文件夹F:\mysq ...

  6. 基于UDP的套接字、粘包问题

    一.基于UDP的套接字 UDP服务端 ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 inf_loop: #服务器无限循环 cs = ss.recvfro ...

  7. Andrew Ng机器学习编程作业:Regularized Linear Regression and Bias/Variance

    作业文件: machine-learning-ex5 1. 正则化线性回归 在本次练习的前半部分,我们将会正则化的线性回归模型来利用水库中水位的变化预测流出大坝的水量,后半部分我们对调试的学习算法进行 ...

  8. 48dp rhythm

  9. sql server自动化运维脚本

    数据库运维中盛传一个小段子,我误删除了数据库,改怎么办?有备份还原备份,没有备份就准备简历!听起来有趣但发生在谁身上,谁都笑不起来.接触了很多的客户发现90%客户的运维策略都不是很完善.本篇就分享一些 ...

  10. 【ORACLE】10步全然卸载CRS

    版权声明:本文为博主原创文章(原文:blog.csdn.net/clark_xu 徐长亮的专栏),未经博主同意不得转载. https://blog.csdn.net/u011538954/articl ...