一、虚拟化与云计算
1. 云计算概念
云计算是一个本世纪初才方兴未艾的热门名词,其本身是由Google前首席执行官埃里克·施密特(Eric Schmidt)在2006年8月9日的搜索引擎大会(SES San Jose 2006)上首次提出的。在此之后,云计算变得炙手可热,很多公司趁势宣传,号称自己是先进的云计算公司。加之业界也一直没有对云计算形成一个统一的定义,各种各样的云变得“乱花渐欲迷人眼”。抛开形形***的宣传,本书试图为读者一步步理清云计算的真实面目。
在现有的被大家熟知并使用的共有云计算平台中,最著名的是由Amazon(亚马逊)和Google(谷歌)公司提供的服务。
Amazon使用弹性计算云(EC2)和简单存储服务(S3)为企业提供计算和存储服务。收费的服务项目包括存储服务器、带宽、CPU资源以及月租费。月租费与电话月租费类似,存储服务器、带宽按容量收费,CPU根据时长(小时)运算量收费。Amazon把云计算做成一个大生意并没有花太长的时间:不到两年时间,在Amazon上注册的开发人员就达44万人,还有为数众多的企业级用户。云计算是Amazon增长最快的业务之一。Amazon的财报数据显示,在其2012年收入中,云计算相关业务的收入已经高达21亿美元。
Google则当数最大的云计算的使用者。Google搜索引擎就建立在分布在全世界200多个地点、超过100万台服务器的支撑之上,这些设施的数量正在迅猛增长。Google地球、地图、Gmail、Docs等也同样使用了这些基础设施。对于Google Docs[2]之类的应用,用户数据会保存在互联网上的某个位置,可以通过任何一个与互联网相连的系统十分便利地访问这些数据。Google于2008年4月推出了Google App Engine(GAE)云计算服务,GAE是采用“平台即服务”(PaaS)的云计算模式,可以让第三方开发者在GAE平台上快速地开发自己的Web应用程序,而且GAE还将开发者的Web应用程序部署在Google全球的数据中心。Google还于2012年6月底发布了自己的“基础设施即服务”(IaaS)模式的云计算平台—Google Compute Engine(GCE),GCE的底层采用的是KVM虚拟化技术,它提供了与亚马逊EC2类似的云计算服务。
随着云计算的价值被不断发掘,越来越多的大公司开始加入到研究和部署云计算技术的阵营。
2008年2月1日,IBM宣布将在中国无锡的太湖新城科教产业园为中国的软件公司建立全球第一个云计算中心。
2008年7月29日,雅虎、惠普和英特尔宣布一项涵盖美国、德国和新加坡的联合研究计划,推出云计算研究测试床,推进云计算。该计划要与合作伙伴创建6个数据中心作为研究试验平台,每个数据中心配置1400个至4000个处理器。这些合作伙伴包括新加坡资讯通信发展管理局、德国卡尔斯鲁厄大学Steinbuch计算中心、美国伊利诺伊大学香宾分校、英特尔研究院、惠普实验室和雅虎。
2010年7月,美国国家航空航天局和包括Rackspace、AMD、Intel、戴尔等支持厂商共同宣布“OpenStack”开放源代码计划,微软在2010年10月表示支持OpenStack与Windows Server 2008 R2的集成,而Ubuntu已把OpenStack添加到Ubuntu 11.04版本中。
2011年2月,思科系统正式加入OpenStack,重点研发OpenStack的网络服务。
云计算自从提出,一直没有一个明确而统一的定义。维基百科对云计算做了如下的描述[3]:云计算是一种通过因特网以服务的方式提供动态可伸缩的虚拟化的资源的计算模式(Cloud computing is a style of computing in which dynamically scalable and often virtualized resources are provided as a service over the Internet)。美国国家标准与技术研究院(NIST)定义:云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络、服务器、存储、应用软件和服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互(Cloud computing is a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction)。
1.2 云计算模式
云计算是推动IT转向以业务为中心模式的一次重大变革。它着眼于运营效率、竞争力和快速响应等实际成果。这意味着IT的作用正在从提供IT服务逐步过渡到根据业务需求优化服务的交付和使用。这种全新的模式将以前的信息孤岛转化为灵活高效的资源池和具备自我管理能力的虚拟基础架构,从而以更低的成本和更好的服务的形式提供给用户。IT即服务将提供业务所需要的一切,并在不丧失对系统的控制力的同时,保持系统的灵活性和敏捷性。
目前,云计算的主要服务形式有:SaaS(Software as a Service,软件即服务)、PaaS(Platform as a Service,平台即服务)和IaaS(Infrastructure as a Service,基础设施即服务)。
云计算系统的平台管理技术能够使大量的服务器协同工作,方便进行业务部署和开通,快速发现和恢复系统故障,通过自动化、智能化的手段实现大规模系统的可靠运营。
1.3 资源管理平台
当前比较流行的云计算平台,主要有思杰的CloudStack,开源的Eucalyptus,VMware公司的vCloud Director和开源的OpenStack等。除了VMware公司的vCloud Director没有免费版本和只支持VMware自由的虚拟化产品以外,其余几个都提供免费版本,而且支持多个虚拟化产品。Eucalyptus和OpenStack还对亚马逊的API保持兼容,基于亚马逊API的所有的脚本和软件产品都可以轻松地进行私有云部署。
现在,CloudStack和OpenStack正处在激烈的竞争中,两者都希望自己能够成为开源社区云计算平台的事实标准。CloudStack在成熟度上面明显优于OpenStack,在培育客户方面也占了先机,但是背后的推手主要是思杰。OpenStack虽然是后起之秀,但是得到了诸如IBM、思科、英特尔、惠普和戴尔等大牌厂商的支持。究竟谁是未来的开源云平台老大,鹿死谁手,还未可知。
2. 虚拟化
虚拟化是构建云基础架构不可或缺的关键技术之一。云计算的云端系统,其实质上就是一个大型的分布式系统。虚拟化通过在一个物理平台上虚拟出更多的虚拟平台,而其中的每一个虚拟平台则可以作为独立的终端加入云端的分布式系统。比起直接使用物理平台,虚拟化在资源的有效利用、动态调配和高可靠性方面有着巨大的优势。利用虚拟化,企业不必抛弃现有的基础架构即可构建全新的信息基础架构,从而更加充分地利用原有的IT投资。
虚拟化技术
虚拟化是一个广义的术语,是指计算元件在虚拟的基础上而不是真实的基础上运行,是一个为了简化管理、优化资源的解决方案。
为了表述虚拟化的一般概念,在图1-1中使用了资源这个词。在实际应用中,资源可以表现为各种各样的形式。例如,如果把操作系统及其提供的系统调用作为资源,那么虚拟化就表现为操作系统虚拟化。Linux容器虚拟化技术就是在同样的一份Linux操作系统之上,虚拟出多个同样的操作系统。再例如,如果把整个X86平台包括处理器、内存和外设作为资源,那么对应的虚拟化技术就是平台虚拟化,在同一个X86平台上面,可以虚拟多个X86平台,每个虚拟平台都可以运行自己独立完整的操作系统。这也是我们在本书中将要重点讨论的虚拟化技术。
在X86平台虚拟化技术中,新引入的虚拟化层通常称为虚拟机监控器(Virtual Machine Monitor, VMM),也叫做Hypervisor。虚拟机监控器运行的环境,也就是真实的物理平台,称之为宿主机。而虚拟出来的平台通常称为客户机,里面运行的系统对应地也称为客户机操作系统。
虚拟化技术有很多种实现方式,比如软件虚拟化和硬件虚拟化,再比如准虚拟化和全虚拟化。下面将针对每种实现方式做一个简单的介绍。
软件虚拟化和硬件虚拟化
通过前面的简单介绍,相信读者对虚拟化已经有了一个大致的了解。那么,什么是软件虚拟化和硬件虚拟化呢?在回答这个问题之前,读者需要思考一个问题:既然虚拟化这么美好,是不是物理资源都可以被虚拟化?
如图1-2所示,实现虚拟化的重要一步就在于,虚拟化层必须能够截获计算元件对物理资源的直接访问,并将其重新定向到虚拟资源池中。根据虚拟化层是通过纯软件的方法,还是利用物理资源提供的机制来实现这种“截获并重定向”,我们可以把虚拟化划分成为软件虚拟化和硬件虚拟化两种。
纯软件虚拟化,顾名思义,就是用纯软件的方法在现有的物理平台上(往往并不支持硬件虚拟化)实现对物理平台访问的截获和模拟。
常见的软件虚拟机例如QEMU,它是通过纯软件来仿真X86平台处理器的取指、解码和执行,客户机的指令并不在物理平台上直接执行。由于所有的指令都是软件模拟的,因此性能往往比较差,但是可以在同一平台上模拟不同架构平台的虚拟机。
硬件虚拟化,简而言之,就是物理平台本身提供了对特殊指令的截获和重定向的硬件支持。甚至,新的硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化,从而提升性能。
需要说明的是,硬件虚拟化技术是一套解决方案。完整的情况需要CPU、主板芯片组、BIOS和软件的支持,例如VMM软件或者某些操作系统本身。即使只是CPU支持虚拟化技术,在配合VMM软件的情况下,也会比完全不支持虚拟化技术的系统有更好的性能。现在市面上,从桌面的Core i3/5/7,到服务器端的E3/5/7/9,几乎全部都支持Intel VT技术。
准虚拟化与全虚拟化
准虚拟化(para-virtualization)
软件虚拟化可以在缺乏硬件虚拟化支持的平台上完全通过VMM软件来实现对各个虚拟机的监控,以保证它们之间彼此独立和隔离。但是付出的代价是软件复杂度的增加,和性能上的损失。减轻这种负担的一种方法就是,改动客户操作系统,使它以为自己运行在虚拟环境下,能够与虚拟机监控机协同工作。这种方法就叫准虚拟化(para-virtualization),也叫半虚拟化。本质上,准虚拟化弱化了对虚拟机特殊指令的被动截获要求,将其转化成客户机操作系统的主动通知。但是,准虚拟化需要修改客户机操作系统的源代码来实现主动通知。
Xen是开源准虚拟化技术的一个例子[4]。操作系统作为虚拟服务器在Xen Hypervisor上运行之前,它必须在内核层面进行某些改变。因此,Xen适用于BSD、Linux、Solaris及其他开源操作系统,但不适合对像Windows这些专有的操作系统进行虚拟化处理,因为它们不公开源代码,所以无法修改其内核。
全虚拟化(full virtualization)
与准虚拟化技术不同,全虚拟化为客户机提供了完整的虚拟X86平台,包括处理器、内存和外设,支持运行任何理论上可在真实物理平台上运行的操作系统,为虚拟机的配置提供了最大程度的灵活性。不需要对客户机操作系统做任何修改即可正常运行任何非虚拟化环境中已存在基于X86平台的操作系统和软件,是全虚拟化无可比拟的优势。可以预言,基于硬件的全虚拟化产品将是未来虚拟化技术的核心。
二、 KVM简介 (开源虚拟机)
KVM的全称是Kernel Virtual Machine,翻译成中文就是内核虚拟机。KVM虚拟机最初是由一个以色列的创业公司Qumranet开发的,作为他们的VDI产品的虚拟机。为了简化开发,KVM的开发人员并没有选择从底层开始新写一个Hypervisor,而是选择了基于Linux kernel,通过加载新的模块从而使Linux Kernel本身变成一个Hypervisor。
Redhat公司出人意料地出资1亿700百万美金,收购了Qumranet,从而成为了KVM开源项目的新东家。由于此次收购,Redhat公司有了自己的虚拟机解决方案,于是开始在自己的产品中用KVM替换Xen。2010年11月,Redhat公司推出了新的企业版Linux—RHEL 6,在这个发行版中集成了最新的KVM虚拟机,而去掉了在RHEL 5.x系列中集成的Xen。
KVM是基于虚拟化扩展(Intel VT或AMD-V)的X86硬件,是Linux完全原生的全虚拟化解决方案。部分的准虚拟化支持,主要是通过准虚拟网络驱动程序的形式用于 Linux 和 Windows 客户机系统的。KVM 目前设计为通过可加载的内核模块,支持广泛的客户机操作系统,比如 Linux、BSD、Solaris、Windows、Haiku、ReactOS和 AROS Research Operating System。
KVM 的基本架构
KVM的功能特性。
(1)内存管理
KVM从 Linux 继承了强大的内存管理功能。一个虚拟机的内存与任何其他 Linux 进程的内存一样进行存储,可以以大页面的形式进行交换以实现更高的性能,也可以以磁盘文件的形式进行共享。NUMA 支持(非一致性内存访问,针对多处理器的内存设计)允许虚拟机有效地访问大量内存。
KVM 支持最新的基于硬件的内存虚拟化功能,支持 Intel 的扩展页表(EPT)和 AMD 的嵌套页表(NPT,也叫“快速虚拟化索引-RVI”),以实现更低的 CPU 利用率和更高的吞吐量。
内存页面共享通过一项名为内核同页合并(Kernel Same-page Merging,KSM)的内核功能来支持。KSM 扫描每个虚拟机的内存,如果虚拟机拥有相同的内存页面,KSM 将这些页面合并到一个在虚拟机之间共享的页面,仅存储一个副本。如果一个客户机尝试更改这个共享页面,它将得到自己的专用副本。
(2)存储
KVM 能够使用 Linux 支持的任何存储来存储虚拟机镜像,包括具有 IDE、SCSI 和 SATA 的本地磁盘,网络附加存储(NAS)(包括 NFS 和 SAMBA/CIFS),或者支持iSCSI和光纤通道的SAN。多路径 I/O 可用于改进存储吞吐量和提供冗余。由于 KVM 是 Linux 内核的一部分,它可以利用所有领先存储供应商都支持的一种成熟且可靠的存储基础架构,它的存储堆栈在生产部署方面具有良好的记录。
KVM 还支持全局文件系统(GFS2)等共享文件系统上的虚拟机镜像,以允许虚拟机镜像在多个宿主之间共享或使用逻辑卷共享。磁盘镜像支持按需分配,仅在虚拟机需要时分配存储空间,而不是提前分配整个存储空间,提高存储利用率。KVM 的原生磁盘格式为 QCOW2,它支持快照,允许多级快照、压缩和加密。
(3)设备驱动程序
KVM 支持混合虚拟化,其中准虚拟化的驱动程序安装在客户机操作系统中,允许虚拟机使用优化的 I/O 接口而不使用模拟的设备,从而为网络和块设备提供高性能的 I/O。KVM 准虚拟化的驱动程序使用IBM和Red Hat联合Linux社区开发的VirtIO标准,它是一个与虚拟机管理程序独立的、构建设备驱动程序的接口,允许为多个虚拟机管理程序使用一组相同的设备驱动程序,能够实现更出色的虚拟机交互性。
(4)性能和可伸缩性
KVM 也继承了Linux的性能和可伸缩性。KVM虚拟化性能在很多方面(如计算能力、网络带宽等)已经可以达到非虚拟化原生环境的95%以上的性能。KVM的扩展性也非常良好,客户机和宿主机都可以支持非常多的CPU数量和非常大量的内存。例如,Redhat官方文档[5]就介绍过,RHEL 6.x系统中的一个KVM客户机可以支持160个虚拟CPU和多达2TB的内存,KVM宿主机支持4096个CPU核心和多达64TB的内存。
作为相对较新的虚拟化方案,KVM一直没有成熟的工具可用于管理 KVM 服务器和客户机。
三、Xen简介(开源虚拟机)
早在20世纪90年代,伦敦剑桥大学的Ian Pratt和Keir Fraser在一个叫做Xenoserver的研究项目中,开发了Xen虚拟机。作为Xenoserver的核心,Xen虚拟机负责管理和分配系统资源,并提供必要的统计功能。在那个年代,X86的处理器还不具备对虚拟化技术的硬件支持,所以Xen从一开始是作为一个准虚拟化的解决方案出现的。2007年10月,思杰公司出资5亿美金收购了XenSource,变成了Xen虚拟机项目的东家。
Xen是一个直接在系统硬件上运行的虚拟机管理程序。Xen在系统硬件与虚拟机之间插入一个虚拟化层,将系统硬件转换为一个逻辑计算资源池,Xen可将其中的资源动态地分配给任何操作系统或应用程序。在虚拟机中运行的操作系统能够与虚拟资源交互,就好像它们是物理资源一样。
Xen比较难于配置和使用,部署会占用相对较大的空间,而且非常依赖于0号虚拟机中的Linux操作系统。Xen微内核直接运行于真实物理硬件之上,开发和调试都比基于操作系统的虚拟化困难。Xen最大的困难在于Linux内核社区的抵制,导致Xen相关的内核改动一直不能顺利进入内核源代码,从而无法及时得到内核最新开发成果的支持,这与KVM形成了鲜明的对比。
三、VMWare简介
Vmware公司作为最成熟的商业虚拟化软件提供商,其产品线是业界覆盖范围最广的,下面会对VMware的主要产品进行简单的介绍。
(1)VMware Workstation
VMware Workstation是VMware公司销售的运行于台式机和工作站上的虚拟化软件,也是VMware公司第一个面市的产品(1999年5月)。该产品最早采用了VMware在业界知名的二进制翻译技术,在x86 CPU硬件虚拟化技术还未出现之前,为客户提供了纯粹的基于软件的全虚拟化解决方案。
(2)VMware ESX Server
ESX服务器(一种能直接在硬件上运行的企业级的虚拟平台),虚拟的SMP ,它能让一个虚拟机同时使用四个物理处理器,和VMFS一样,它能使多个ESX服务器分享块存储器。该公司还提供一个虚拟中心来控制和管理虚拟化的IT环境:VMotion让用户可以移动虚拟机器;DRS从物理处理器创造资源工具;HA 提供从硬件故障自动恢复功能;综合备份可使LAN-free自动备份虚拟机器;VMotion存储器可允许虚拟机磁盘自由移动;更新管理器自动更新修补程序和更新管理;能力规划能使VMware的服务供应商执行能力评估;转换器把本地和远程物理机器转换到虚拟机器;实验室管理可自动化安装、捕捉、存储和共享多机软件配置;ACE允许桌面系统管理员对虚拟机应用统一的企业级IT安全策略,以防止不可控台式电脑带来的风险。虚拟桌面基础设施可主导个人台式电脑在虚拟机运行的中央管理器;虚拟桌面管理,它是联系用户到数据库中的虚拟电脑的桌面管理服务器;WMware生命管理周期可通过虚拟环境提供控制权。
四、VirtualBox简介
Oracle VirtualBox是由德国InnoTek软件公司出品的虚拟机器软件,现在由甲骨文公司进行开发,是甲骨文公司xVM虚拟化平台技术的一部份。
它提供使用者在32位或64位的Windows、Solaris及Linux 操作系统上虚拟其他X86的操作系统。使用者可以在VirtualBox上安装并执行Solaris、Windows、DOS、Linux、OS/2 Warp、OpenBSD及FreeBSD等系统作为客户端操作系统。最新的VirtualBox还支持运行Android4.0系统。
与同性质的VMware及Virtual PC比较下,VirtualBox独到之处包括远端桌面协定(RDP)、iSCSI及USB的支援,VirtualBox在客户机操作系统上已可以支援USB 2.0的硬件装置。此外,VirtualBox还支持在32位宿主操作系统上运行64位的客户机操作系统。
VirtualBox既支持纯软件虚拟化,也支持Intel VT-x与AMD AMD-V硬件虚拟化技术。为了方便其他虚拟机用户向VirtualBox的迁移,VirtualBox可以读写VMware VMDK格式与VirtualPC VHD格式的虚拟磁盘文件。
五、Hpyer-V简介
Hyper-V是微软提出的一种系统管理程序虚拟化技术。Hyper-V设计的目的是为广泛的用户提供更为熟悉及成本效益更高的虚拟化基础设施软件,这样可以降低运作成本、提高硬件利用率、优化基础设施并提高服务器的可用性。
Hyper-V的设计借鉴了Xen,采用微内核的架构,兼顾了安全性和性能的要求。Hyper-V底层的Hypervisor运行在最高的特权级别下,微软将其称为ring -1(而Intel也将其称为root mode),而虚拟机的操作系统内核和驱动运行在ring 0,应用程序运行在ring 3。
Hyper-V采用基于VMbus的高速内存总线架构,来自虚拟机的硬件请求(显卡、鼠标、磁盘、网络),可以直接经过VSC,通过VMbus总线发送到根分区的VSP,VSP调用对应的设备驱动,直接访问硬件,中间不需要Hypervisor的帮助。
从架构上讲,Hyper-V只有“硬件-Hyper-V-虚拟机”三层,本身非常小巧,代码简单,且不包含任何第三方驱动,所以安全可靠、执行效率高,能充分利用硬件资源,使虚拟机系统性能更接近真实系统性能。
转载于:https://blog.51cto.com/57388/1554787