玄苦
苦海无边,回头是岸

导航

 

简介

这是本博客系列云计算相关文章中的第一篇,所有文章请参考:

博客所有文章

名称解释

目前主流的虚拟机一共分成四类:

  1. 硬件层虚拟机

    典型代表为: KVM/Xen等产品。抽象出完整的计算机硬件系统,虚拟机可以安装别的操作系统。

  2. OS层虚拟机

    典型代表为: LXC/Warden。复制操作系统运行环境,创造独立的运行环境容器,不可以安装别的操作系统。

  3. API层虚拟机

    典型代表为: Wine。实现操作系统相互调用的proxy层,实现在一个操作系统之上能够运行另外一个操作系统的程序。

  4. 编程语言层虚拟机

    典型代表为: JVM。用于支持某个编程语言自定义字节码的运行, 实现语言的跨平台移植能力。

本文主要集中描述硬件层虚拟机和OS层虚拟机。

硬件层虚拟机

虚拟机技术

一般来说, 虚拟机技术分成三层:

  1. 硬件层
  2. 硬件管理层
  3. 客户操作系统层

虚拟机技术核心就在于第二层的硬件管理层。如何管理好所有的物理硬件, 并为上层的多个虚拟机提供硬件界面。

根据这一层的实现, 主要又分成了两类虚拟机技术:

  1. 直接管理硬件

    代表系统: Xen, VMWare ESX, 微软的Hyper-V。

    是他自己实现了一个通用的硬件管理层。物理机通电启动以后, 先启动自己裁剪过的一个通用内核, 然后再启动上面的各个虚拟机。

  2. 间接管理硬件

    代表系统: KVM, VMWare Workstation, VirtualBox都属于这一类。

    依赖宿主机实现硬件管理层。物理机通电启动以后, 还是先启动宿主机的原生操作系统, 然后再启动上面的各个虚拟机。

在本文中, 主要描述KVM和Xen两个虚拟化产品。虽然KVM起步比Xen晚了10多年, 但是目前KVM势头比Xen猛很多, 从性能对比来看, KVM也比Xen要好很多。

其主要原因还是KVM"屈服"于Linux, 让其管理硬件, 而Xen就是因为要取代Linux管理资源, 一直被Linux社区排斥。导致其一直发展得不温不火。

所以说 与其发展早, 不如大腿抱得好。

KVM

历史发展

  1. 2006.10

    以色列一家创业公司Qumranet为自己的VDI产品开发虚拟机。并于2006.10月对外宣布了KVM的诞生, 并且于同月KVM代码被吸纳如Linux Kernel。

    当时其实另外一个虚拟机技术Xen已经很成熟了, 但是他没有进入Linux社区, 主要原因是当时硬件虚拟机技术尚未成熟, 为了提高运行效率, Xen采用了替代内核进行资源管理的技术方案。这个方案使得当时的Linux Kernel的社区不愿意接受Xen进入社区。

  2. 2008.9

    两年过后, KVM已经逐渐成熟了, 于是Redhat公司斥巨资1亿刀将KVM收入麾下。并在其新的企业版Linux RHEL6代替了Xen作为默认的虚拟机技术方案。

技术概览

KVM模块
  1. 初始化CPU硬件, 打开虚拟化模式, 将虚拟客户机运行在虚拟机模式之下, 并对虚拟客户机提供一定的支持

    1. 初始化内部数据结构
    2. 打开CPU的虚拟化模式开关
    3. 创建/dev/kvm来等待来自用户空间的命令
  2. 虚拟机管理的操作是通过用户态程序QEMU来执行的, KVM和QEMU之间的交互是通过/dev/kvm的IOCTL调用来通信的。

    1. QEMU跟/dev/kvm交互说要创建虚拟机
    2. KVM在内核创建对应虚拟机的数据结构, 并返回句柄给QEMU
    3. QEMU通过这个句柄再进行客户虚拟机相关操作, 比如增加虚拟机CPU个数, 创建内存映射关系
  3. 在虚拟机当中, 内存虚拟化非常麻烦。普通操作系统是通过MMU将虚拟地址转换为物理地址, 在虚拟机当中, 需要将虚拟机内部的虚拟地址转换为虚拟机当中的物理地址, 再转换为实际的物理地址。KVM中内存映射实现机制叫 影子页表。

    但是始终效率都不高, 于是Intel再一次出场了, 哥通过一个EPT的技术拯救天下, 硬件直接支持二次转换, 再一次大大提高了虚拟机的性能。

QEMU

QEMU本身就是一个著名的纯软件的开源虚拟机软件。他实现了软件层面的模拟CPU, 内存, IO等操作, 甚至可以模拟别的CPU架构的机器, 比如在X86的机器上模拟MIPS的指令。

他是纯软件实现,所以性能低下。为了提高性能, 于是KVM和QEMU就这么联姻了。

虚拟机运行期间, 入口还是QEMU, QEMU通过KVM模块提供的系统调用进入内核, 由KVM模块将虚拟机设置与处理机的虚拟模式, 遇到输入输出设备处理的时候, KVM模块再返回给QEMU来处理。

Intel虚拟化技术

Intel的虚拟化硬件相关的技术主要分成三类:

  1. VT-x: CPU相关的技术
  2. VT-d: 芯片组层面, 将物理设备直接分配给客户机
  3. VMDq/SR-IOV: 输入输出相关的技术

Xen

