简介
这是本博客系列云计算相关文章中的第一篇,所有文章请参考:
名称解释
目前主流的虚拟机一共分成四类:
-
硬件层虚拟机
典型代表为: KVM/Xen等产品。抽象出完整的计算机硬件系统,虚拟机可以安装别的操作系统。
-
OS层虚拟机
典型代表为: LXC/Warden。复制操作系统运行环境,创造独立的运行环境容器,不可以安装别的操作系统。
-
API层虚拟机
典型代表为: Wine。实现操作系统相互调用的proxy层,实现在一个操作系统之上能够运行另外一个操作系统的程序。
-
编程语言层虚拟机
典型代表为: JVM。用于支持某个编程语言自定义字节码的运行, 实现语言的跨平台移植能力。
本文主要集中描述硬件层虚拟机和OS层虚拟机。
硬件层虚拟机
虚拟机技术
一般来说, 虚拟机技术分成三层:
- 硬件层
- 硬件管理层
- 客户操作系统层
虚拟机技术核心就在于第二层的硬件管理层。如何管理好所有的物理硬件, 并为上层的多个虚拟机提供硬件界面。
根据这一层的实现, 主要又分成了两类虚拟机技术:
-
直接管理硬件
代表系统: Xen, VMWare ESX, 微软的Hyper-V。
是他自己实现了一个通用的硬件管理层。物理机通电启动以后, 先启动自己裁剪过的一个通用内核, 然后再启动上面的各个虚拟机。
-
间接管理硬件
代表系统: KVM, VMWare Workstation, VirtualBox都属于这一类。
依赖宿主机实现硬件管理层。物理机通电启动以后, 还是先启动宿主机的原生操作系统, 然后再启动上面的各个虚拟机。
在本文中, 主要描述KVM和Xen两个虚拟化产品。虽然KVM起步比Xen晚了10多年, 但是目前KVM势头比Xen猛很多, 从性能对比来看, KVM也比Xen要好很多。
其主要原因还是KVM"屈服"于Linux, 让其管理硬件, 而Xen就是因为要取代Linux管理资源, 一直被Linux社区排斥。导致其一直发展得不温不火。
所以说 与其发展早, 不如大腿抱得好。
KVM
历史发展
-
2006.10
以色列一家创业公司
Qumranet
为自己的VDI产品开发虚拟机。并于2006.10月对外宣布了KVM的诞生, 并且于同月KVM代码被吸纳如Linux Kernel。当时其实另外一个虚拟机技术
Xen
已经很成熟了, 但是他没有进入Linux社区, 主要原因是当时硬件虚拟机技术尚未成熟, 为了提高运行效率, Xen采用了替代内核进行资源管理的技术方案。这个方案使得当时的Linux Kernel的社区不愿意接受Xen进入社区。 -
2008.9
两年过后, KVM已经逐渐成熟了, 于是Redhat公司斥巨资1亿刀将KVM收入麾下。并在其新的企业版Linux RHEL6代替了Xen作为默认的虚拟机技术方案。
技术概览
KVM模块
-
初始化CPU硬件, 打开虚拟化模式, 将虚拟客户机运行在虚拟机模式之下, 并对虚拟客户机提供一定的支持
- 初始化内部数据结构
- 打开CPU的虚拟化模式开关
- 创建/dev/kvm来等待来自用户空间的命令
-
虚拟机管理的操作是通过用户态程序QEMU来执行的, KVM和QEMU之间的交互是通过/dev/kvm的IOCTL调用来通信的。
- QEMU跟/dev/kvm交互说要创建虚拟机
- KVM在内核创建对应虚拟机的数据结构, 并返回句柄给QEMU
- QEMU通过这个句柄再进行客户虚拟机相关操作, 比如增加虚拟机CPU个数, 创建内存映射关系
-
在虚拟机当中, 内存虚拟化非常麻烦。普通操作系统是通过MMU将虚拟地址转换为物理地址, 在虚拟机当中, 需要将虚拟机内部的虚拟地址转换为虚拟机当中的物理地址, 再转换为实际的物理地址。KVM中内存映射实现机制叫 影子页表。
但是始终效率都不高, 于是Intel再一次出场了, 哥通过一个EPT的技术拯救天下, 硬件直接支持二次转换, 再一次大大提高了虚拟机的性能。
QEMU
QEMU本身就是一个著名的纯软件的开源虚拟机软件。他实现了软件层面的模拟CPU, 内存, IO等操作, 甚至可以模拟别的CPU架构的机器, 比如在X86的机器上模拟MIPS的指令。
他是纯软件实现,所以性能低下。为了提高性能, 于是KVM和QEMU就这么联姻了。
虚拟机运行期间, 入口还是QEMU, QEMU通过KVM模块提供的系统调用进入内核, 由KVM模块将虚拟机设置与处理机的虚拟模式, 遇到输入输出设备处理的时候, KVM模块再返回给QEMU来处理。
Intel虚拟化技术
Intel的虚拟化硬件相关的技术主要分成三类:
- VT-x: CPU相关的技术
- VT-d: 芯片组层面, 将物理设备直接分配给客户机
- VMDq/SR-IOV: 输入输出相关的技术
Xen
历史发展
-
20世纪90年代
伦敦剑桥大学的
Ian Pratt
和Keir Fraser
在做一个叫XenoServer
的研究项目中, 开发了第一版的Xen虚拟机。作为第一代虚拟机, X86处理器还不具备对虚拟化技术的硬件支持, 为了支持不同的操作系统, 做了不少特殊的修改。
-
2002年中
这两个哥们发现越来越多的操作系统升级和维护, 发现自己的人力好像搞不定了。
于是哥们一商量, 决定将系统开源。开源之后正式推出了1.0版本和2.0版本。
-
2005年
2004年开始, Intel公司开始为Xen支持硬件虚拟化的支持, 配合该项目。于2005年, Xen发布了3.0版本。
该版本正式支持了Intel的VT技术和IA64架构, 终于可以支持客户操作系统不做任何修改就能被虚拟了。
-
2007年
思杰(citrix)公司出资5亿美金收购了XenSource, 成为了Xen虚拟机技术的新东家。
总体来说, 因为Xen重新修改了Linux资源管理的方式, 使得很多内核人员对Xen表示不满, 一直不愿意将Xen项目纳入Linux Kernel。
这种形式一直持续到2010年, 在基于内核的PVOPS对Xen做了大量重写之后,内核社区才勉强接纳了Xen。
目前Linux3.0版本开始内核对Xen的支持是越来越好了。
参考
- KVM vs Xen Benchmark. http://www.infoq.com/cn/news/2014/09/kvm-vs-xen
- KVM虚拟化技术. http://book.51cto.com/art/201311/416103.htm
OS层虚拟机代表——Docker
一句话简介
Docker击中市场的痛点是: 服务迁移。
从一个云系统迁移到另外一个云系统的透明化解决方案。底层技术是利用类似LXC的Container轻量级虚拟化技术。
历史发展
-
2010年初
Solomon Hykes, 这哥们成立了一个专门做PaaS的公司DotCloud: https://www.dotcloud.com/。
但是PaaS平台不好搞, 一方面市场没想象中那么受欢迎; 另一方面不断有大公司进场: IBM的
Blue Cloud
, Amazon的EC2
, Google的GAE
, VMWare的Cloud Foundry
等。公司在2011年和2013年的时候分别拿了1000w左右的投资。
-
2013年初
[Solomon Hykes]决定将自己的核心IaaS层的资源隔离层给开源。开源项目名称就叫Docker。
结果没想到, 当前市场环境下, Docker算是切中市场时机了, 在市场上大受欢迎, 业界就是需要有这样一个统一的IaaS层的封装来支持用户从一个PaaS迁移到另外一个PaaS。
而上层各个PaaS平台为了使自己在这一轮浪潮中不落于下风, 纷纷宣布自己底层会支持Docker, 这样本来是竞争对手的公司全部变成了Docker的盟友。连过期的带头大哥微软都宣布自己要在自己的操作系统中支持Docker。
公司在2014年初和年底分别获得了1000w和4000w的投资。
-
2013年底
看到Docker这个东西都宣兵夺主了, 而且明显发展前途会比DotCloud要好很多。于是
Solomon Hykes
决定, 将公司的DotCloud
业务卖给了德国的PaaS公司cloudControl。将自己公司的重心全部转变到Docker方向。 -
2014年
现在公司有50~100号人, 全职在为Docker贡献代码, 平均每月CI 500次左右。
但是总体来说, 公司的技术是好的, 但是如何盈利, 现在并不看好。他能融资4000w, 估值400M的主要原因, 是因为其要将Container技术取代VMWare技术的信心。
这对投资人来说是一次赌博, 我个人认为取代倒不至于, 应该是虚拟机技术和Container技术共存的局面。虽然Container更轻量, 但是Container的安全性, 周边生态(资源管理, 负载, 容灾等), 市场检验相比于VMWare公司对应的产品, 还是差很多的。
而且VMWare已经为其姊妹公司Pivotal公司的Cloud Foundry
产品提供了Container级别的产品(Warden)。
等Docker验证Container市场OK之后, VMWare可以相对容易的推出一个类似产品, 并且保持跟Docker的兼容。
倒是抱紧各个PaaS/IaaS平台的大腿, 如果PaaS市场将来能够成长起来的话, Docker也能跟着成长起来。但是即使是PaaS成长起来了之后, 作为开源技术供应商, 又如何挣钱呢?
竞品
Docker主要是如下几个层面的故事:
-
核心的Container虚拟技术
Container的虚拟技术主要如下:
- 早期的 FreeBSD Jails, Solaris Zones
- 近来成熟的 OpenVZ, LXC, Warden
Docker底层使用了LXC, 而LXC/Warden底层其实都是CGroup技术。就虚拟技术其实几乎没怎么扩展LXC的东西。主要还是外围的工具整理, 使得该虚拟机内部的东西可以很方便的迁移。
另外Docker提倡的概念是将Container理解为一个App, 比如做LAMP网站, LXC的概念是将所有应用都安装在一个虚拟机里面; Docker提倡的是一个应用装在一个虚拟机里面, Nginx/mysql/php分别一个Container。
-
在各PaaS系统之间自由迁移
目前只此一家, 别无分店。这也是Docker项目这两年来白热化的主要原因, 因为各家大公司的PaaS都说会支持他。
-
提供企业级Container虚拟化技术解决方案
这个市场目前是Amazon的AWS/VMWare的vSphere比较狠, 一个做公有云, 一个做私有云, 各自每年的收入大概都在50亿左右(来自公司2014年财报)。
Docker目前主要是走好第1,2两点, 这一点估计还有一段路要走。
谁在支持
Greylock Partners 领投 4000w美金。
谁在用
用的人还没有特别大规模的用户, 不过有很多大公司都宣布会支持, 所以估计不久的将来会有不少人会用。
https://www.docker.com/resources/usecases/
使用API
使用非常简单, 这里是Docker的中文手册
参考
- VMWare and Docker. http://blogs.vmware.com/cto/vmware-containers-containers-without-compromise/
- Docker On CrunchBase. http://www.crunchbase.com/organization/docker
- Docker. https://www.docker.com/
- Docker Manual. http://yeasy.gitbooks.io/docker_practice/content/index.html
- LXC and Docer. http://stackoverflow.com/questions/17989306/what-does-docker-add-to-just-plain-lxc
- Contain your enthusiasm. http://www.cybera.ca/news-and-events/tech-radar/contain-your-enthusiasm-part-two-jails-zones-openvz-and-lxc/
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步