虚拟化技术
虚拟化技术简介
虚拟化技术的概念
虚拟化bai是指计算元件在虚du拟的基础上zhi而不是真实的基础上运行。虚dao拟zhuan化技术可以扩大硬shu件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化技术与多任务以及超线程技术是完全不同的。多任务是指在一个操作系统中多个程序同时并行运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上;而超线程技术只是单CPU模拟双CPU来平衡程序运行性能,这两个模拟出来的CPU是不能分离的,只能协同工作。
虚拟化技术也与目前VMware Workstation等同样能达到虚拟效果的软件不同,是一个巨大的技术进步,具体表现在减少软件虚拟机相关开销和支持更广泛的操作系统方面。
虚拟化,原本是指资源的抽象化,也就是单一物理bai资源的多个逻辑表示,或者多个物理资源的单一逻辑表示。具体到服务器虚拟化,就是多个物理资源的单一逻辑表示。另外,存储虚拟化就是这种模式的一个例子。
对不了解虚拟化的终端用户来说,听到上面说“单一物理资源的多个逻辑表示”,往往会认为“虚拟化技术也太抽象了”。可是,如果要看计算机架构的话,虚拟化正是计算机的本质。
想一下,PC同时启动使用邮件和Web浏览器等多个应用,这时候你就会理解虚拟化技术。在这个情况下,操作系统把PC物理资源抽象化了,将多个应用集中到一个物理资源环境下。因为虚拟化hypervisor是运行在操作系统上层的,所以会被认为有些抽象。不过,如果试着从计算机结构来理解的话,也不是那么晦涩。
虚拟化的主要类型:主机型和hypervisor型
虚拟化的类型大致可以分为主机型和hypervisor型。当虚拟化最初应用于PC时的主流类型是主机型。
主机型是将虚拟化软件作为一个应用安装的主机操作系统中。虚拟硬件包括主机操作系统中的虚拟化软件、操作系统和应用。因为是被作为一个应用,所操作系统不是那么快。
主机型虚拟化的问题在于,如果主机操作系统发生故障,就会波及到作为该操作系统一个应用的虚拟化软件。而且,在硬件模拟过程中也会发生诸多问题。
接下来是hypervisor型。hypervisor型是指通过低层级软件让多个操作系统得以共享相同的硬件设备。
虚拟化技术的分类
1.网络虚拟化
网络虚拟化相对计算、存储虚拟化来说是比较抽象的,以我们在学校书本上学的那点网络知识来理解网络虚拟化可能是不够的。在我们的印象中,网络就是由各种网络设备(如交换机、路由器)相连组成的一个网状结构,世界上的任何两个人都可以通过网络建立起连接。带着这样一种思路去理解网络虚拟化可能会感觉云里雾里——这样一个庞大的网络如何实现虚拟化?其实,网络虚拟化更多关注的是数据中心网络、主机网络这样比较「细粒度」的网络,所谓细粒度,是相对来说的,是深入到某一台物理主机之上的网络结构来谈的。如果把传统的网络看作「宏观网络」的话,那网络虚拟化关注的就是「微观网络」。网络虚拟化的目的,是要节省物理主机的网卡设备资源。从资源这个角度去理解,可能会比较好理解一点。
为了完成虚拟机在同主机和跨主机之间的通信,需要借助某种“桥梁”来完成用户态到内核态(Guest 到 Host)的数据传输,这种桥梁的角色就是由虚拟的网络设备来完成,上面介绍了一个第三方的开源方案——OVS,它其实是一个融合了各种虚拟网络设备的集大成者,是一个产品级的解决方案。但 Linux 本身由于虚拟化技术的演进,也集成了一些虚拟网络设备的解决方案,主要有以下几种:(1)TAP/TUN/VETHTAP/TUN 是 Linux 内核实现的一对虚拟网络设备,TAP 工作在二层,TUN 工作在三层。Linux 内核通过 TAP/TUN 设备向绑定该设备的用户空间程序发送数据,反之,用户空间程序也可以像操作物理网络设备那样,向 TAP/TUN 设备发送数据。基于 TAP 驱动,即可实现虚拟机 vNIC 的功能,虚拟机的每个 vNIC 都与一个 TAP 设备相连,vNIC 之于 TAP 就如同 NIC 之于 eth。当一个 TAP 设备被创建时,在 Linux 设备文件目录下会生成一个对应的字符设备文件,用户程序可以像打开一个普通文件一样对这个文件进行读写。比如,当对这个 TAP 文件执行 write 操作时,相当于 TAP 设备收到了数据,并请求内核接受它,内核收到数据后将根据网络配置进行后续处理,处理过程类似于普通物理网卡从外界收到数据。当用户程序执行 read 请求时,相当于向内核查询 TAP 设备是否有数据要发送,有的话则发送,从而完成 TAP 设备的数据发送。TUN 则属于网络中三层的概念,数据收发过程和 TAP 是类似的,只不过它要指定一段 IPv4 地址或 IPv6 地址,并描述其相关的配置信息,其数据处理过程也是类似于普通物理网卡收到三层 IP 报文数据。VETH 设备总是成对出现,一端连着内核协议栈,另一端连着另一个设备,一个设备收到内核发送的数据后,会发送到另一个设备上去,这种设备通常用于容器中两个 namespace 之间的通信。(2)BridgeBridge 也是 Linux 内核实现的一个工作在二层的虚拟网络设备,但不同于 TAP/TUN 这种单端口的设备,Bridge 实现为多端口,本质上是一个虚拟交换机,具备和物理交换机类似的功能。Bridge 可以绑定其他 Linux 网络设备作为从设备,并将这些从设备虚拟化为端口,当一个从设备被绑定到 Bridge 上时,就相当于真实网络中的交换机端口上插入了一根连有终端的网线。如下图所示,Bridge 设备 br0 绑定了实际设备 eth0 和 虚拟设备设备 tap0/tap1,当这些从设备接收到数据时,会发送给 br0 ,br0 会根据 MAC 地址与端口的映射关系进行转发。 Bridge 与 TAP/TUN 的关系 因为 Bridge 工作在二层,所以绑定到它上面的从设备 eth0、tap0、tap1 均不需要设 IP,但是需要为 br0 设置 IP,因为对于上层路由器来说,这些设备位于同一个子网,需要一个统一的 IP 将其加入路由表中。这里有人可能会有疑问,Bridge 不是工作在二层吗,为什么会有 IP 的说法?其实 Bridge 虽然工作在二层,但它只是 Linux 网络设备抽象的一种,能设 IP 也不足为奇。对于实际设备 eth0 来说,本来它是有自己的 IP 的,但是绑定到 br0 之后,其 IP 就生效了,就和 br0 共享一个 IP 网段了,在设路由表的时候,就需要将 br0 设为目标网段的地址。总结传统网络架构到虚拟化的网络架构,可以看作是宏观网络到微观网络的过渡TAP/TUN/VETH、Bridge 这些虚拟的网络设备是 Linux 为了实现网络虚拟化而实现的网络设备模块,很多的云开源项目的网络功能都是基于这些技术做的,比如 Neutron、Docker network 等。OVS 是一个开源的成熟的产品级分布式虚拟交换机,基于 SDN 的思想,被大量应用在生产环境中。
2.储存虚拟化
存储虚拟化是指通过在存储设备上加入一个逻辑层,管理员通过逻辑层访问或者调整存储资源,提高存储利用率。这样便于集中的存储设备以及提供更好的性能和易用性。存储虚拟化包括基于主机的存储虚拟化方式、基于存储设备的虚拟化方式以及基于网络的存储虚拟化方式。基于主机的虚拟存储依赖于代理或管理软件,通过在一个或多个主机上进行安装和部署,来实现存储虚拟化的控制和管理。这种方法的可扩充性较差,实际运行的性能不是很好。由于这种方法要求在主机上安装控制软件,因此一个主机的故障可能影响整个SAN系统中数据的完整性。基于主机的虚拟化实现起来比较容易,设备成本最低。基于存储设备的存储虚拟化是在通过第三方的虚拟软件,基于存储的虚拟化通常只能提供一种不完全的存储虚拟化解决方案。这种技术主要用在同一存储设备内部,进行数据保护和数据迁移。优势在于与主机无关,不占用主机资源,数据管理功能丰富。容易和某个特定存储供应商的设备相协调,所以更容易管理。
基于网络的虚拟化方法是在网络设备之间实现存储虚拟化功能:1.基于互联设备的虚拟化基于互联设备的虚拟化方法能够在专用服务器上运行,使用标准操作系统,例如Windows、Linux或供应商提供的操作系统。这种方法具有基于主机方法的诸多优势——易使用、设备便宜。但是,基于设备的方法也有一些不足,机的故障或不适当的主机配置都可能导致访问到不被保护的数据。2. 基于路由器的虚拟化基于路由器的方法是在路由器固件上实现存储虚拟化功能。在此方法中,路由器被放置于每个主机到存储网络的数据通道中,用来截取网络中任何一个从主机到存储系统的命令。由于不依赖于在每个主机上运行的代理服务器,这种方法比基于主机或基于设备的方法具有更好的安全性。当连接主机到存储网络的路由器出现故障时,仍然可能导致主机上的数据不能被访问。但是只有联结于故障路由器的主机才会受到影响,其他主机仍然可以通过其他路由器访问存储系统。路由器的冗余可以支持动态多路径,这也为上述故障问题提供了一个解决方法。基于网络的存储虚拟化是通过在存储区域网(SAN)中添加虚拟化引擎实现的。主要用于异构存储系统的整合和统一数据管理。它的优势是:第一,与主机无关,不占用主机资源;第二,能够支持异构主机、异构存储设备;第三,能使不同存储设备的数据管理功能统一;第四,可以构建统一管理平台,可扩展性好。但也存在缺点:第一,部分厂商数据管理功能弱,难以达到虚拟化统一数据管理的目的;第二,部分厂商产品成熟度较低,仍然存在和不同存储和主机的兼容性问题。
3.服务器虚拟化
虚拟化是一种方法,本质上讲是指从逻辑角度而不是物理角度来对资源进行配置,是从单一的逻辑角度来看待不同的物理资源的方法。以此出发,虚拟化是一种逻辑角度出发的资源配置技术,是物理实际的逻辑抽象。比如说,当前只有一台计算机,通过虚拟技术,在用户看来,可以多台,每台都有其各自的CPU、内存、硬盘等物理资源。
对于用户,虚拟化技术实现了软件跟硬件分离,用户不需要考虑后台的具体硬件实现,而只需在虚拟层环境上运行自己的系统和软件。而这些系统和软件在运行时,也似乎跟后台的物理平台无关。
服务器虚拟化技术是将服务器物理资源抽象成逻辑资源,让一台服务器变成几台甚至上百台相互隔离的虚拟服务器,我们不再受限于物理上的界限,而是让CPU、内存、磁盘、I/0等硬件变成可以动态管理的“资源池”,从而提高资源的利用率,简化系统管理,实现服务器资源整合,让IT对业务的变化更具适应力。
虚拟化的概念在20世纪60年代首次出现,利用它可以对属于稀有而昂贵资源的大型机硬件进行分区。随着时间的推移,微型计算机和PC可提供更有效、更经济的方法来分配处理能力,因此到20世纪80年代,虚拟技术已不再广泛使用。
但是到了20世纪90年代,研究人员开始探索如何利用虚拟化解决与廉价硬件激增相关的一些问题,例如,利用率不足、管理成本不断攀升和易受攻击等。虚拟化技术处于时代前沿,可以帮助企业升级和管理他们在世界各地的IT基础架构并确保其安全。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
所有的IT设备,不管是PC、服务器还是存储,都有一个共同点:它们被设计用来完成一组特定的指令。这些指令组成一个指令集。对于虚拟技术而言,“虚拟”实际上就是指的虚拟这些指令集。虚拟机有许多不同的类型,但是它们有一个共同的主题就是模拟一个指令集的概念。每个虚拟机都有一个用户可以访问的指令集。虚拟机把这些虚拟指令“映射”到计算机的实际指令集。硬分区、软分区、逻辑分区、Solaris Container、VMware、Ken、微软Hyper—V这些虚拟技术都是运用的这个原理,只是虚拟指令集所处的层次位置不同。无论哪一种虚拟技术,都要求需要实施虚拟化的物理服务器能够良好地支持这些的虚拟化指令集。
裸金属架构
裸金属服务器再度流行,目前阿里云、华为云、腾讯云等各大厂商都推出了自己的裸金属服务器,那么到底什么是裸金属服务器?裸金属服务器的架构原理是什么?什么是裸金属服务器?裸金属服务器(Bare Metal Server)类似云上的专属物理服务器,在拥有弹性灵活的基础上,具有高性能的计算能力。计算性能与传统物理机无差别,具有安全物理隔离的特点。裸金属服务器再度流行?目前云计算各大厂商都推出了自己的裸金属服务器,例如:阿里云的弹性裸金属服务器,腾讯云的黑石服务器,华为的BMS裸金属服务器,为何裸金属服务器再度流行?主要是由于以下几点原因:物理机才有安全感部分企业,尤其是大型企业,对于将私有数据中心迁移到公有云有些许担忧,裸金属服务器可以给用户物理机一样的安全感。性能要求较高如果用户的应用程序对性能要求敏感,这时候选择裸金属服务器是最佳的选择。安全监管某些应用场景对数据安全和监管要求非常严格,虚拟机无法满足用户要求,需要独占物理机,显然裸金属服务器是比较合适的选择。传统托管的弊端用户选择传统的服务器托管模式需要耗费更多时间去采购设备、部署等,这个流程比较复杂,周期也比较长,无法及时响应业务变化,这时候裸金属服务器比较合适。虚拟机与物理机相结合场景用户上云可能会存在多种形态的计算资源,某些情况下虚拟机无法满足复杂的应用场景,这时候可能就需要需要虚拟机和物理机相结合的场景,裸金属服务器应运而生。
寄居架构
全虚拟化
如果一个基于硬件运行(native)的OS不需要修改任何代码就可以直接跑在VMM上,也就是guest OS根本感知不到自己运行在一个虚拟化环境中(可以说VMM是骗术高明的),这种就被称为“完全虚拟化”。在这种模式下,VMM需要正确处理guest所有可能的指令。最简单直接的方法就是,VMM对guest运行过程中的每一条指令都进行解释和执行,模拟出这条指令执行的效果,这种方法既适用于和VMM相同体系结构的guest,也能用于模拟和VMM不同体系结构的guest(比如物理CPU是x86的,而guest是基于ARM的),其缺点也很明显,就是性能太差。有一些指令是要操作特权资源的,比如修改虚拟机的运行模式或者下面物理机的状态,读写时钟或者中断寄存器,这些指令被称为敏感指令,确实不适合由guest直接来控制。然而其他的一些非敏感指令,是完全可以在物理CPU上直接执行并返回结果给guest的,VMM只需要截获并模拟guest对敏感指令的执行和对特权资源的访问就可以了,以intel的VT-x和AMD的AMD-V为代表的硬件辅助虚拟化技术,就可以帮助VMM高效地识别和截获这些敏感指令。
半虚拟化
半虚拟化:半虚拟化技术是后来才出现的技术,也叫做准虚拟化技术,现在比较热门,它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API,这个API可以将客户操作系统发出的指令进行最优化,即不需要VMM耗费一定的资源进行翻译操作。
硬件辅助虚拟化
你的CPU只有4个线程,不还是可以同时运行一大堆应用么。比如一边看网页,一边听音乐,一边敲代码,一边编译,等。这在本质上和overcommit你的CPU来跑虚拟机没什么区别,就是个时分复用,由host OS的scheduler来调度各个线程/vCPU。因为你大多数的vCPU都是处于idle的状态,于是它们本质上并不会占用你的物理线程。你可以试试让所有的虚拟机同时运行CPU bound的application来感受一下。
操作系统虚拟化
操作系统虚拟化目前还是处于非主流状态.2006年11月8日,权威研究机构Gartner发布了一份服务器技术发展的研究报告,其中有一个不同寻常的预测:到2010年,共享的操作系统虚拟化将成为主流虚拟化技术.文中提到的服务器操作系统虚拟化厂商包括:Sun Solaris Containers,SWsoft Virtuozzo,以及IBM z/OS和HP.
服务虚拟化
桌面虚拟化
应用虚拟化
虚拟化技术的优势和劣势
虚拟化技术的优势
虚拟化技术的bai优势:
①更高的资源利用率——虚拟可支持实现物理资源和资源池的动态共享,提高资源利用率,特别是针对那些平均需求远低于需要为其提供专用资源的不同负载。
②降低管理成本——虚拟可通过以下途径提高工作人员的效率:减少必须进行管理的物理资源的数量;隐藏物理资源的部分复杂性;通过实现自动化、获得更好的信息和实现中央管理来简化公共管理任务;实现负载管理自动化。另外,虚拟还可以支持在多个平台上使用公共的工具。
③提高使用灵活性——通过虚拟可实现动态的资源部署和重配置,满足不断变化的业务需求。
④提高安全性——虚拟可实现较简单的共享机制无法实现的隔离和划分,这些特性可实现对数据和服务进行可控和安全的访问。
⑤更高的可用性——虚拟可在不影响用户的情况下对物理资源进行删除、升级或改变。
⑥更高的可扩展性——根据不同的产品,资源分区和汇聚可支持实现比个体物理资源小得多或大得多的虚拟资源,这意味着您可以在不改变物理资源配置的情况下进行规模调整。
⑦互操作性和投资保护——虚拟资源可提供底层物理资源无法提供的与各种接口和协议的兼容性。
⑧改进资源供应——与个体物理资源单位相比,虚拟能够以更小的单位进行资源分配。
虚拟所能提供的优势取决于客户的目标、所选择的特殊虚拟技术以及现有的IT基础架构。 并非所有的客户都能够从实现某一特殊虚拟化解决方案中获得同样的利益。 现在,即使是使用虚拟化进行简单的服务器整合,客户们也经常可以在某种程度上获得以下很多利益: 更高的资源利用率——虚拟可支持实现物理资源和资源池的动态共享,提高资源利用率,特别是针对那些平均需求远低于需要为其提供专用资源的不同负载。 n 降低管理成本——虚拟可通过以下途径提高工作人员的效率:减少必须进行管理的物理资源的数量; 隐藏物理资源的部分复杂性; 通过实现自动化、获得更好的信息和实现中央管理来简化公共管理任务; 实现负载管理自动化。 另外,虚拟还可以支持在多个平台上使用公共的工具。 n 提高使用灵活性——通过虚拟可实现动态的资源部署和重配置,满足不断变化的业务需求。 n 提高安全性——虚拟可实现较简单的共享机制无法实现的隔离和划分,这些特性可实现对数据和服务进行可控和安全的访问。 n 更高的可用性——虚拟可在不影响用户的情况下对物理资源进行删除、升级或改变。 n 更高的可扩展性——根据不同的产品,资源分区和汇聚可支持实现比个体物理资源小得多或大得多的虚拟资源,这意味着您可以在不改变物理资源配置的情况下进行规模调整。 n 互操作性和投资保护——虚拟资源可提供底层物理资源无法提供的与各种接口和协议的兼容性。 n 改进资源供应——与个体物理资源单位相比,虚拟能够以更小的单位进行资源分配。
虚拟化技术的劣势
1、缺乏虚拟bai化的总体规划
在部署虚拟化之前缺乏总体规划是当前虚拟化存在的最大陷阱。例如,部分用户只为提高部分应用中的服务器资源利用效率,缺乏对服务器、负载、应用和业务需求的全面研究和规划,等到应用了虚拟化软件之后,才认识到虚拟化需要针对不同的工作负载进行不同的考虑,并对不同的负载采用不同的方案,随之还会涉及虚拟应用的整合比等问题。还有很多用户对TCO研究不足,甚至在上虚拟机之前根本未考虑到还需在硬件、基础架构方面作出更多的深入分析和优化的投入。没有前期规划,会给虚拟化应用带来极大的风险。
2、缺乏虚拟化的系统管理
很多用户对虚拟化系统的管理没有充分认知,在部署后也没有重视并实施具体的管理方法,这很可能会导致虚拟环境产生性能问题,并给IT人员带来无尽的新的头疼问题。例如,在容量、性能、配置或自动化部署和管理等方面,虚拟化必然会成为一系列新问题的导火索。轻视虚拟化应用中的系统管理的复杂程度,造成系统管理不到位,将是虚拟化应用中致命的问题。
3、虚拟机负载过重
虚拟化可以对资源进行动态配置,从而处理更多,或者更少的负载,这种作法似乎可以解决虚拟设施可能负载过重的问题。但这并不意味着虚拟服务器就是永远压不垮的。虚拟技术有其自己的限制,在基础设施中添加其无法应付的太多虚拟机会适得其反。很多用户在配置虚拟机时对物理机的承受能力没有进行深入分析。
4、缺少测试环节
虚拟化是实现快速资源服务的途径,但这并不意味着IT部门就可以忽视虚拟机实施前和向虚拟基础设施分配应用之前的容量规划和测试。很多企业用户在应用了动态虚拟机之后才意识到没有测试I/O、占用率等其他问题,就匆匆将新的应用或服务器搬进了虚拟环境。这往往会带来很大的问题。
5、没有持续优化
在虚拟化中,大量的需求都是动态的。这也意味着企业在部署虚拟化的相关解决方案之后需要进行持续地管理与优化。很多用户在这个方面做得非常不够。企业的IT主管必须从一开始就做好虚拟机生命周期管理规划,并同时配备相关虚拟化管理制。
有诸多优点自然也伴随着不足之处,当然并不是每一个应用程序可以虚拟化。有些应用程序需要直接调用硬件,必须在共享的内存空间中运行,或者需要一个只与特定的设备兼容的专用的设备驱动程序。
前期高额的费用
虽然从长远来看,虚拟化技术是有经济效益的。当然考虑到更长久,我们不得不在硬件上投入更多的资金。从长远来看,肯定会节省开支,但是现实成本还是挺高的。
降低硬件利用率
这点似乎和上面所说的优点矛盾了,其实只是角度不同而已。虚拟化必然需要占用一部分资源(CPU/内存/硬盘),一个可以发挥出100%性能的物理机,加上虚拟化以后,可能只能发挥出80%的性能,所以又说它会降低资源的利用率。因此某些极度吃资源的应用可能并不适用于虚拟化的环境。
更大的错误影响面
在常规配置下,虚拟机存储于本地物理机硬盘上。真实物理机down机,上面的虚拟机将全部不可用。另外物理机硬盘损坏,一般可以恢复出绝大部分文件,但碰巧坏的是虚拟机镜像文件,结果虚拟机里面的文件可能全部损坏。
实施配置复杂,管理复杂
通常的IT管理员并不能很好的排查并解决虚拟化使用过程中的问题,例如经常碰到的VM不能启动或者卡死,没有真实物理机那么好解决。
一定的限制性
使用虚拟化技术的一个主要缺点是,它涉及到各种限制。并非所有的服务器和应用程序虚拟化是友好的,这意味着你的企业的IT基础设施的某些方面可能与虚拟化解决方案兼容。为此,应该考虑的是,仍然有不完全支持虚拟化环境的供应商。
安全性
虽说虚拟化技术在安全上已经很不错了,但是虚拟化技术自身也存在着一定的安全隐患。虚拟化过程的目的是分离虚拟化的资源,但是仍然有一些情况下,服务器意外地对其他不应该看到它们的人可见。
虚拟化技术与云计算
虚拟化是一种将功能与硬件分离的技术,而云则建立在这种分离技术之上。由于两者的核心理念都是从抽象资源中创建可用的环境,所以很容易被混为一谈。单纯地从基础架构即服务(IaaS)的角度来理解二者的区别最为简单。稳定的操作系统(如Linux®)是云计算的基础。它可帮助用户实现公共、私有和混合环境之间的独立性。如果您已经设置好相应的内部网和/或互联网访问权限,则可通过虚拟化来创建云。借助一个名为 “Hypervisor”(虚拟机监控程序)的软件,可以监控物理硬件,并对机器中各项资源进行抽象。这些资源可以是原始处理能力、存储或基于云的应用,这些应用包含部署所需的所有运行时代码和资源。如果就此止步,那么您实施的就是虚拟化,而不是云计算。只有当虚拟资源被分配至中央池中,才能被称为“云”;这些云还需通过管理和自动化软件进行编排,才能被视为“云计算”。云具备以下额外优势:自助服务访问权限、自动化基础架构扩展和动态资源池——这些是它与传统虚拟化的最大区别。具体比较虚拟化的主要功能是把单个资源抽象成多个给用户使用,而云计算则是帮助不同部门(通过私有云)或公司(通过公有云)访问一个自动置备的资源池。虚拟化 借助虚拟化技术,用户能以单个物理硬件系统为基础创建多个模拟环境或专用资源。名为“虚拟机监控程序”的软件可直接连接到硬件,从而将一个系统划分为不同的、单独安全环境,即虚拟机(VM)。虚拟机监控程序能够将计算机资源与硬件分离并适当分配资源,而虚拟机则依赖这些功能运行。云计算 云计算则由多种规则和方法组合而成,可以跨任何网络向用户按需提供计算、网络和存储基础架构资源、服务、平台和应用。这些基础架构资源、服务和应用来源于云。 简单来讲,云就是一系列管理及自动化软件编排而成的虚拟资源池,旨在帮助用户通过支持自动扩展和动态资源分配的自助服务门户,按需对这些资源进行访问。如何从虚拟化转换成云计算?如果已经有虚拟基础架构,您可以将虚拟资源集中在一起,使用管理和自动化软件对其进行编排,然后为用户创建自助服务门户,以此来创建云服务。但是,如果您受到供应商的企业许可协议的约束,则可能会限制您投资云、容器和自动化系统等现代技术,那么实现从虚拟化向云计算的转换就不是那么简单了。
虚拟化技术原理
CPU虚拟化
一个KVM(kernel-based virtual machine)虚拟机在宿主机上就是一个 qemu-kvm进程,与其他Linux进程一样被调用。 虚拟机的每个虚拟CPU则对应 qemu-kvm进程中的一个进程。 因此,虚拟CPU可以超过物理CPU的数量,叫CPU超配。
内存虚拟化
KVM通过内存虚拟化共享物理系统内存,动态分配给虚拟机。
image
为了在一台机器上运行多个虚拟机,KVM需要实现VA(虚拟内存) --> PA(物理内存) --> MA(机器内存)的转换,其中虚拟机OS控制VA->PA的转换,KVM负责PA->MA的映射。
存储虚拟化
KVM的虚拟化通过存储池(Storage Pool)和卷(Volume)实现。 存储池是宿主机可见的一片存储空间,,可以分为多种类型。 卷是存储池的一块空间,卷在虚拟机眼中就是一块硬盘。 不同类型的存储池:
- 目录类型
文件目录是最常见的存储池。 目录是一个存储池,默认是 /var/lib/libvirt/images/ 目录里的一个文件就是一个卷。
使用文件做卷的优点:
存储方便
移植性好
可复制
可远程访问
KVM支持多种卷格式:
raw: 默认格式,镜像什么格式,卷就是什么格式
qcow2: cow即写时复制(copy on write),节省空间,支持AES加密。
vmdk:是VMWare 的虚拟磁盘格式,VM虚拟机可以直接在KVM上运行
vdi: 是VirtualBox的虚拟磁盘格式
- 逻辑卷管理(Logical Volume Manager)类型
宿主机上的VG(Volume Group)中的LV(Logical Volume)作为虚拟磁盘分配给虚拟机使用,只能作为数据盘,不能作为启动盘,因为它没有MBR引导记录。 这种情形,主机的VG就是存储池,LV就是卷。
- 其他类型
KVM还支持 iSCSI, Ceph等多种类型的存储池。
网络虚拟化
基本概念
假设宿主机有1块物理网卡en0, 运行着一个虚拟机VM1。那问题是如何让VM1访问外网呢? a):将物理网卡直接分配给虚拟机,但这样会导致宿主机和其他的虚拟机没有网络连接了。 b):给虚拟机分配一个虚拟网卡vnet0, 通过Linux Bridge br0 将 en0和vnet0连接起来。这个是实际采用的方案。
Linux Bridge可以看做是物理接口和虚拟接口的转发器。
如果添加虚拟机VM2,自然也给它分配虚拟网卡vet0, 这两块虚拟网卡都通过 br0 和en0通信,并且虚拟机之前是可以直接通信的。因此br0就充当了两台虚拟机的出口网关。
- VLAN
没有VLAN之前,连在同一交换机上的主机共享广播域,独占冲突域,相互之间可以直接通信。 VLAN 能够将一个交换机的端口划分为若干个组, 使得连接在同一组中端口的主机位于同一逻辑网络中,不同VLAN间通信需要经过三层路由。
VLAN是二层上的隔离,隔离广播指的是二层以太网广播帧,和三层的IP广播报文区别开来。
VLAN用VLAN ID 唯一标示组,范围是 [1, 4096]。 支持VLAN的交换机因而具有两种端口:access端口和trunk端口。 access口隶属某一个组,只能把access口划分给一个VLAN组,没有显式指定,默认在0号组。 trunk口允许不同的VLAN帧通过,通常是连接两个交换机的端口模式。
image
eth0是宿主机的物理网卡,eth0.10是与它连接的子设备。
eth0.10就是VLAN设备,vlan id 是10。
eth0.10挂载在brvlan10的Linux Bridge上, 虚拟机VM1的虚拟网卡vnet0也挂载在 brvlan10上。
如此一来,vnet0, brvlan10 和 eth0.10 都接在VLAN10 的Access口上。而eth0充当trunk口。
如果再增加一个VLAN2
image
那么VM2的三个虚拟接口都是接在VLAN 20 上的。对于新创建的虚拟机,只要为它创建一个VLAN组,并将其虚拟网卡放到这个组中,就能共享宿主机的物理网卡了。还有,一个物理网卡可以为多个虚拟网卡服务,而一个虚拟网卡则只能对应于一块物理网卡。即一对多关系。
- Linux Bridge + VLAN = 虚拟交换机
对LVM的网络虚拟化总结:
物理交换机存在多个VLAN, 每个VLAN拥有多个端口。
同一VLAN的主机可以互相通信,不同VLAN端口之间相互隔离。因此交换机包含两层功能:交换和隔离。
Linux的VLAN设备实现的是隔离,但没有交换功能。
一个VLAN母设备(如eth0)不能拥有两个相同VLAN id的子设备。
Linux Bridge专门实现交换功能。
将同一VLAN的子设备都挂载到一个Bridge上,设备(也就是两台虚拟机)之间可以交换数据。
什么是虚拟化?云计算的核心技术之一就是虚拟化技术。所谓虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。虚拟化的核心软件VMM,是一种运行在物理服务器和操作系统之间的中间层软件。VMM是一种在虚拟环境中的“元”操作系统。他们可以访问服务器上包括CPU、内存、磁盘、网卡在内的所有物理设备。VMM不但协调着这些硬件资源的访问,也同时在各个虚拟机之间施加防护。当服务器启动并执行VMM时,它会加载所有虚拟机客户端的操作系统同时会分配给每一台虚拟机适量的内存,CPU,网络和磁盘。虚拟化方式虚拟化技术有很多实现方式,比如根据虚拟化的程度和级别,有软件虚拟化和硬件虚拟化,全虚拟化和半虚拟化。软件虚拟化:顾名思义,就是采用纯软件的方法在在现有的物理平台上实现物理平台访问的截获和模拟,该物理平台往往不支持硬件虚拟化。硬件虚拟化:简单来说,就是物理平台本身提供了对特殊指令的截获和重定向的硬件支持,新的硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化,从而提升性能。全虚拟化:完全虚拟化技术又叫硬件辅助虚拟化技术,最初所使用的虚拟化技术就是全虚拟化(Full Virtualization)技术,它在虚拟机(VM)和硬件之间加了一个软件层Hypervisor,或者叫做虚拟机管理程序或虚拟机监视器(VMM)。半虚拟化:半虚拟化技术是后来才出现的技术,也叫做准虚拟化技术,现在比较热门,它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API,这个API可以将客户操作系统发出的指令进行最优化,即不需要VMM耗费一定的资源进行翻译操作。
虚拟机技术原理
虚拟机其实就是一款模拟电脑硬件的软件。比如说你的电脑,在没有装windows系统或者其他操作系统之前,它本身是一个由硬件组装的电脑,一般称为裸机。而虚拟机就是模拟电脑硬件的一款软件。记住,虚拟机是一款软件。你装了虚拟机之后可以相当于你多了一台裸机。然后再在虚拟机里装操作系统,就相当于多了一台电脑。注:简洁点,虚拟机的原理就是模拟硬件的。
1、虚拟机(英文全称:Virtual Machine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,目前流行的虚拟机软件有VMware(VMWare ACE)、Virtual Box和Virtual PC,它们都能在Windows系统上虚拟出多个计算机,每个虚拟计算机可以独立运行,可以安装各种软件与应用等。 2、虚拟机在现实中的作用还是相当大的,比如最简单我们电脑中没有光驱,如果要安装系统就可以使用虚拟机来安装系统,虚拟机内部拥有虚拟光驱,支持直接打开系统镜像文件安装系统,另外虚拟机技术在游戏爱好者朋友眼中也相当实用,比如一般一台电脑很多游戏不支持同时多开,但我们可以在电脑中多创建几个虚拟机,那么在虚拟机系统中即可单独再运行程序了,这样即可实现一台电脑同时多开同一游戏了。 3、其实虚拟机在企业中应用非常广,由于服务器通常配置很高,因为很多服务器网络商为了满足中小站长需求,通常将一台服务器划分出多个虚拟机服务器,这样每个网站即可分配独立服务器资源一部分,并且互相不影响且可以配独立IP地址,大大解决了中小企业使用单独服务器费用过高的问题,目前购买的VPS服务器则均为采用该技术,做过网站的朋友初期用到的虚拟空间也是该原理。
CPU虚拟化原理
cpu的虚拟化技术:CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率;虚拟化技术与多任务以及超线程技术是完全不同的。多任务是指在一个操作系统中多个程序同时并行运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上;而超线程技术只是单CPU模拟双CPU来平衡程序运行性能,这两个模拟出来的CPU是不能分离的,只能协同工作;虚拟化技术也与目前VMware Workstation等同样能达到虚拟效果的软件不同,是一个巨大的技术进步,具体表现在减少软件虚拟机相关开销和支持更广泛的操作系统方面;纯软件虚拟化解决方案存在很多限制。“客户”操作系统很多情况下是通过VMM(Virtual Machine Monitor,虚拟机监视器)来与硬件进行通信,由VMM来决定其对系统上所有虚拟机的访问。(注意,大多数处理器和内存访问独立于VMM,只在发生特定事件时才会涉及VMM,如页面错误。)在纯软件虚拟化解决方案中,VMM在软件套件中的位置是传统意义上操作系统所处的位置,而操作系统的位置是传统意义上应用程序所处的位置。这一额外的通信层需要进行二进制转换,以通过提供到物理资源(如处理器、内存、存储、显卡和网卡等)的接口,模拟硬件环境。这种转换必然会增加系统的复杂性。此外,客户操作系统的支持受到虚拟机环境的能力限制,这会阻碍特定技术的部署,如64位客户操作系统。在纯软件解决方案中,软件堆栈增加的复杂性意味着,这些环境难于管理,因而会加大确保系统可靠性和安全性的困难;而CPU的虚拟化技术是一种硬件方案,支持虚拟技术的CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易提高性能,相比软件的虚拟实现方式会很大程度上提高性能。虚拟化技术可提供基于芯片的功能,借助兼容VMM软件能够改进纯软件解决方案。由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,从而无需进行二进制转换,减少了相关的性能开销,极大简化了VMM设计,进而使VMM能够按通用标准进行编写,性能更加强大。另外,在纯软件VMM中,目前缺少对64位客户操作系统的支持,而随着64位处理器的不断普及,这一严重缺点也日益突出。而CPU的虚拟化技术除支持广泛的传统操作系统之外,还支持64位客户操作系统;两大CPU巨头Intel和AMD都想方设法在虚拟化领域中占得先机,但是AMD的虚拟化技术在时间上要比Intel落后几个月。Intel自2005年末开始便在其处理器产品线中推广应用Intel Virtualization Technology(Intel VT)虚拟化技术。目前,Intel已经发布了具有Intel VT虚拟化技术的一系列处理器产品,包括桌面平台的Pentium 4 6X2系列、Pentium D 9X0系列和Pentium EE 9XX系列。
事实上,不同类型的虚拟化技术是从不同的地方开始引导虚拟机系统的:
从模拟的 BIOS 开始引导的,支持 MBR、EFI、PXE 等启动方式,如 QEMU、VMWare;
从内核开始引导的,虚拟机镜像内不包含内核,如 KVM、Xen;
从 init 进程开始引导的,虚拟机是一个与主机共享内核的容器,会按照操作系统的引导过程启动各种系统服务,如 LXC、OpenVZ;
只运行一个特定的应用程序或服务的,也是基于容器,如 Docker。
/dev/kvm提供的操作包括:
• 创建一个新的虚拟机
• 向一个虚拟机中分配内存
• 读写虚拟cpu寄存器
• 向一个虚拟cpu中注入中断
• 运行一个虚拟cpu
我们在前面的文章中提到了虚拟化技术的大致分类情况,即分为全虚拟化、半虚拟化和硬件辅助虚拟化3大类。而我们虚拟化技术最主要的虚拟主体就是我们的硬件CPU、内存和IO,那么我们的CPU在全虚拟化模式下如何工作,在半虚拟化下如何工作,在硬件辅助虚拟化模式下如何工作?或着说细分下来,我们又可以分为:
CPU的全虚拟化技术、半虚拟化技术和硬件辅助虚拟化技术,
内存的全虚拟化技术、半虚拟化技术和硬件辅助虚拟化技术
IO设备的全虚拟化技术、半虚拟化技术和硬件辅助虚拟化技术。
本次我们就来说说CPU的全虚拟化技术、半虚拟化技术和硬件辅助虚拟化技术。
不支持硬件辅助虚拟化技术的X86架构下的CPU有4个特权级(ring0~ring3),操作系统是处于最高级别的ring0,应用程序处于最低级别的ring3。
内存虚拟化原理
虚拟机管理程序 (HV) 通过虚拟真实的物理内存, 以便在虚拟机中运行的未经修改的操作系统 (如 linux 或 android),客户操作系统可以管理自己的连续物理内存的视图。虚拟机管理程序使用虚拟处理器标识符 (VPID) 和扩展页面表 (EPT) 来把客户物理地址转换为实际主机物理地址。虚拟机管理程序启用了EPT和 VPID 硬件虚拟化功能, 为操作系统和客户系统建立了EPT页表, 并向其他应用程序提供了EPT页表操作接口。从虚拟机管理程序的角度来看, 需要考虑以下几种内存空间,有:主机物理地址 (Host Physical Address): 本地主机物理地址空间,主机虚拟地址 (Host Virtual Address): 基于MMU机制的本地主机虚拟地址空间。我们使用页面表管理在HPA和HVA空间之间进行映射。从虚拟机上运行的客户操作系统来看, 有:客户物理地址 (Guest Physical Address): 虚拟机的客户操作系统的物理地址空间。在GPA到HPA之间的映射通常需要基于类似MMU的硬件模块 (例如X86中的EPT), 同时与页面表相关联客户操作系统虚拟地址 (Guest Virtual Address): 基于VMMU机制的虚拟机中客户操作系统的虚拟地址空间通常在这样的架构下,内存地址访问有四层映射:GVA - GPA - HVA - HPA GVA - GPA 的映射由客户操作系统来负责,而 HVA - HPA 由微内核虚拟化操作系统来负责维护。于是在虚拟化系统中我们需要一种机制,来维护 GPA - HVA 的映射。常用的实现有 SPT(Shadow Page Table) 和 EPT/NPT (Intel) ,前者通过软件维护影子页表,后者通过硬件特性实现二级映射。 本文说明虚拟化系统的内存管理基础结构, 以及它如何在虚拟化系统内处理不同的内存空间:虚拟机管理程序如何管理本地主机内存 (HPA/HVA)虚拟机管理程序如何管理客户操作系统内存 (HPA/GPA)虚拟机管理程序如何管理两个不同客户操作系统内存(HPA/GPA) 虚拟化物理内存管理 在虚拟化系中, 虚拟机最先初始化MMU页表以管理所有物理内存, 然后切换到新的MMU页表。在平台初始化阶段初始化MMU页表后, 就不会对MMU页表进行更新,因为这牵涉到客户操作系统内存和交互区域,系统启动时间优化等问题,因此MMU在平台初始化阶段固定对系统稳定性有一定的影响。虚拟化物理内存分布 无可非议虚拟机管理程序必须具备系统内存管理功能。通常情况下, 系统启动引导程序 (例如Intel的EFI) 将系统物理内存布局表传递给虚拟机管理程序,虚拟机管理程序基于此表使用分级页表来执行内存管理工作。如下图所示,此表包含系统平台的原始内存布局。虚拟化内存初始化 虚拟机管理程序在分页模式下运行。系统启动引导处理器 (BSP) 获取系统平台内存布局表后, BSP将在此基础上创建其MMU页面表。应用处理器 (AP) 接收 IPI CPU启动中断后, 它将使用由BSP创建的 MMU页表,并启用SMEP。SMEP(Supervisor Mode Execution Prevention),在现代intel处理器上,当设置了CR4存器的控制位时,会保护特权进程(比如在内核态的程序)不能在不含supervisor标志(对于ARM处理器,就是PXN标志)的内存区域执行代码。(直白地说就是内核程序不能跳转到用户态执行代码)。 虚拟机管理程序可以访问所有系统内存,并有自己的内存,为其代码/数据的 write-back 缓存,使用最小内存页将虚拟地址空间映射到物理地址空间。如果更新了页面的内存类型或访问权限, 或者删除了某些虚拟地址空间, 则会导致相应页面的拆分。虚拟机管理程序仍将继续使用最小内存页将虚拟地址空间映射到物理地址空间。内存分页池功能 内存分页池功能提供了对多种4kb 页面大小内存块的动态管理, 虚拟机管理程序通常使用这些内存块来存储内部数据。通过这些功能, 虚拟机管理程序可以分配和释放相应的内存页面。虚拟机管理程序内存虚拟化 虚拟机管理程序为每个客户操作系统提供了一个连续的物理内存区域。它还保证每个客户操作系统互相隔离不能访问彼此程序中的代码和内部数据, 并且每个客户操作系统在未授权的情况下不能访问虚拟机的代码和内部数据。虚拟机管理程序应该支持以下功能:支持EPT和VPID硬件虚拟化功能,为每个客户操作系统建立EPT页表,提供EPT页表操作服务,为每个客户操作系统提供虚拟化的MTRR机制,提供VPID操作服务,为GPA和HPA之间的地址空间映射提供服务,提供虚拟机管理程序和每个客户操作系统之间的数据传输服务。虚拟化内存功能检查 在虚拟机管理程序中, 内存虚拟化提供 EPT/VPID功能检查服务和支持EPT大型页面检查服务。不同地址空间的数据传输 在虚拟化系统中, 虚拟机管理程序、不同客户操作系统中使用不同的内存空间来实现各自的隔离。在这些内存空间之间, 有不同类型的数据传输, 客户操作系统可能会使用超调用来请求虚拟机管理程序提供数据传输服务。访问客户操作系统内存地址GPA 当虚拟机管理程序需要访问GPA来进行数据传输时, 来自客户操作系统的调用方必须确保此GPA内存地址范围是连续的。但对于虚拟机管理程序中的HPA主机物理内存地址, 它可能是不连续的 (特别是对于 巨型页表分配机制下的用户操作系统)。例如, 4Mb的GPA地址范围可能映射到2个不同的2Mb巨型主机物理页面。虚拟机管理程序应该通过基于其HPA的EPT页面滑动来处理这种数据传输。访问客户操作系统内存地址GVA 当虚拟机管理程序需要访问GVA内存地址数据进行数据传输时, GPA和HPA地址可能都是不连续的。虚拟机管理程序最好监视这种数据传输, 并通过基于其GPA和HPA 内存页表相应滑动来处理它。内存扩展页表的操作 虚拟机管理程序使用最小内存页表将客户操作系统的物理地址 (GPA) 映射到主机物理地址 (HPA) 。 如果更新了页面的内存类型或访问权限或删除了某些 GPA 空间, 则会导致相应的EPT页表被拆分。虚拟机管理程序仍应继续使用最小的EPT页表将GPA空间映射到HPA空间。 虚拟机管理程序提供EPT客户操作系统物理内存增加、删除、EPT页表重新分配、以及内存无效服务。
网络虚拟化原理
常见的虚拟化技术解决方案
OpenStack
OpenStack是一个开源的云计算管理平台项目,OpenStack也是云计算技术,由几个主要的组件组合起来完成具体工作。OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenStack通过各种互补的服务提供了基础设施即服务(IaaS)的解决方案,每个服务提供API以进行集成。
OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目。它的社区拥有超过130家企业及1350位开发者,这些机构与个人都将OpenStack作为基础设施即服务(IaaS)资源的通用前端。OpenStack项目的首要任务是简化云的部署过程并为其带来良好的可扩展性。本文希望通过提供必要的指导信息,帮助大家利用OpenStack前端来设置及管理自己的公共云或私有云。
OpenStack云计算平台,帮助服务商和企业内部实现类似于 Amazon EC2 和 S3 的云基础架构服务(Infrastructure as a Service, IaaS)。OpenStack 包含两个主要模块:Nova 和 Swift,前者是 NASA 开发的虚拟服务器部署和业务计算模块;后者是 Rackspace开发的分布式云存储模块,两者可以一起用,也可以分开单独用。OpenStack除了有 Rackspace 和 NASA 的大力支持外,还有包括 Dell、Citrix、 Cisco、 Canonical等重量级公司的贡献和支持,发展速度非常快,有取代另一个业界领先开源云平台 Eucalyptus 的态势。
KVM
KVM代表着键盘(Keyboard)、显示器(Video)和鼠标(Mouse),即利用一组键盘、显示器和鼠标实现对多台设备的控制,在远程调度监控方面发挥着重要作用。KVM技术可以向远程终端发送调度信息网中的各项数据资料,为下一级调度机构提供方便,这样即便下级调度机构没有建立调度数据网,也能够实现信息的共享。
多计算机切换器(KVM)以多主机切换技术为依据,借助一组键盘、鼠标和显示器完成多台服务器之间的切换,进而节省空间,降低成本,使得管理更为简易方便,以提升工作效率。该技术具有很多优点,应用十分广泛。首先,在整个机房管理中,改变了传统的一对一的控制方式,而采用了一对多的管理方式,有利于节省空间、提高工作效率;其次,主机系统的安全性能得到了很大提升,而且具备了长距离的传输能力,在与远程用户相连接时,安全性能得到良好的保证;在服务器较多的情况下,通过数字交换机与其他服务器相连,并能与远程相连,可同时对本地和远程进行控制。在一些大型系统的解决方案中,可使用具有模拟交换机矩阵功能的大型模块系统,能够满足终端用户同时对上百台甚至更多服务器的访问,进而实现从中心点通过KVM系统对各地的服务器进行有效控制。此外,该技术也可以在家庭中用,为普通用户提供了很多方便。
Hyper-V
Hyper-V是微软的一款虚拟化产品,是微软第一个采用类似Vmware ESXi和Citrix Xen的基于hypervisor的技术。这也意味着微软会更加直接地与市场先行者VMware展开竞争,但竞争的方式会有所不同。
Hyper-V是微软提出的一种系统管理程序虚拟化技术,能够实现桌面虚拟化 [1] 。Hyper-V最初预定在2008年第一季度,与Windows Server 2008同时发布。Hyper-V Server 2012完成RTM版发布。
VMware
VMWare (Virtual Machine ware)是一bai个“虚拟PC”软件公司.它的产du品可zhi以使你在一台机器上同时运行dao二zhuan个或更多Windows、DOS、LINUX系统。shu与“多启动”系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就象标准Windows应用程序那样切换。而且每个操作系统你都可以进行虚拟的分区、配置而不影响真实硬盘的数据,你甚至可以通过网卡将几台虚拟机用网卡连接为一个局域网,极其方便。安装在VMware操作系统性能上比直接安装在硬盘上的系统低不少,因此,比较适合学习和测试。
Xen
Xen采用ICA协议 [1] ,通过一种叫做准虚拟化的技术获得高性能,甚至在某些与传统虚拟技术极度不友好的架构上(x86),Xen也有上佳的表现。与那些传统通过软件模拟实现硬件的虚拟机不同,在Intel VT-X支持下3.0版本之前的Xen需要系统的来宾权限,用来和Xen API进行连接。这种技术已经可以运用在NetBSD, GNU/Linux, FreeBSD和Plan 9系统上。Sun微系统公司也正在积极地将Solaris移植到Xen平台之上。
Xen虚拟机可以在不停止的情况下在多个物理主机之间实时迁移。在操作过程中,虚拟机在没有停止工作的情况下内存被反复的复制到目标机器。虚拟机在最终目的地开始执行之前,会有一次60-300毫秒的非常短暂的暂停以执行最终的同步化,给人无缝迁移的感觉。类似的技术被用来暂停一台正在运行的虚拟机到磁盘,并切换到另外一台,第一台虚拟机在以后可以恢复。
XEN 是一个基于X86架构、发展最快、性能最稳定、占用资源最少的开源虚拟化技术。Xen可以在一套物理硬件上安全的执行多个虚拟机,与 Linux 是一个完美的开源组合,Novell SUSE Linux Enterprise Server 最先采用了XEN虚拟技术。它特别适用于服务器应用整合,可有效节省运营成本,提高设备利用率,最大化利用数据中心的IT基础架构。
XEN 是英国剑桥大学计算机实验室开发的一个虚拟化开源项目,XEN 可以在一套物理硬件上安全的执行多个虚拟机,它和操作平台结合的极为密切,占用的资源最少。编写文档时稳定版本为XEN3.0。支持万贯虚拟化和超虚拟化。以高性能、占用资源少著称,赢得了IBM、AMD、HP、Red Hat和Novell等众多世界级软硬件厂商的高度认可和大力支持,已被国内外众多企事业用户用来搭建高性能的虚拟化平台。
IBM经常在其主机和服务器上使用虚拟机来尽可能发挥其性能,并类似chroot监禁那样将程序置于隔离的虚拟OS中以增强安全性。除此之外,它还能使不同和不兼容的OS运行在同一台计算机上。Xen对虚拟机活跃迁移的支持允许工荷平衡和避免停时。
Docker
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走。docker就是类似的理念。现在都流行云计算了,云计算就好比大货轮。docker就是集装箱。1.不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成一些冲突。比如IIS和Apache访问端口冲突。这个时候你就要隔离.net开发的网站和php开发的网站。常规来讲,我们可以在服务器上创建不同的虚拟机在不同的虚拟机上放置不同的应用,但是虚拟机开销比较高。docker可以实现虚拟机隔离应用环境的功能,并且开销比虚拟机小,小就意味着省钱了。2.你开发软件的时候用的是Ubuntu,但是运维管理的都是centos,运维在把你的软件从开发环境转移到生产环境的时候就会遇到一些Ubuntu转centos的问题,比如:有个特殊版本的数据库,只有Ubuntu支持,centos不支持,在转移的过程当中运维就得想办法解决这样的问题。这时候要是有docker你就可以把开发环境直接封装转移给运维,运维直接部署你给他的docker就可以了。而且部署速度快。3.在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。