历史发展

  1. 20世纪90年代

    伦敦剑桥大学的Ian PrattKeir Fraser在做一个叫XenoServer的研究项目中, 开发了第一版的Xen虚拟机。

    作为第一代虚拟机, X86处理器还不具备对虚拟化技术的硬件支持, 为了支持不同的操作系统, 做了不少特殊的修改。

  2. 2002年中

    这两个哥们发现越来越多的操作系统升级和维护, 发现自己的人力好像搞不定了。

    于是哥们一商量, 决定将系统开源。开源之后正式推出了1.0版本和2.0版本。

  3. 2005年

    2004年开始, Intel公司开始为Xen支持硬件虚拟化的支持, 配合该项目。于2005年, Xen发布了3.0版本。

    该版本正式支持了Intel的VT技术和IA64架构, 终于可以支持客户操作系统不做任何修改就能被虚拟了。

  4. 2007年

    思杰(citrix)公司出资5亿美金收购了XenSource, 成为了Xen虚拟机技术的新东家。

总体来说, 因为Xen重新修改了Linux资源管理的方式, 使得很多内核人员对Xen表示不满, 一直不愿意将Xen项目纳入Linux Kernel。

这种形式一直持续到2010年, 在基于内核的PVOPS对Xen做了大量重写之后,内核社区才勉强接纳了Xen。

目前Linux3.0版本开始内核对Xen的支持是越来越好了。

参考

  1. KVM vs Xen Benchmark. http://www.infoq.com/cn/news/2014/09/kvm-vs-xen
  2. KVM虚拟化技术. http://book.51cto.com/art/201311/416103.htm

OS层虚拟机代表——Docker

一句话简介

Docker击中市场的痛点是: 服务迁移。

从一个云系统迁移到另外一个云系统的透明化解决方案。底层技术是利用类似LXC的Container轻量级虚拟化技术。

历史发展

  1. 2010年初

    Solomon Hykes, 这哥们成立了一个专门做PaaS的公司DotCloud: https://www.dotcloud.com/。

    但是PaaS平台不好搞, 一方面市场没想象中那么受欢迎; 另一方面不断有大公司进场: IBM的Blue Cloud, Amazon的EC2, Google的GAE, VMWare的Cloud Foundry等。

    公司在2011年和2013年的时候分别拿了1000w左右的投资。

  2. 2013年初

    [Solomon Hykes]决定将自己的核心IaaS层的资源隔离层给开源。开源项目名称就叫Docker。

    结果没想到, 当前市场环境下, Docker算是切中市场时机了, 在市场上大受欢迎, 业界就是需要有这样一个统一的IaaS层的封装来支持用户从一个PaaS迁移到另外一个PaaS。

    而上层各个PaaS平台为了使自己在这一轮浪潮中不落于下风, 纷纷宣布自己底层会支持Docker, 这样本来是竞争对手的公司全部变成了Docker的盟友。连过期的带头大哥微软都宣布自己要在自己的操作系统中支持Docker。

    公司在2014年初和年底分别获得了1000w和4000w的投资。

  3. 2013年底

    看到Docker这个东西都宣兵夺主了, 而且明显发展前途会比DotCloud要好很多。于是Solomon Hykes决定, 将公司的DotCloud业务卖给了德国的PaaS公司cloudControl。将自己公司的重心全部转变到Docker方向。

  4. 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主要是如下几个层面的故事:

  1. 核心的Container虚拟技术

    Container的虚拟技术主要如下:

    1. 早期的 FreeBSD Jails, Solaris Zones
    2. 近来成熟的 OpenVZ, LXC, Warden

    Docker底层使用了LXC, 而LXC/Warden底层其实都是CGroup技术。就虚拟技术其实几乎没怎么扩展LXC的东西。主要还是外围的工具整理, 使得该虚拟机内部的东西可以很方便的迁移。

    另外Docker提倡的概念是将Container理解为一个App, 比如做LAMP网站, LXC的概念是将所有应用都安装在一个虚拟机里面; Docker提倡的是一个应用装在一个虚拟机里面, Nginx/mysql/php分别一个Container。

  2. 在各PaaS系统之间自由迁移

    目前只此一家, 别无分店。这也是Docker项目这两年来白热化的主要原因, 因为各家大公司的PaaS都说会支持他。

  3. 提供企业级Container虚拟化技术解决方案

    这个市场目前是Amazon的AWS/VMWare的vSphere比较狠, 一个做公有云, 一个做私有云, 各自每年的收入大概都在50亿左右(来自公司2014年财报)。

    Docker目前主要是走好第1,2两点, 这一点估计还有一段路要走。

谁在支持

Greylock Partners 领投 4000w美金。

谁在用

用的人还没有特别大规模的用户, 不过有很多大公司都宣布会支持, 所以估计不久的将来会有不少人会用。

https://www.docker.com/resources/usecases/

使用API

使用非常简单, 这里是Docker的中文手册

参考

  1. VMWare and Docker. http://blogs.vmware.com/cto/vmware-containers-containers-without-compromise/
  2. Docker On CrunchBase. http://www.crunchbase.com/organization/docker
  3. Docker. https://www.docker.com/
  4. Docker Manual. http://yeasy.gitbooks.io/docker_practice/content/index.html
  5. LXC and Docer. http://stackoverflow.com/questions/17989306/what-does-docker-add-to-just-plain-lxc
  6. Contain your enthusiasm. http://www.cybera.ca/news-and-events/tech-radar/contain-your-enthusiasm-part-two-jails-zones-openvz-and-lxc/
posted on 2015-05-17 14:47  玄苦  阅读(2089)  评论(1编辑  收藏  举报